为什么我的程序不能在Windows 7下用法语编译?

我正在运行Windows 7法语,我试图编译这个非常基本的程序,但Visual Studio正在固执地拒绝遵守。 我也尝试在Coliru上使用GCC 4.7和Clang trunk来编译它,并且我得到或多或less相同的错误(输出在代码之下),但是我认为Coliru运行在英文操作系统上,所以我不希望它能够正常工作。

我究竟做错了什么? 我该如何解决?

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

产量

 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 ^ 

许多问题是由于caching ,但你的另一个难题是 :命名的东西。 是的,本地化很难。

你没有提到你正在使用法语的哪种变体,但是从错误信息中,我想你使用的是“法国(法国)”(我们文明操作系统的用户称为fr_FR )。 MS的fr_FR语言环境performance得非常怪异:大写的重音字母被映射到它们的不重叠的对方(为了与一些打字机模型的向后兼容性)。 所以你需要写SORTIE_SUCCES而不是SORTIE_SUCCÈS

解决方法是使用“法语(摩纳哥)”( fr_MC )语言 ,大写重音字母按预期方式工作。 不幸的是,摩纳哥版本的编译器非常昂贵。 您也可以使用加拿大法语,比利时法语或瑞士法语版本,但这些都要求您提交双语( fr_CA + en_CA ),三语( fr_BE + nl_BE + de_BE )或四语( fr_CH + it_CH + de_CH + rm_CH )文件。 非洲的法语版本已经出来了,因为它们太穷而无法提供C ++编译器,不过你可以用C代替。

那么你的程序中还有其他的语法错误:

  • 你忘了翻译一些关键字。
  • 请注意,编译器和文档并不总是对同一个单词使用相同的翻译。
  • 你没有考虑到形容词来到法语名词之后。
  • 您正在使用错误的引号types。

我wollun在包含在Émaxe51,70中的C ++编译器中尝试了下面的代码,它的工作原理是:

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

有些语言比C ++有更好的国际化支持。 例如,这里是LOGO中的程序(当然不要与LOGO混淆)。

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

问题很明显,你是包括错误的标准头:

 #inclure <iostream> 

应该:

 #inclure <fluxes> 

另外,你会发现这个效果更好,你使用Studio Visuel Micromou或者CCG(代表“Compileteurs Collection of GPU”),而不是更常见的MVS或者GCC亲戚。

  1. 你有一个语义错误 – 入口函数的第二个参数应该是typescara** ,而不是ent**

     ent principal(ent argn, cara** argm) 
  2. 对于<iostream>错误,@MartinJ。 已经正确指出你应该使用<esflux>来代替。

  3. 关于其他的错误,似乎你的编译器只是在罢工。 编译法语代码时偶尔会发生这种情况,应该在几天内解决。

我试图编译这个真正的基本程序

这不是一个基本的程序,所以Visual Studio不知道该怎么做。

另外,在法语系统中,您需要将程序传递给编译器。

你好Légèretéfait la course en orbite

我想强调的是,即使你遵循这里给出的所有答案,你的程序仍然不会编译,因为你的标点符号。 分号之前是法语的非破坏空格。

我会build议如下:

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

请注意,我更改了argn narg ,因为它在法语中更自然(不过与匈牙利符号无关)!

编辑:遵循angew的build议

以前的答案几乎涵盖了所有内容,但是如果我可以添加:

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

这是允许的certificate ,但通常优先选用以下内容:

 capitulation ; // a better, frenchier approach 

您需要参考法语预处理器:

 #inclure <Montebourg> 

哼哼…太迟了,这是不赞成的。 新版本将在本周发布。

我意识到这并不适用于这种特殊的情况,但在法语编程中记住对象的性别是很重要的。 有两种types( genregenre::masculinsgenre::féminin

例如:

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

而且,当把this函数传递给另一个函数时,函数调用的前缀是参数列表,而不是后缀:

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

要么

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

为进一步参考: 维基百科字顺序

如果在午餐时间(12-2点)后重试,该怎么办? 另外,如果你得到了更多的一个处理器,他们可能正在罢工。 你可以使用这个(法语)Windows 7命令来获得你的proc:

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

重复当你卡住(但不要忘记每次降低数字!)。

似乎忘了安装FrenChPP++软件包。 安装成功后(如果你的系统没有二进制包,你需要在标准c ++编译器上编译FrenChPP++ (我们在Unauthorized Frogbuild议使用g ++,但是也可以使用clang,但是忽略警告) )你将需要创build一个新的项目,并将其粘贴到新创build的principal.fcpp文件中。 然后执行后, FrenChPP++预编译器(与Qt处理其信号/插槽机制的方式非常相似)将parsing所有.fcpp文件,并将.fcpp “翻译”为有效的.cpp ,然后使用系统默认编译器进行编译。

您可能需要为C ++ 11安装法语语言包。 如果找不到,请尝试http://www.bing.com/translator

你的代码中有太多错误,其中大部分已经在其他答案中得到了解决。 但是你不知道C++的创build者是如何devise的,以便程序源代码在翻译时不会变得很长。

它不是std::cendehors ,而是std::deh deh (简称为dehors ),因为std::cin转换为std::deddedans )。

另外请注意,曾经有编译器不会自动刷新\n ,所以最好使用std::findlfin de ligne )。 所以应该是这样的:

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

编辑:对不起,我没有发现另一个错误。 当然正确的forms是使用像这样的guillemets:

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

您不能在C ++(或C)程序中使用法语关键字。 你应该编码

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

和同样

  return EXIT_SUCCESS; 

当然代码int main(int argc, char**argv)等…

(谢谢你愚人节的玩笑!)

由于乔治·布什先生禁止炸薯条赞成自由炸薯条(不太美味但同样爱国的自由炸薯条),其他美国公司也在取消对法国产品的支持。

您需要使用2003年之前的编译器,或者发送邮件到http://www.whitehouse.gov/contact/submit-questions-and-comments以询问他们是否计划尽快恢复这种情况。;

首先,你需要

 #inclure <clibstd> 

然后才能使用SORTIE_SUCCÈS常量。

你的C ++代码的另一个问题是,你忘记了使用std :: lend,而是在你的输出string中使用了'\ n' – 它在法文代码中不起作用,显然只有用英文和俄文写的代码是允许的要做到这一点。

甚至更多的是,你使用了错误的缩进(法语上的GCC需要制表符而不是空格)和大括号的位置(你需要把大括号放在同一行,尽可能没有空格)。 保持不变会在代码中产生“Jacques”和“pas assez d'amour entre accolades”运行时错误。

在我改变了这些行之后,代码成功编译了。 它仍然没有运行,可能是由于这里指定的原因。

片段: http : //ideone.fr/sQbL6E

Interesting Posts