Por que meu programa não pode compilar no Windows 7 em francês? [fechadas]


237

Estou executando o Windows 7 em francês e estou tentando compilar esse programa realmente básico, mas o Visual Studio está sendo teimoso e se recusa a cumprir. Também tentei compilá-lo com o tronco GCC 4.7 e Clang no Coliru e recebo mais ou menos os mesmos erros (a saída está abaixo do código), embora eu ache que o Coliru seja executado em um sistema operacional inglês, por isso não esperaria que funcionasse de qualquer maneira .

O que estou fazendo de errado? E como posso corrigir isso?

Código

#inclure <iostream>

ent principal(ent argn, ent** argm)  // entier, nombre d'arguments, valeur des arguments
{
   std::cendehors << "Bonjour le monde!\n";
   renvoi SORTIE_SUCCÈS;
}

Resultado

principal.cpp:1:6: erreur: prétraitement de la directive invalide #inclure
     #inclure <iostream>
      ^
principal.cpp:6:8: erreur: '\303' égaré dans le programme
        renvoi SORTIE_SUCCÈS;
        ^
principal.cpp:6:8: erreur: '\210' égaré dans le programme
principal.cpp:3:5: erreur: «ent» ne désigne pas un type
     ent principal(ent argn, ent** argm)  // entier, nombre d'arguments, value des arguments
     ^

3
Você provavelmente deve usar std::findeligneem vez de usar um \npersonagem :)
Aliou

66
Parece uma pergunta piada de primeiro de abril .....
Basile Starynkevitch

2
Tem certeza de que iostreamo nome correto do cabeçalho está em francês?
Bart van Nierop

9
Eu acho que o problema está no idioma que você escolheu.
Phoops

2
Não olhe para o compilador, ele e eu tivemos dificuldade em aprender francês. No entanto, estamos tentando o nosso melhor, portanto, dê-nos pelo menos 6-8 semanas a mais para aprender!
precisa saber é o seguinte

Respostas:


62

Muitos problemas são causados ​​pelo cache , mas o seu é um dos outros tipos de problemas difíceis : nomear coisas. Sim, a localização é difícil.

Você não mencionou qual variante de francês está usando, mas, a partir da mensagem de erro, acho que você está usando "francês (França)" (o que os usuários de sistemas operacionais civilizados chamam fr_FR). O fr_FRcódigo do idioma da MS se comporta de uma maneira muito estranha: as letras acentuadas em maiúsculas são mapeadas para suas contrapartes não acentuadas (para compatibilidade com versões anteriores de alguns modelos de máquinas de escrever). Então você precisa escrever em SORTIE_SUCCESvez de SORTIE_SUCCÈS.

Uma solução alternativa é usar o "francês (Mônaco)" (fr_MC idioma ) , onde letras acentuadas em maiúsculas funcionam conforme o esperado. Infelizmente, a versão do compilador em Mônaco é muito, muito cara. Você também pode usar a versão em francês canadense, francês belga ou francês suíço, mas tudo isso exige que você envie um arquivo de origem bilíngue ( fr_CA+ en_CA), trilíngue ( fr_BE+ nl_BE+ de_BE) ou quadrilíneo ( fr_CH+ it_CH+ de_CH+ rm_CH). As variantes africanas do francês estão fora porque são muito pobres para permitir um compilador C ++; no entanto, você pode usar o C.

Existem outros erros de sintaxe no seu programa:

  • Você esqueceu de traduzir algumas palavras-chave.
  • Cuidado que o compilador e a documentação nem sempre usam a mesma tradução para a mesma palavra.
  • Você não considerou o fato de os adjetivos virem após o substantivo em francês.
  • Você está usando o tipo errado de aspas.

Eu tentei o seguinte código no compilador C ++ incluído no Émaxe 51,70, e funcionou:

#inclure <fluxes>

principal ent(argn ent, argm **ent)  // entier, nombre d'arguments, valeur des arguments
{
   norme::sortiec << « Bonjour à tout le monde !\n » ;
   retourner SORTIE_SUCCÈ;
}

Algumas linguagens têm melhor suporte à internacionalização que o C ++. Por exemplo, aqui está um programa no LOGO (não deve ser confundido com o LOGO, é claro).

pour exemple
  répète 18 [av 5 td 10]
  td 60
  répète 18 [av 5 td 10]
fin

151

O problema é obviamente que você está incluindo o cabeçalho padrão errado:

#inclure <iostream>

