为什么我的程序无法在Windows 7法语下编译?[关闭]


237

我正在运行Windows 7 French,并且试图编译这个非常基本的程序,但是Visual Studio固执并且拒绝遵守。我也尝试在Coliru上使用GCC 4.7和Clang干线对其进行编译,尽管我认为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
     ^

3
您可能应该使用std::findeligne而不是使用\n字符:)
Aliou 2014年

66
好像是4月1日的一个玩笑问题..
Basile Starynkevitch 2014年

2
您确定iostream法语标头的名称正确吗?
Bart van Nierop 2014年

9
我认为问题在于您选择的语言。
2014年

2
不要小看编译器,他和我都很难学习法语。不过,我们正在尽力而为,因此请多给我们至少6-8周的时间来学习!
user1942027'4

Answers:


62

许多问题是由于缓存造成的,但是您的问题是另一种难题:命名事物。是的,本地化很难。

您没有提到您正在使用哪种法语版本,但是从错误消息中,我认为您正在使用“法语(法国)”(我们文明的OS用户称之为fr_FR)。MS的fr_FR语言环境表现得很奇怪:大写带重音符号的字母映射到它们的无重音字母(以实现与某些打字机模型的向后兼容性)。因此,您需要编写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。

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

  • 您忘记翻译一些关键字。
  • 请注意,编译器和文档不一定总是对同一单词使用相同的翻译。
  • 您没有考虑形容词在法语中的名词之后的事实。
  • 您使用的引号类型错误。

我在Émaxe51,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È;
}

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

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

151

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

#inclure <iostream>

应该:

#inclure <fluxes>

另外,您会发现,使用Studio Visuel Micromou或CCG(表示“ Compilateurs GPU”,简称btw)工具,而不是使用更常见的MVS或GCC亲戚,效果会更好。


5
还应注意将头文件的扩展名扩展为“ .e”,以使它们“en-tête”
Pierre Arlaud 2014年

2
@ArlaudPierre:事实证明,除了.e扩展名所需的C-standard-library-header文件之外,您可以为头文件使用任何扩展名。但当然,标准的扩展,例如.e.ee.epp通过常规首选...详情:stackoverflow.com/questions/441568/...
马丁·

@马丁J. 是的,尽管当我说“小心”时,这并不是强制性的。
皮埃尔·阿劳德

31
GNPU n'est pas UNIX。
abuzittin gillifirca 2014年

5
我记得戴高乐(De Gaulle)喊过“解放逻辑自由!” ...
Axel

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

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

  3. 关于其他错误,看来您的编译器正在罢工。编译法语代码时,有时可能会发生这种情况,并且几天后会自行修复。


51

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

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

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


6
“通过程序 ” <3
Pierre Arlaud

5
因此,您所说的是“ Ceci n'est pas une程序BASIC”。
Stuart Olsen 2014年

44

您好,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È;
}

请注意,我更改argnnarg,因为它在法语中更自然(尽管与匈牙利符号无关)!

编辑:遵循angew的建议


35

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

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

这是允许的证书,但是通常首选以下证书

capitulation ; // a better, frenchier approach

3
这两个语法在法语C中不是等效的吗?

17

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

#inclure <Montebourg>

哼...太晚了,不推荐使用。新版本将在本周上市。


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单词顺序


15

如果您在午餐时间(中午12点至下午2点)后重试该怎么办?另外,如果您得到的处理器数量多于一个,则可能会罢工。但是,您可以使用以下(法语)Windows 7命令来恢复您的proc:

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

遇到困难时,请重复此操作(但不要忘记每次都降低数字!)。


2
+1,我认为set pension-starting-age = 62也可能会有所帮助,可能会set pension-starting-age = 60很快改变……
Axel 2014年

当然,退休金起步年龄也可以解决问题!还可以吗?:-)
西尔万·罗德里格

10

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


3
这是一个链接:github.com/carado/FranC
Valentin Lorentz


7

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

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

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

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

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

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

2
引号很
清楚

进程结束时,这些编译器是否仍需要刷新输出?
Lightness Races in Orbit 2014年

1
@LightnessRacesinOrbit:是的,原则上您是对的,但是请注意法语版本中实现上的差异,因为法国的冲洗可能会导致不良结果(en.wikipedia.org/wiki/French_toilet)。
Axel

5

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

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

同样

 return EXIT_SUCCESS;

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

(感谢您的愚人节玩笑!)


9
真的吗?过去一直为我工作。我可以设置一些编译器标志吗?
Lightness Races in Orbit 2014年

也许#defineSORTIE_SUCCÈSEXIT_SUCCESS
Jerry1'1

1
“ il est manquant espace ...”:翻译的人都不懂法语。(根据经验:避免编译器的翻译版本。有对于许多技术术语,没有正式建立并获得普遍认可的翻译,您最终将不得不再次猜测翻译者的选择,以找出翻译出的内容。错误消息是真的意思。)
James Kanze 2014年

18
@JamesKanze:那么您认为西班牙语可能会更好?要么?
Lightness Races in Orbit

2
那么,有一种尝试转换C ++的尝试,请参见FrenC github.com/carado/FranC,它只是很多#define:D
Lesto


3

首先,您需要

#inclure <clibstd>

在可以使用SORTIE_SUCCÈS常量之前。

C ++代码的另一个问题是您忘记使用std :: lend,而在输出字符串中使用了'\ n'-它在法语代码中不起作用,显然,仅允许使用英语和俄语编写的代码要做到这一点。

更甚者,您使用了错误的缩进(法语中的GCC需要制表符而不是空格)和括号放置(您需要在尽可能的情况下将括号放在同一行上,它们之间不允许有空格);保持它们不变将在您的代码中生成“赞扬雅克(Vac ne connaissez pas votre)制表”和“赞誉”(pas assez d'amour entre accolades)。

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

片段:http//ideone.fr/sQbL6E

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.