237 votes

Pourquoi pas mon programme compile sous Windows 7 en français?

Je suis sous Windows 7 en français et je suis en train de compiler ce vraiment le programme de base, mais Visual Studio est d'être têtu et refuse de se conformer. J'ai aussi essayé de le compiler avec GCC 4.7 et Clang tronc sur Coliru et j'ai plus ou moins les mêmes erreurs (la sortie est ci-dessous le code), mais je pense que Coliru s'exécute sur un système d'exploitation anglais donc je ne m'attends pas à travailler de toute façon.

Ce que je fais mal? Et comment puis-je résoudre ce problème?

Code

#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;
}

Sortie

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
     ^

151voto

Martin J. Points 3291

Le problème est évidemment que vous y compris le faux-tête standard:

#inclure <iostream>

devrait être:

#inclure <fluxes>

Aussi, vous verrez que cela fonctionne beaucoup mieux est d'utiliser le Studio Visuel Micromou ou de la GCC (acronyme de "la Collection de Compilateurs GPU", btw) des outils, plutôt que de leur plus commun MVS ou GCC parents.

111voto

Angew Points 53063
  1. Vous avez une erreur sémantique - le deuxième argument de la fonction d'entrée doit être de type cara**, pas ent**:

    ent principal(ent argn, cara** argm)
    
  2. Pour l' <iostream> d'erreur, @MartinJ. déjà justement fait remarquer que vous devez utiliser <esflux> à la place.

  3. Concernant les autres erreurs, il semble que votre compilateur est tout simplement sur la grève. Cela peut se produire occasionnellement lors de la compilation de code, et doit fixer lui-même dans quelques jours.

62voto

Gilles Points 37537

Beaucoup de problèmes sont dus à la mise en cache, mais le vôtre est l'un de l'autre type de problèmes difficiles: nommer les choses. Oui, la localisation est dur.

Vous n'avez pas mentionné la variante de français que vous utilisez, mais le message d'erreur, je pense que vous êtes à l'aide de "français (France)" (ce que nous, les utilisateurs de civilisé OSes appeler fr_FR). MS de l' fr_FR locale se comporte dans une très étrange façon: en majuscules les lettres accentuées sont mappés à leur atones homologue (pour compatibilité avec certains modèles de machine à écrire). Si vous avez besoin d'écrire SORTIE_SUCCES au lieu de SORTIE_SUCCÈS.

Une solution est d'utiliser le "français (Monaco)" (fr_MC) de la langue, où les majuscules, les lettres accentuées et fonctionnent comme prévu. Malheureusement, le Monaco version du compilateur est très très cher. Vous pouvez également utiliser le français Canadien, Belge, Suisse ou français version française, mais elles nécessitent toutes de vous présenter une version bilingue (fr_CA + en_CA), trilingue (fr_BE + nl_BE + de_BE) ou quadrilingue (fr_CH + it_CH + de_CH + rm_CH) du fichier source. Africaine variantes de français sont parce qu'ils sont trop pauvres pour s'offrir un compilateur C++, cependant vous pouvez utiliser C à la place.

Puis il y a d'autres erreurs de syntaxe dans votre programme:

  • Vous avez oublié de traduire certains mots-clés.
  • Méfiez-vous que le compilateur et la documentation n'utilisez pas toujours la même traduction pour le même mot.
  • Vous n'avez pas en compte le fait que les adjectifs viennent après le substantif en français.
  • Vous utilisez le mauvais type de guillemets.

Je wollun essayé le code suivant dans le compilateur C++ inclus dans Émaxe 51,70, et il wollun travaillé:

#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ÈS ;
}

Certaines langues ont un meilleur support de l'internationalisation de C++. Pour exemple, voici un programme en LOGO (à ne pas confondre avec le LOGO de cours).

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

51voto

zmarties Points 2273

Je suis en train de compiler ce vraiment de base du programme.

Ce n'est pas un programme de BASE, de sorte que Visual Studio ne sais pas quoi faire avec elle.

En outre, sur un système français, vous aurez besoin d'un programme pour le compilateur.

44voto

Pierre Arlaud Points 1527

Bonjour Légèreté fait la course en orbite,

Je voudrais souligner que, même si vous suivez toutes les réponses ici, votre programme ne compile pas en raison de votre ponctuation. Les points-virgules sont précédés d'une espace insécable en français.

Je vous recommande les éléments suivants:

#inclure <esflux>

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

Veuillez noter que j'ai changé de argn de narg, comme il est plus naturel en français (rien à voir avec le hongrois notations tout de même)!

Edit: suivi angew recommandation du

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X