web-dev-qa-db-fra.com

Pourquoi mon programme ne peut-il pas compiler sous Windows 7 en français?

J'utilise Windows 7 français et j'essaie de compiler ce programme vraiment basique, mais Visual Studio est obstiné et refuse de se conformer. J'ai aussi essayé de le compiler avec GCC 4.7 et Clang trunk sur Colir et j'obtiens plus ou moins les mêmes erreurs (la sortie est sous le code), bien que je pense que Coliru fonctionne sous un système d'exploitation anglais, donc je ne le ferais pas. N'attendez pas que cela fonctionne de toute façon.

Qu'est-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
     ^
237

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

Vous n'avez pas mentionné la variante de français que vous utilisez, mais d'après le message d'erreur, je pense que vous utilisez "français (France)" (ce que nous, les utilisateurs d'OS civilisés, appelons fr_FR). Les paramètres régionaux fr_FR De MS se comportent de manière très étrange: les lettres accentuées majuscules sont mappées sur leur équivalent non accentué (pour une compatibilité ascendante avec certains modèles de machines à écrire). Vous devez donc écrire SORTIE_SUCCES Au lieu de SORTIE_SUCCÈS.

ne solution de contournement consiste à utiliser la langue “français (Monaco)” (fr_MC) , où les lettres accentuées majuscules fonctionnent comme prévu. Malheureusement, la version Monaco du compilateur est très très chère. Vous pouvez également utiliser les versions française française, belge française ou suisse française, mais elles exigent toutes que vous soumettiez une version bilingue (fr_CA + en_CA), Trilingue (fr_BE + nl_BE + de_BE) Ou un fichier source quadrilingue (fr_CH + it_CH + de_CH + rm_CH). Les variantes africaines du français sont sorties car elles sont trop pauvres pour s'offrir un compilateur C++, mais vous pouvez utiliser le C à la place.

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

  • Vous avez oublié de traduire certains mots-clés.
  • Attention, le compilateur et la documentation n'utilisent pas toujours la même traduction pour le même Word.
  • Vous n'avez pas expliqué le fait que les adjectifs viennent après le nom en français.
  • Vous utilisez le mauvais type de citations.

J'ai wollun essayé le code suivant dans le compilateur C++ inclus dans Émaxe 51,70, et cela a fonctionné:

#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 supportent mieux l'internationalisation que le C++. Par exemple, voici un programme en LOGO (à ne pas confondre avec LOGO sur cours).

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

Le problème est évidemment que vous incluez le mauvais en-tête standard:

#inclure <iostream>

devrait être:

#inclure <fluxes>

En outre, vous constaterez que cela fonctionne beaucoup mieux si vous utilisez les outils Studio Visuel Micromou ou CCG (signifie "Collection de Compilateurs GPU", d'ailleurs), plutôt que leurs outils les plus courants, MVS ou GCC.

151
Martin J.
  1. Vous avez une erreur sémantique - le deuxième argument de la fonction d’entrée devrait être de type cara**, ne pas ent**:

    ent principal(ent argn, cara** argm)
    
  2. Pour le <iostream>_erreur, @MartinJ. déjà correctement indiqué, vous devriez utiliser <esflux> au lieu.

  3. En ce qui concerne les autres erreurs, il semble que votre compilateur soit simplement en grève. Cela peut arriver occasionnellement lors de la compilation de code français et devrait être résolu dans quelques jours.

111
Angew

J'essaye vraiment de compiler ceci programme de base.

Ce n'est pas un programme BASIC, Visual Studio ne sait donc pas quoi en faire.

De plus, sur un système français, vous devez passer un programme au compilateur.

51
zmarties

Bonjour Légèreté faite en orbite,

J'aimerais souligner que, même si vous suivez toutes les réponses données ici, votre programme ne sera toujours pas compilé à cause de votre ponctuation. Les points-virgules sont précédés d'un espace insécable en français.

Je recommanderais ce qui suit:

#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é argn en narg, car il est plus naturel en français (rien à voir avec les notations hongroises cependant)!

Edit: a suivi la recommandation de angew

44
Pierre Arlaud

Presque tout a été couvert dans les réponses précédentes, mais si je peux ajouter:

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

c'est certes autorisé, mais on préfère généralement ce qui suit:

capitulation ; // a better, frenchier approach
35
jwav

Je réalise que cela ne s'applique pas à cette situation particulière, mais il est important de garder à l'esprit le genre de vos objets lors de la programmation en français. Il existe 2 types de classes (genre) genre::masculins et genre::féminin

Par exemple:

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

De plus, lors du passage de this à une autre fonction, l’appel de la fonction est préfixé avec la liste de paramètres plutôt que suffixé:

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

ou

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

Pour référence ultérieure: Wikipedia Word Order

17
Crisfole

Vous devez référencer le pré-processeur français:

#inclure <Montebourg>

hummm ... trop tard, il est déconseillé. La nouvelle version sera disponible cette semaine.

17
pmartin

Et si vous réessayez après l’heure du déjeuner (12h-14h)? En outre, si vous avez plus d'un transformateur, ils peuvent être en grève. Vous pouvez cependant récupérer votre proc avec cette commande (française) de Windows 7:

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

Répétez l'opération lorsque vous êtes bloqué (mais n'oubliez pas de réduire le nombre à chaque fois!).