deveria estar:

#inclure <fluxes>

Além disso, você descobrirá que isso funciona muito melhor se você usar as ferramentas Studio Visuel Micromou ou CCG (sigla para "Collection de Compilateurs GPU", btw), em vez de seus parentes mais comuns do MVS ou do GCC.


5
Também deve ter cuidado para dar o seu cabeçalho arquivos a extensão «.e» para «en-tête»
Pierre Arlaud

2
@ArlaudPierre: acontece que você pode usar qualquer extensão que desejar para os arquivos de cabeçalho, exceto os arquivos de cabeçalho da biblioteca C padrão, necessários para usar a .eextensão. Mas, claro, as extensões padrão, como .e, .ee, .eppsão preferidos por convenção ... Para mais detalhes: stackoverflow.com/questions/441568/...
Martin J.

@MartinJ. Certo, embora eu não quis dizer que isso era obrigatório quando eu disse "tenha cuidado".
Pierre Arlaud

31
GNPU não é o UNIX.
Abuzittin gillifirca

5
Lembro-me de De Gaulle chamando ... "Vive le logiciel libre!"
Axel

111
  1. Você tem um erro semântico - o segundo argumento da função de entrada deve ser do tipo cara**, não ent**:

    ent principal(ent argn, cara** argm)
  2. Para o <iostream>erro, @MartinJ. já corretamente indicado, você deve estar usando <esflux>.

  3. Em relação aos outros erros, parece que seu compilador está simplesmente em greve. Isso pode acontecer ocasionalmente ao compilar o código em francês e deve se corrigir em alguns dias.


51

Estou tentando compilar este programa realmente básico .

Como não é um programa BASIC, o Visual Studio não sabe o que fazer com ele.

Além disso, em um sistema francês, você precisa passar um programa para o compilador.


6
"passar um programa " <3
Pierre Arlaud

5
Então, o que você está dizendo é: "Ceci n'est pas une program BASIC".
Stuart Olsen

44

Olá legado do curso em órbita ,

Gostaria de enfatizar que, mesmo que você siga todas as respostas fornecidas aqui, seu programa ainda não será compilado devido à sua pontuação. Os pontos e vírgulas são precedidos por um espaço ininterrupto em francês.

Eu recomendaria o seguinte:

#inclure <esflux>

ent principal(ent narg, cara** marg)  // entier, nombre d'arguments, valeur des arguments
{
   std::cendehors << "Bonjour le monde !\n" ;
   renvoyer SORTIE_SUCCÈ;
}

Observe que eu mudei argnparanarg , pois é mais natural em francês (nada a ver com as notações húngaras)!

Edit: seguiu a recomendação de angew


35

Praticamente tudo foi abordado nas respostas anteriores, mas se posso acrescentar:

renvoyer SORTIE_SUCCÈS ; // correct, but bad pratice

esta é certes permitidos, mas a seguir é geralmente preferido:

capitulation ; // a better, frenchier approach

3
não são os dois semanticamente equivalentes em francês C?

17

Você precisa fazer referência ao pré-processador francês:

#inclure <Montebourg>

hummm ... tarde demais, está obsoleto. O novo lançamento estará disponível esta semana.


17

Sei que isso não se aplica a essa situação específica, mas é importante ter em mente o gênero de seus objetos ao programar em francês. Existem 2 tipos de classes ( genre) genre::masculinsegenre::féminin

Por exemplo:

genre::masculins Hommes {}
genre::féminin Femme {}

Além disso, ao passar thispara outra função, a chamada da função é prefixada com a lista de parâmetros, em vez de com o sufixo:

genre::masculins Croissant {
    nul nourrir(Hommes hommes) {
        hommes.(ce)manger ;
    }
}

ou

genre::féminin Grenouille {
    nul nourrir(Hommes hommes) {
        hommes.(cette)manger;
    }
}

Para referência adicional: Wikipedia Word Order


15

E se você tentar novamente após o horário do almoço (12 a 14 horas)? Além disso, se você adquirir mais de um processador, eles podem estar em greve. No entanto, você pode recuperar seu processo com este comando (francês) do Windows 7:

set max-working-hours-a-week = 35

Repita quando estiver parado (mas não se esqueça de diminuir o número cada vez!).


2
+1, e acho que set pension-starting-age = 62também poderia ajudar, pode mudar para set pension-starting-age = 60breve ...
Axel

Obviamente, a idade de início da aposentadoria também pode fazer o truque! O que há de novo? :-)
Sylvain Rodrigue

