繁体   English   中英

为什么 -ansi 和 -std=c++11 在 g++ 中发生冲突?

[英]Why do -ansi and -std=c++11 conflict in g++?

为什么 -ansi 和 -std=c++11 不能一起工作? (ANSI 根据其他答案恢复为 C++98)我使用的是 g++-4.8。

这是 C++11 的 ANSI 批准:

http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+14882-2012

这让我很困惑。 谢谢!

实时调频

-ansi
在 C 模式下,这相当于-std=c89 在 C++ 模式下,它相当于-std=c++98

该标志是在标准有多个版本之前添加的,该标志仍​​然具有相同的含义。

你为什么要同时使用两者? 如果你想要-std=c++11然后使用它,不要添加另一个表示其他矛盾的标志。

它们只是标志名称。 最好避免将任何东西称为“ANSI”,因为 1. 它们标准化了很多东西,2. 旧标准定期更新并进行有意义的更改,3. 他们没有特别参与我所知道的任何计算机语言,而是作为一些国际组织的成员参与,在 C++、ISO 的情况下。

当告诉编译器您想要哪种标准化语言方言时,请指定其标准化的年份,或者它可以做出的唯一假设是您想要第一个(最旧的)标准。 最初的标准化是唯一一个没有指定年份不会导致歧义的时间点。

说到歧义,根据文档-ansi是唯一的语言标志,其含义取决于 GCC 的调用。 gcc -ansi表示 C89, g++ -ansi表示 C++03。 就个人而言,我更喜欢更少的歧义而不是更多的聪明。

是的。 C 中的情况与 C++ 中的情况相同:ANSI 已经(几乎自动)采用了 ISO C 标准的每个版本,包括 C11: http ://webstore.ansi.org/RecordDetail.aspx?sku= INCITS% 2fISO%2fIEC+9899-2012 每个新标准都会“取消和替换”较早的标准,如您所见,官方的 ANSI 标准是 C11 和 C++11,较早的版本不再是有效的法律。 ANSI 标准是当前的 ISO 标准,句点。

因此,如果您想将--ansi标志读取为指示 ANSI 当前采用的标准,则完全没有必要。

相反,C 和 C++ 上下文中的术语“ANSI”用于指代该语言的第一个标准化版本,之后才添加新功能。 这只是一种习俗,与所有习俗一样,不必具有字面意义。 这很方便,因为有些人(通常是普通的 C 或 C++ 用户)不太了解标准机构的工作,并认为 ANSI 的最后一个 C 标准确实是 1989 年的标准。这些人将依赖--ansi标志,而我们其他人则使用正确的年份标记标准。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM