C 17 GCC编译器为什么会发出有关未定义的警告

Why does C++17 GCC compiler gives warning about undefined?

本文关键字:未定义 警告 GCC 编译器 为什么      更新时间:2023-10-16

根据C 17,无法保证以下表达式评估顺序。它称为未指定的行为。

int i = 0;
std::cout<<i<<i++<<std::endl;

C 17 GCC编译器给出以下警告:Live Demo

prog.cc: In function 'int main()':
prog.cc:6:20: warning: operation on 'i' may be undefined [-Wsequence-point]
     std::cout<<i<<i++<<std::endl;

我不明白,在上面的C 17中,不再明确行为,然后为什么编译器会发出有关未定义的警告?

似乎发出警告,因为这是一个角案,或者至少非常接近一个。可移植性似乎是一个问题。

从页面https://gcc.gnu.org/onlinedocs/gcc/warning-options.html

C 17标准将在更多情况下定义操作数的评估顺序:特别是要求在左侧进行分配的右侧,因此上述示例不再是不明确的。但是,此警告仍然会警告他们,以帮助人们避免编写C 的更早修订中未定义的代码。

标准是令人困惑的,因此在微妙的情况下,关于序列点规则的确切含义存在一些争论。可以在http://gcc.gnu.org/readings.html。

相关文章: