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

Why can't my program compile under Windows 7 in French?

本文关键字:Windows 7下 编译 法语 我的 程序 不能 为什么      更新时间:2023-10-16

我正在运行Windows 7法语,我正在尝试编译这个非常基本的程序,但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
     ^

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

#inclure <iostream>

应该是:

#inclure <fluxes>

此外,您会发现使用Studio Visuel Micromou或CCG(代表"Collection de Compilateurs GPU",顺便说一句)工具,而不是它们更常见的MVS或GCC亲戚,效果要好得多。

  1. 您有一个语义错误 - 条目函数的第二个参数应该是类型 cara** ,而不是 ent**

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

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

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

没有提到您使用的是哪种法语变体,但从错误消息中,我认为您使用的是"法语(法国)"(我们文明操作系统的用户称之为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代替。

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

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

我在 Émaxe 51,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

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

这不是一个BASIC程序,所以Visual Studio不知道如何处理它。

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

Hello Légèreté fait la 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,因为它在法语中更自然(尽管与匈牙利符号无关)!

编辑:遵循安格的建议

几乎所有内容都在前面的答案中涵盖了,但如果我可以补充一下:

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

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

capitulation ; // a better, frenchier approach

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

#inclure <Montebourg>

哼......为时已晚,它已被弃用。新版本将于本周推出。

我意识到这不适用于这种特殊情况,但在用法语编程时,重要的是要记住对象的性别。 有2种类型的类(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命令取回您的进程:

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

卡住时重复(但不要忘记每次都降低数字!

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

您可能需要

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

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

它不是std::cendehors,而是std::dehdehors的缩写),因为std::cin翻译为std::deddedans)。

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

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

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

   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,而是在输出字符串中使用了"" - 它在法语代码中不起作用,显然,只有用英语和俄语编写的代码才允许这样做。

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

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

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