为什么-ansi和-std=c++11不能一起工作?(根据其他答案,ANSI恢复为C++98 )我使用的是g++-4.8。
以下是C++11的美国国家标准认证:
http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+14882-2012
这让我感到困惑。谢谢!
发布于 2013-07-05 19:50:44
RTFM
-ansi
在C模式中,这等同于-std=c89。在C++模式下,它等同于-std=c++98。
该标志是在该标准的多个版本出现之前添加的,并且该标志仍然具有相同的含义。
为什么你想同时使用这两个工具呢?如果你想要-std=c++11,那么就使用它,不要添加另一个标志,这意味着其他东西是矛盾的。
发布于 2013-07-05 11:56:57
它们只是旗帜名称。最好避免将任何东西称为"ANSI“,因为1.它们标准化了太多的东西,2.旧标准定期更新,进行有意义的更改,3.它们并没有特别涉及到我所知道的任何计算机语言,而是作为某个国际组织的成员参与其中,例如C++、国际标准化组织。
在告诉编译器您想要哪种标准化语言方言时,请指定标准化的年份,否则它可以做的唯一假设就是您想要第一个(最早的)标准。最初的标准化是不指定年份不会导致歧义的唯一时间点。
说到歧义,根据documentation的说法,-ansi是唯一一种意义依赖于GCC的调用的语言标志。gcc -ansi表示C89,g++ -ansi表示C++03。就我个人而言,我喜欢更少的模棱两可,而不是更聪明。
发布于 2013-07-05 12:10:25
是。在C中的故事和在C++中的故事是一样的: ANSI已经(几乎自动地)采用了ISO标准的每个版本,包括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++用户)对标准组织的工作了解不多,他们认为美国国家标准协会的上一个C标准确实是1989年的标准。这些人将依赖于--ansi标志,而我们其余的人则使用正确的标有年份的标准。
https://stackoverflow.com/questions/17480543
复制相似问题