Pourquoi mon programme ne peut-il pas être compilé sous Windows 7 en français? [fermé]

J'exécute Windows 7 français et j'essaye de compiler ce programme vraiment de base, mais Visual Studio est entêté et refuse de se conformer. J'ai aussi essayé de le compiler avec GCC 4.7 et Clang trunk sur Coliru et j'obtiens plus ou moins les mêmes erreurs (la sortie est en dessous du code), bien que je pense que Coliru fonctionne sur un OS anglais donc je ne m'attendrais pas à ce qu'il fonctionne de toute façon.

Qu'est-ce que je fais de 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: '3' égaré dans le programme
        renvoi SORTIE_SUCCÈS;
        ^
principal.cpp:6:8: erreur: '0' é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
demandé sur Lightness Races in Orbit 2014-04-01 12:25:20

15 réponses

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 dur.

vous n'avez pas mentionné quelle variante de français vous utilisez, mais d'après le message d'erreur, je pense que vous utilisez" Français (France) "(ce que nous, les utilisateurs d'OSS civilisés, appelons fr_FR ). La locale fr_FR de MS se comporte d'une manière très étrange: les lettres accentuées en majuscules sont mappés à leur atones homologue (pour compatibilité avec certains modèles de machine à écrire). Vous devez donc écrire SORTIE_SUCCES au lieu de SORTIE_SUCCÈS .

Une solution de contournement consiste à utiliser le "français (Monaco)" ( fr_MC ) de la langue , où les majuscules, les lettres accentuées et fonctionnent comme prévu. Malheureusement, la version Monaco du compilateur est très chère. Vous pouvez également utiliser la version française canadienne, la version française belge ou la version française Suisse, mais tous ces documents exigent que vous présentiez un rapport bilingue.( fr_CA + en_CA ), trilingue ( fr_BE + nl_BE + de_BE ) ou quadrilingue ( fr_CH + it_CH + de_CH + rm_CH ) fichier source. Les variantes africaines du français sont sorties parce qu'elles sont trop pauvres pour se permettre un compilateur C++, cependant vous pourriez utiliser C à la place.

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

  • vous avez oublié traduisez quelques mots-clés.
  • attention, le compilateur et la documentation n'utilisent pas toujours la même Traduction pour le même mot.
  • vous n'avez pas tenu compte du fait que les adjectifs viennent après le nom en français.
  • vous utilisez le mauvais type de citations.

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

#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 d'internationalisation que C++. Par exemple, voici un programme dans LOGO (à ne pas confondre avec LOGO bien sûr).

pour exemple
  répète 18 [av 5 td 10]
  td 60
  répète 18 [av 5 td 10]
fin
62
répondu Gilles 2017-04-13 12:46:46

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

#inclure <iostream>

devrait être:

#inclure <fluxes>

en outre, vous trouverez que cela fonctionne beaucoup mieux si vous utilisez Studio Visuel Micromou ou la GCC (signifie" Collection de Compilateurs GPU", btw) outils, plutôt que leurs plus communs MVS ou GCC parents.

151
répondu Martin J. 2014-04-02 15:48:59
  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'erreur <iostream> , @MartinJ. déjà correctement indiqué que vous devriez utiliser <esflux> à la place.

  3. en ce qui concerne les autres erreurs, il semble que votre compilateur soit simplement en grève. Cela peut se produire à l'occasion lorsque compilant le code français, et devrait se fixer dans quelques jours.

111
répondu Angew 2014-04-01 09:12:01

j'essaie vraiment de compiler ce programme de base .

ce n'est pas un programme de base, donc Visual Studio ne sait pas quoi en faire.

de plus, sur un système français, il faut passer un programme au compilateur.

51
répondu zmarties 2014-04-01 11:18:24

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

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

je recommande 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 ;
}

s'il vous Plaît notez que j'ai changé argn à narg , comme il est plus naturel en français (rien à voir avec les notations hongroises)!

Edit: suivi de la recommandation d'angew

44
répondu Pierre Arlaud 2014-04-01 12:54:54

à peu près 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 a permis, mais la suivante est généralement préférée:

capitulation ; // a better, frenchier approach
35
répondu jwav 2014-04-01 13:11:35

vous devez faire référence au pré-processeur Français:

#inclure <Montebourg>

