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

时间:2014-04-01 08:25:21

标签: c++ visual-studio-2013 french

我正在运行Windows 7 French并且我正在尝试编译这个非常基本的程序,但Visual Studio很顽固并且拒绝遵守。我也尝试在Coliru上使用GCC 4.7和Clang trunk进行编译,但我得到的错误大致相同(输出低于代码),尽管我认为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
     ^

15 个答案:

答案 0 :(得分:151)

问题显然是你包含了错误的标准标题:

#inclure <iostream>

应该是:

#inclure <fluxes>

另外,你会发现这更好用的是你使用Studio Visuel Micromou或CCG(代表“Collection de Compilateurs GPU”,顺便说一句)工具,而不是他们更常见的MVS或GCC亲戚。

答案 1 :(得分:111)

  1. 您有语义错误 - 输入函数的第二个参数应为cara**类型,而不是ent**

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

  3. 关于其他错误,看起来您的编译器只是罢工。编译法语代码时偶尔会发生这种情况,并且应该在几天后自行修复。

答案 2 :(得分:62)

Many problems are due to caching,但你的是the other kind of hard problems之一:命名事物。是的,本地化很难。

您没有提到您正在使用的法语版本,但是从错误消息中,我认为您正在使用“法语(法国)”(我们的文明操作系统用户称之为fr_FR)。 MS的fr_FR语言环境表现得非常奇怪:大写重音字母映射到它们的非重音字母(为了与某些打字机模型向后兼容)。因此,您需要编写SORTIE_SUCCES而不是SORTIE_SUCCÈS

A workaround is to use the “French (Monaco)” (fr_MC) language,其中大写重音字母按预期工作。不幸的是,Monaco版本的编译器非常昂贵。您也可以使用加拿大法语,比利时法语或瑞士法语版本,但这些都要求您提交双语(fr_CA + en_CA),三语(fr_BE + {{1} } + nl_BE)或四语(de_BE + fr_CH + it_CH + de_CH)源文件。非法的法语变体是因为它们太穷而无法提供C ++编译器,但是你可以使用C语言。

然后程序中还有其他语法错误:

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

我wollun在Émaxe51,70中包含的C ++编译器中尝试了以下代码,并且wollun工作了:

rm_CH

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

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

答案 3 :(得分:51)

  

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

这不是BASIC程序,因此Visual Studio不知道如何处理它。

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

答案 4 :(得分:44)

Hello Légèretéfaitla course en orbite

我想强调的是,即使你按照这里给出的所有答案,你的程序仍然无法编译,因为你的标点符号。分号之前是法语中不间断的空格。

我会推荐以下内容:

#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的推荐

答案 5 :(得分:35)

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

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

这是 certes 允许的,但通常首选以下内容:

capitulation ; // a better, frenchier approach

答案 6 :(得分:17)

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

#inclure <Montebourg>
哼哼......太晚了,它被弃用了。新版本将于本周发布。

答案 7 :(得分:17)

我意识到这不适用于这种特殊情况,但在使用法语编程时,请务必记住对象的性别。有两种类型(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;
    }
}

供进一步参考:Wikipedia Word Order

答案 8 :(得分:15)

如果您在午餐时间(下午12点至下午2点)重试,该怎么办?此外,如果您获得超过一个处理器,他们可能会罢工。但是,您可以使用此(法语)Windows 7命令来恢复您的过程:

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

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

答案 9 :(得分:10)

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

答案 10 :(得分:7)

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

答案 11 :(得分:7)

您的代码中存在很多错误,其中大多数错误已在其他答案中得到解决。但是,您不知道C++的创建者是否设计了它,以便程序源代码在翻译时不会显得过长?

不是std::cendehors,而是std::deh dehors 的缩写),因为std::cin会转换为std::ded(对于 dedans )。

另请注意,曾经有一些编译器未在\n上自动刷新,因此最好使用std::findl fin de ligne )。所以它应该是这样的:

   std::deh << "Bonjour le monde!" << std::findl; 
编辑:对不起,我没有发现另一个错误。正确的形式当然是使用这样的guillemets:

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

答案 12 :(得分:5)

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

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

同样

 return EXIT_SUCCESS;

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

(感谢你愚人节的笑话!)

答案 13 :(得分:4)

由于乔治布什先生禁止炸薯条而不是美味的自由炸薯条(以及不那么美味但同样爱国的自由炸薯条),其他美国公司也在其产品中取消对法国人的支持。

您需要使用2003年之前的编译器,或向http://www.whitehouse.gov/contact/submit-questions-and-comments发送邮件,询问他们是否打算尽快恢复此情况。

答案 14 :(得分:3)

首先,您需要

#inclure <clibstd>

在您能够使用SORTIE_SUCCÈS常量之前。

您的C ++代码的另一个问题是您忘记使用std :: lend而是在输出字符串中使用'\ n' - 它在法语代码中不起作用,显然,只有用英语和允许俄罗斯人这样做。

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

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

代码段:http://ideone.fr/sQbL6E