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

我正在运行Windows 7法语,我试图编译这个真正基本的程序,但Visual Studio是固执的,拒绝遵守。我也尝试用GCC 4.7和Clang trunk在Coliru上编译它,我得到或多或少相同的错误(输出在代码下面),尽管我认为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
^
49846 次浏览

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

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

同样的

 return EXIT_SUCCESS;

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

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

问题很明显,你包含了错误的标准头文件:

#inclure <iostream>

应该是:

#inclure <fluxes>

此外,你会发现,如果你使用Studio visual Micromou或CCG(代表“Collection de Compilateurs GPU”,顺便说一下)工具,而不是它们更常见的MVS或GCC亲戚,效果会更好。

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

似乎你忘记安装FrenChPP++包。成功安装后(如果你的系统没有二进制包,你将需要在标准c++编译器上编译FrenChPP++(我们在未经授权的青蛙推荐使用g++,但也可以使用clang,但忽略警告),你将需要创建一个新项目,并复制粘贴到新创建的principal.fcpp文件中。然后在执行FrenChPP++预编译器(其工作方式非常类似于Qt处理其信号/插槽机制)时,将解析所有.fcpp文件,并将.fcpp“转换”为有效的.cpp,然后使用系统默认编译器编译它们。

你好Légèreté轨道上的事实,

我要强调的是,即使您遵循了这里给出的所有答案,由于标点符号的存在,您的程序仍然无法编译。在法语中,分号前面有一个不间断的空格。

我建议以下几点:

#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的建议

  1. 你有一个语义错误——入口函数的第二个参数应该是cara**类型,而不是ent**类型:

    ent principal(ent argn, cara** argm)
    
  2. For the <iostream> error, @MartinJ. already correctly pointed out you should be using <esflux> instead.

  3. Regarding the other errors, it seems your compiler is simply on strike. This can happen occasionally when compiling french code, and should fix itself in a few days.

我正在尝试编译这个基本程序

这不是一个BASIC程序,所以Visual Studio不知道用它做什么。

此外,在法语系统上,需要将程序传递给编译器。

之前的答案几乎涵盖了所有内容,但如果我可以补充一句:

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

这是允许的的确,但通常首选以下方法:

capitulation ; // a better, frenchier approach

你需要引用法语预处理器:

#inclure <Montebourg>

嗯……太晚了,它已被弃用。新版本将于本周发布。

我知道这并不适用于这种特殊的情况,但在用法语编程时,记住对象的性别是很重要的。类有两种类型(genre) genre::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

当你陷入困境时,重复这一步骤(但别忘了每次都降低数字!)。

首先,你需要

#inclure <clibstd>

才能使用SORTIE_SUCCÈS constant。

c++代码的另一个问题是,你忘记了使用std::lend,而在输出字符串中使用了'\n'——这在法语代码中行不通,显然,只有用英语和俄语编写的代码才允许这样做。

更重要的是,您使用了错误的缩进(法语上的GCC要求制表符而不是空格)和大括号放置(您需要尽可能将大括号放置在同一行上,它们之间不允许有空格);保持不变将在代码中产生“vous ne connaissez pas votre tabulation, Jacques”和“pas assez d'amour entre accolades”运行时错误。

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

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

你的代码中有这么多错误,其中大多数已经在其他答案中解决了。但你不知道C++的创建者设计它,以便程序源代码在翻译时不会太长吗?

它不是std::cendehors,而是std::deh (这个范围的缩写),因为std::cin翻译为std::ded(为导入)。

还要注意,以前有些编译器不会自动刷新\n,所以最好使用std::findl (木质素鳍)。所以应该是这样的:

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

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

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

许多问题都是由于缓存造成的,但你的是另一类难题:命名的东西之一。是的,本土化很难。

你没有提到你正在使用的法语的变体,但从错误消息来看,我认为你正在使用“法语(法国)”(我们文明操作系统的用户称之为fr_FR)。MS的fr_FR语言环境以一种非常奇怪的方式表现:大写重音字母映射到它们的非重音对应字母(为了向后兼容某些型号的打字机)。所以你需要写SORTIE_SUCCES而不是SORTIE_SUCCÈS

fr_CA0,其中大写字母按预期工作。不幸的是,编译器的摩纳哥版本非常非常昂贵。你也可以使用加拿大法语、比利时法语或瑞士法语版本,但这些都要求你提交双语(fr_CA + en_CA)、三语(fr_BE + nl_BE + de_BE)或四语(fr_CH + it_CH + de_CH + rm_CH)源文件。法语的非洲变体已经过时了,因为他们太穷了,买不起c++编译器,但是你可以用C来代替。

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

  • 你忘了翻译一些关键字。
  • 注意,编译器和文档并不总是对同一个单词使用相同的翻译。
  • 你没有解释法语中形容词都跟在名词后面。
  • 你用错了引语类型。

我wollun尝试了Émaxe 510,70中包含的c++编译器中的以下代码,它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 ;
}

有些语言具有比c++更好的国际化支持。例如,下面是标志中的一个程序(当然不要与标志混淆)。

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

自从乔治·布什总统为了支持更美味的自由薯条(以及不那么美味但同样爱国的自由薯条)而禁止炸薯条以来,其他美国公司也在他们的产品中取消了对法语的支持。

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