为什么我的程序不能在法语的Windows 7下编译?
Why can't my program compile under Windows 7 in French?
我正在运行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亲戚,效果要好得多。
-
您有一个语义错误 - 条目函数的第二个参数应该是类型
cara**
,而不是ent**
:ent principal(ent argn, cara** argm)
-
对于
<iostream>
错误,@MartinJ已经正确指出您应该改用<esflux>
。 -
关于其他错误,您的编译器似乎只是在罢工。在编译法语代码时,这种情况偶尔会发生,并且应该会在几天内自行修复。
许多问题都是由于缓存引起的,但问题是另一种难题:命名事物。是的,本地化很难。
您没有提到您使用的是哪种法语变体,但从错误消息中,我认为您使用的是"法语(法国)"(我们文明操作系统的用户称之为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种类型的类(genre
)genre::masculins
和genre::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::deh
(dehors的缩写),因为std::cin
翻译为std::ded
(dedans)。
另请注意,曾经有编译器不会自动刷新n
,因此最好使用std::findl
(fin 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
- 在 Windows 10 下使用 GTest 的 CMake - 致命错误 LNK1104:无法打开文件"gtest.lib",但存在调试"gtestd.lib"
- 在 Windows 10 下为 VTK 生成 Makefile 时,Qt mkspecs 的路径错误
- C++在 Windows Vista 下使用 d3d11
- Windows 函数 "NetUserChangePassword" 在 Windows 10 下不再工作(在 Windows 7 下工作)
- Windows 10 下的 Winhttp SSL 问题
- 无法关闭 OSK.exe 在 Windows 10 下
- 在 Windows 7 下的 Visual Studio 2015 上缺少 Api-ms-win-core-errorh
- WINDOWS环境下的c++opencv应用程序的低延迟视频流
- 无法在Windows 7下加载QtBluetooth 5.12.0
- 在Windows 7下可以从C#调用C DLL,但在Windows 10下失败
- DXGI_FORMAT_YUY2纹理在 Windows 8.1 和 Windows 10 下返回不同的 RowPitch
- 如何从Windows XP下的程序中知道或更改Windows事件日志的大小
- 在Windows 8下使用Tbb构建错误Qt创建器
- 在Windows环境下在PostgreSQL 9.1中创建函数
- Windows/MSVC10下的Boost.Python链接错误
- windows 7下的C++指针
- 在Windows 7下编译的Dll在Windows XP中不起作用
- Windows 7 下带有 VC++ 的 LPT 错误:"External component has thrown an exception."
- Visual C++ 2012 应用程序无法在 Windows XP 下运行 - 已更新
- QProcess::terminate() 不适用于简单的 Qt 应用程序作为 Windows XP 下的子进程