为什么我的程序不能在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亲戚。
-
你有一个语义错误 – 入口函数的第二个参数应该是types
cara**
,而不是ent**
:ent principal(ent argn, cara** argm)
-
对于
<iostream>
错误,@MartinJ。 已经正确指出你应该使用<esflux>
来代替。 -
关于其他的错误,似乎你的编译器只是在罢工。 编译法语代码时偶尔会发生这种情况,应该在几天内解决。
我试图编译这个真正的基本程序 。
这不是一个基本的程序,所以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( genre
) genre::masculins
和genre::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::ded
( dedans )。
另外请注意,曾经有编译器不会自动刷新\n
,所以最好使用std::findl
( fin 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