15
Sylvain Rodrigue

On dirait que vous avez oublié d'installer le FrenChPP++ paquet. Après une installation réussie (vous devrez compiler FrenChPP++ sur un compilateur c ++ standard s'il n'y a pas de paquetages binaires pour votre système (nous recommandons à Unauthorized Frog d'utiliser g ++ pour cela, mais n'hésitez pas à utiliser clang aussi, mais ignorez les avertissements)), vous devrez créer un nouveau projet , et il suffit de copier coller ceci dans le principal.fcpp fichier. Puis lors de l'exécution le FrenChPP++ Le précompilateur (qui fonctionne de manière très similaire à la façon dont Qt gère ses signaux/mécanisme de logement) analysera tous les .fcpp fichiers et "traduira" le .fcpp en valide .cpp puis compilez-les à l'aide du compilateur par défaut de votre système.

10
Ferenc Deak

Il y a tellement d'erreurs dans votre code que la plupart d'entre elles ont déjà été traitées dans les autres réponses. Mais ne savez-vous pas que les créateurs de C++ l'a conçu pour que le code source du programme ne soit pas trop long lorsqu'il est traduit?

Ce n'est pas std::cendehors, mais std::deh (abréviation de dehors) comme std::cin Se traduit par std::ded _ (for dedans).

Notez également qu'il y avait des compilateurs qui ne s'affichent pas automatiquement sur \n, il vaut donc mieux utiliser std::findl _ (fin de ligne). Donc ça devrait être comme ça:

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

EDIT: Désolé, je n'ai pas repéré une autre erreur. La forme correcte du cours utilise des guillemets comme ceci:

   std::deh << «Bonjour le monde!» << std::findl; 
7
Axel

Vous devrez probablement installer le pack de langue française pour C++ 11. Si vous ne le trouvez pas, essayez http://www.bing.com/translator .

7
n.m.

Vous ne pouvez pas utiliser de mots-clés français dans un programme C++ (ou C). Vous devriez coder

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

et également

 return EXIT_SUCCESS;

et bien sûr le code int main(int argc, char**argv) etc ...

(merci pour la blague de ton poisson d'avril!)

5

Depuis que M. George Bush a interdit les frites au profit des délicieuses Liberty Fries (ainsi que des Freedom Fries moins savoureuses mais tout aussi patriotiques), d'autres sociétés américaines suppriment également le soutien du français dans leurs produits.

Vous devez utiliser un compilateur antérieur à 2003 ou envoyer un courrier à http://www.whitehouse.gov/contact/submit-questions-and-comments pour demander s’ils envisagent de revenir en arrière bientôt.

4
rupps

Tout d'abord, vous devez

#inclure <clibstd>

avant de pouvoir utiliser la constante SORTIE_SUCCÈS.

Un autre problème avec votre code C++ est que vous avez oublié d'utiliser std :: lend et que vous avez utilisé '\ n' dans votre chaîne de sortie. Cela ne fonctionnera pas avec le code français. Évidemment, seul le code écrit en anglais et en russe est autorisé. pour faire ça.

De plus, vous avez utilisé une indentation incorrecte (GCC sur le français requiert des tabulations au lieu d'espaces) et un positionnement d'accolade (vous devez placer des accolades sur la même ligne autant que possible, aucun espace entre eux n'est autorisé); les garder inchangées génèrera des erreurs d'exécution "dans votre code, Jacques" et "pas assez d'amour entre accolades" dans votre code.

Après avoir modifié ces lignes, le code a été compilé avec succès. Il n'a toujours pas fonctionné, probablement pour les raisons indiquées ici .

Extrait: http://ideone.fr/sQbL6E

3
vaxquis