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

Lig*_*ica 237 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;
}
Run Code Online (Sandbox Code Playgroud)

产量

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
     ^
Run Code Online (Sandbox Code Playgroud)

Mar*_* J. 151

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

#inclure <iostream>
Run Code Online (Sandbox Code Playgroud)

应该:

#inclure <fluxes>
Run Code Online (Sandbox Code Playgroud)

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

  • GNPU n'est pas UNIX. (31认同)
  • 另外要小心为头文件添加«.e»扩展名为«en-tête» (5认同)
  • 我记得De Gaulle喊出"Vive le logiciel libre!"...... (5认同)
  • @ArlaudPierre:事实证明,除了使用`.e`扩展名所需的C-standard-library-header文件外,您可以使用所需的扩展名文件扩展名.但是,当然,标准的扩展名如`.e`,`.ee`,`.epp`是惯例的首选...详情请访问:http://stackoverflow.com/questions/441568/when-can-you -omit-的文件扩展功能于一个-包括指令性 (2认同)

Rei*_*ica 111

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

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

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


Gil*_*il' 62

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

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

解决方法是使用"法语(摩纳哥)"(fr_MC)语言,其中大写重音字母按预期工作.不幸的是,Monaco版本的编译器非常昂贵.您也可以使用加拿大法语,比利时法语或瑞士法语版本,但这些都要求您提交双语(fr_CA+ en_CA),三语(fr_BE+ nl_BE+ de_BE)或四语(fr_CH+ it_CH+ de_CH+ rm_CH)源文件.非法的法语变体是因为它们太穷而无法提供C++编译器,但是你可以使用C代替.

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

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

我wollun尝试了É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ÈS ;
}
Run Code Online (Sandbox Code Playgroud)

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

pour exemple
  répète 18 [av 5 td 10]
  td 60
  répète 18 [av 5 td 10]
fin
Run Code Online (Sandbox Code Playgroud)


zma*_*ies 51

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

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

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

  • "通过*程序*"<3 (6认同)
  • 所以你所说的是"Ceci n'est pas une program BASIC." (5认同)

Pie*_*aud 44

你好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 ;
}
Run Code Online (Sandbox Code Playgroud)

请注意我换argnnarg的,因为它在法文中是更自然的(无关匈牙利命名法虽然)!

编辑:遵循angew的建议


jwa*_*wav 35

几乎所有内容都包含在之前的答案中,但如果我可以添加:

renvoyer SORTIE_SUCCÈS ; // correct, but bad pratice
Run Code Online (Sandbox Code Playgroud)

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

capitulation ; // a better, frenchier approach
Run Code Online (Sandbox Code Playgroud)

  • 在法语C中不是两个语义上相同的? (3认同)

pma*_*tin 17

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

#inclure <Montebourg>
Run Code Online (Sandbox Code Playgroud)

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


Cri*_*ole 17

我意识到这不适用于这种特殊情况,但在法语编程时要记住对象的性别很重要.有两种类(genre)genre::masculinsgenre::féminin

例如:

genre::masculins Hommes {}
genre::féminin Femme {}
Run Code Online (Sandbox Code Playgroud)

此外,当传递this给另一个函数时,函数调用前缀为参数列表而不是后缀:

genre::masculins Croissant {
    nul nourrir(Hommes hommes) {
        hommes.(ce)manger ;
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

genre::féminin Grenouille {
    nul nourrir(Hommes hommes) {
        hommes.(cette)manger;
    }
}
Run Code Online (Sandbox Code Playgroud)

供进一步参考:维基百科Word Order


Syl*_*gue 15

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

set max-working-hours-a-week = 35
Run Code Online (Sandbox Code Playgroud)

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

  • +1,我认为`set pension-starting-age = 62`也可能有所帮助,可能会很快变成'养老金 - 起始年龄= 60岁'...... (2认同)

Fer*_*eak 10

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

  • 这是一个链接:https://github.com/carado/FranC (3认同)

n. *_* m. 7

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


Axe*_*xel 7

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

它不是std::cendehors,但std::deh(对于dehors而言)是(对于dedans)的std::cin翻译.std::ded

还要注意曾经有过没有自动刷新的编译器\n,因此最好使用std::findl(fin de ligne).所以它应该是这样的:

   std::deh << "Bonjour le monde!" << std::findl; 
Run Code Online (Sandbox Code Playgroud)

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

   std::deh << «Bonjour le monde!» << std::findl; 
Run Code Online (Sandbox Code Playgroud)

  • 很好地看到了引号 (2认同)

Bas*_*tch 5

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

 #include <iostream>
 //  ^^^  the english word "include" 
Run Code Online (Sandbox Code Playgroud)

同样地

 return EXIT_SUCCESS;
Run Code Online (Sandbox Code Playgroud)

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

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

  • @JamesKanze:你认为西班牙语可能会更好吗?要么? (18认同)
  • 真的吗?它过去总是对我有用.我可以设置一些编译器标志吗? (9认同)
  • 那么,有一个转移C++的尝试,请参阅FrenC https://github.com/carado/FranC,它只是很多#define:D (2认同)