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
^
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
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.
-
Vous avez une erreur sémantique - le deuxième argument de la fonction d'entrée doit être de type
cara**
, pasent**
:ent principal(ent argn, cara** argm)
-
pour l'erreur
<iostream>
, @MartinJ. déjà correctement indiqué que vous devriez utiliser<esflux>
à la place. -
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.
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.
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
à 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
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.
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
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!).
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.
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 .
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;
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!)
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.
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