首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >顺序点-这是gcc警告的错误吗?

顺序点-这是gcc警告的错误吗?
EN

Stack Overflow用户
提问于 2020-03-30 19:06:10
回答 1查看 402关注 0票数 7

拿这个玩具计划来说:

代码语言:javascript
运行
复制
int main() 
{
  int a = 1;
  a = ++a ;
}

具有gcc 9.3汇编输出的-Wall -std=c++17 (甚至主干):

代码语言:javascript
运行
复制
<source>:4:5: warning: operation on 'a' may be undefined [-Wsequence-point]
    4 |   a = ++a ;
      |   ~~^~~~~

我知道在过去确实是一个问题,但对同一个问题的不同回答指出了C++17标准中固定的部分,即在分配操作中,rhs是在实际分配之前进行排序的:

8.18。..。在所有情况下,分配都是在计算右和左操作数的值之后,以及在分配表达式的值计算之前进行的。

所以这个警告真的是假的还是我漏掉了什么?

EN

回答 1

Stack Overflow用户

发布于 2020-03-31 08:52:10

正如在另一个答案中已经提到的,代码行为良好,对于C++17来说这条信息是假阳性的,但我想补充一点,GCC仍然有意警告它。

GCC文献声明-Wsequence-point警告标志(由-Wall启用):

C++17标准将在更多的情况下定义操作数的计算顺序:特别是它要求在左侧之前计算赋值的右侧,因此上述示例不再是未定义的。但是,这个选项仍然会对它们发出警告,以帮助人们避免编写C和C++早期版本中未定义的代码。

所以这个程序给出了警告。

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

https://stackoverflow.com/questions/60937761

复制
相关文章

相似问题

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