首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么g++中的-ansi和-std=c++11会发生冲突?

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

Stack Overflow用户
提问于 2013-07-05 11:11:48
回答 3查看 4.1K关注 0票数 6

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

以下是C++11的美国国家标准认证:

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

这让我感到困惑。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-05 19:50:44

RTFM

-ansi

在C模式中,这等同于-std=c89。在C++模式下,它等同于-std=c++98

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

为什么你想同时使用这两个工具呢?如果你想要-std=c++11,那么就使用它,不要添加另一个标志,这意味着其他东西是矛盾的。

票数 12
EN

Stack Overflow用户

发布于 2013-07-05 11:56:57

它们只是旗帜名称。最好避免将任何东西称为"ANSI“,因为1.它们标准化了太多的东西,2.旧标准定期更新,进行有意义的更改,3.它们并没有特别涉及到我所知道的任何计算机语言,而是作为某个国际组织的成员参与其中,例如C++、国际标准化组织。

在告诉编译器您想要哪种标准化语言方言时,请指定标准化的年份,否则它可以做的唯一假设就是您想要第一个(最早的)标准。最初的标准化是不指定年份不会导致歧义的唯一时间点。

说到歧义,根据documentation的说法,-ansi是唯一一种意义依赖于GCC的调用的语言标志。gcc -ansi表示C89,g++ -ansi表示C++03。就我个人而言,我喜欢更少的模棱两可,而不是更聪明。

票数 3
EN

Stack Overflow用户

发布于 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标志,而我们其余的人则使用正确的标有年份的标准。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17480543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档