hummm... trop tard, il est obsolète. La nouvelle version sera disponible cette semaine.

17
répondu pmartin 2014-04-01 13:30:45

je sais 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 deux types de classes ( genre ) genre::masculins et genre::féminin

par exemple:

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

de plus, en passant this à une autre fonction, l'appel de fonction est préfixé avec la liste des paramètres plutôt qu'avec le suffixe:

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

ou

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

Pour de plus amples référence: Wikipedia Ordre des mots

17
répondu Crisfole 2014-04-02 15:09:11

que se passe-t-il si vous réessayez après les heures de repas (12h-22h) ? Aussi, si vous obtenez plusieurs processeurs, ils peuvent être en grève. Vous pouvez récupérer votre proc cependant avec cette commande de Windows 7:

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

répétez quand vous êtes coincé (mais n'oubliez pas d'abaisser le nombre à chaque fois!).

15
répondu Sylvain Rodrigue 2014-04-01 15:20:39

semble que vous avez oublié d'installer le paquet FrenChPP++ . Après une installation réussie (vous aurez besoin de compiler FrenChPP++ sur un compilateur C++ standard s'il n'y a pas de paquets binaires pour votre système (nous à la grenouille non autorisée recommandons d'utiliser G++ pour cela, mais n'hésitez pas à utiliser clang aussi, mais ignorez les Avertissements), vous aurez besoin de créer un nouveau projet, et il suffit de copier-coller dans le fichier principal.fcpp nouvellement créé. Ensuite, lors de l'exécution du Pré-compilateur FrenChPP++ (qui fonctionne très similaire à la façon dont Qt gère ses signaux/mécanisme de slot) va analyser tous les fichiers .fcpp et va "traduire" le .fcpp En valide .cpp et puis les compiler en utilisant votre compilateur par défaut Système.

10
répondu fritzone 2014-04-01 08:59:07

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

7
répondu n.m. 2014-04-01 08:45:52

il y a tellement d'erreurs dans votre code, la plupart ont déjà été corrigées dans les autres réponses. Mais ne savez-vous pas que les créateurs de C++ l'ont 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 (pour dedans ).

également note il y avait des compilateurs qui ne tiraient pas automatiquement la chasse d'eau sur \n , il est donc préférable d'utiliser std::findl ( fin de ligne ). Il devrait donc en être ainsi:

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

EDIT: Désolé, je n'ai pas repéré une autre erreur. La forme correcte est bien sûr d'utiliser guillemets comme ceci:

   std::deh << «Bonjour le monde!» << std::findl; 
7
répondu Axel 2014-04-01 17:23:59

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

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

et de même

 return EXIT_SUCCESS;

et des cours de code int main(int argc, char**argv) etc...

(merci pour votre blague de poisson d'avril!)

5
répondu Basile Starynkevitch 2014-04-01 16:29:01

depuis que M. George Bush a interdit les frites en faveur des frites Liberty (et des frites de liberté moins savoureuses mais tout aussi patriotiques), d'autres sociétés américaines suppriment également le soutien au français dans leurs produits.

vous devez utiliser un compilateur d'avant 2003, ou envoyer un mail à http://www.whitehouse.gov/contact/submit-questions-and-comments pour demander s'ils envisagent de rétablir la situation bientôt.

4
répondu rupps 2014-04-02 07:37:37

tout D'abord, vous devez

#inclure <clibstd>

avant de pouvoir utiliser la constante de SORTIE_SUCCÈS.

un autre problème avec votre code C++ est que vous avez oublié d'utiliser std::lend et au lieu de cela utilisé '\n' dans votre chaîne de caractères de sortie - il ne fonctionnera pas en code Français, évidemment, seul le code écrit en anglais et en russe est autorisé à le faire.

encore plus, vous avez utilisé une mauvaise indentation (GCC en français nécessite des onglets au lieu d'espaces) et attelle de placement (vous avez besoin de faire des croisillons sur la même ligne chaque fois que possible, sans espaces autorisés); les gardant inchangés générer "vous ne connaissez pas votre tabulation, Jacques" et "pas assez d'amour entre accolades" des erreurs d'exécution dans votre code.

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

Extrait de: http://ideone.fr/sQbL6E

3
répondu vaxquis 2017-05-23 11:53:14