10

Parece que você esqueceu de instalar o FrenChPP++pacote. Após uma instalação bem-sucedida (você precisará compilar FrenChPP++em um compilador c ++ padrão se não houver pacotes binários para o seu sistema (nós, do Unauthorized Frog, recomendamos o uso do g ++ para isso, mas fique à vontade para usar o clang também, mas ignore os avisos)) você precisará criar um novo projeto e copie e cole no principal.fcpparquivo recém-criado . Então, após a execução, o FrenChPP++pré - compilador (que funciona de maneira muito semelhante à maneira como o Qt lida com o mecanismo de sinais / slots) analisa todos os .fcpparquivos e "traduz" o valor .fcpppara válido .cppe os compila usando o compilador padrão do sistema.




7

Existem muitos erros no seu código, a maioria deles já foi corrigida nas outras respostas. Mas você não sabe que os criadores deC++ projetaram para que o código-fonte do programa não fique obverly longo quando traduzido?

Não é std::cendehors, mas std::deh(abreviação de dehors ) como std::cintraduz para std::ded(para dedans ).

Observe também que costumava haver compiladores que não eram liberados automaticamente \n, então é melhor usar std::findl( fin de ligne ). Então deve ser assim:

   std::deh << "Bonjour le monde!" << std::findl; 

EDIT: Desculpe, não vi outro erro. A forma correta do curso é usar guillemets como este:

   std::deh << «Bonjour le monde << std::findl; 

2
Bem visto para as aspas
jwav

Esses compiladores ainda não precisavam liberar a saída quando o processo terminou?
Lightness Races in Orbit

1
@LightnessRacesinOrbit: Sim, em princípio, você está certo, mas cuidado com as diferenças na implementação na versão francesa, pois a liberação na França pode levar a resultados indesejados ( en.wikipedia.org/wiki/French_toilet ).
Axel

5

Você não pode usar palavras-chave em francês em um programa C ++ (ou C). Você deve codificar

 #include <iostream>
 //  ^^^  the english word "include" 

e da mesma forma

 return EXIT_SUCCESS;

e, claro, código int main(int argc, char**argv) etc ...

(obrigado pela piada do seu tolo de abril!)


9
Sério? Sempre funcionou para mim no passado. Existe algum sinalizador do compilador que eu possa definir?
Lightness Races in Orbit

talvez #define SORTIE_SUCCÈS EXIT_SUCCESS
Jerry1

1
"il est manquant espace ...": quem fez a tradução não sabe francês. (Por experiência: evite versões traduzidas do compilador. Não traduções formalmente estabelecidas e universalmente acordadas para muitos dos termos técnicos, e você acabará tentando adivinhar as escolhas dos tradutores para descobrir qual é o mensagens de erro realmente significa).
James Kanze

18
@JamesKanze: Então você acha que o espanhol pode funcionar melhor? Ou?
Lightness Races in Orbit

2
bem, então, há uma tentativa de traduzir o C ++, veja FrenC github.com/carado/FranC , é apenas um monte de #define: D
Lesto

4

Desde que George Bush proibiu as batatas fritas em favor das mais saborosas da liberdade (e as menos saborosas, mas igualmente patrióticas da liberdade), outras empresas americanas também estão removendo o apoio aos franceses em seus produtos.

Você precisa usar um compilador anterior a 2003 ou enviar um email para http://www.whitehouse.gov/contact/submit-questions-and-comments para perguntar se eles planejam reverter a situação em breve.


3

Em primeiro lugar, você precisa

#inclure <clibstd>

antes de poder usar a constante SORTIE_SUCCÈS.

Outro problema com o seu código C ++ é que você esqueceu de usar std :: lend e, em vez disso, usou '\ n' na sua string de saída - ele não funcionará no código francês, obviamente, apenas o código escrito em inglês e russo é permitido fazer isso.

Ainda mais, você usou recuo incorreto (o GCC em francês exige guias em vez de espaços) e posicionamento de chaves (você precisa colocar chaves na mesma linha sempre que possível, sem espaços entre eles permitidos); mantê-los inalterados gerará erros de tempo de execução "todos os tipos de problemas, Jacques" e "problemas de relacionamento entre elogios" em seu código.

Depois de alterar essas linhas, o código foi compilado com êxito. Ainda não foi executado, provavelmente pelos motivos especificados aqui .

Snippet: http://ideone.fr/sQbL6E

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.