C 17 GCC编译器为什么会发出有关未定义的警告
Why does C++17 GCC compiler gives warning about undefined?
根据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。
相关文章:
- 编译C++时未定义的引用
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 为什么我会收到警告,指出函数已使用但未定义,以及已定义但未使用?
- G++ 编译器未为未定义的方法生成错误/警告
- 我正在尝试在我的类中创建一个静态成员,但编译器警告我它是未定义的
- 链接时突然收到maxrregcount警告和未定义的引用错误
- 关于静态模板化 constexpr 的 Clang 警告(未定义内联函数)
- C 17 GCC编译器为什么会发出有关未定义的警告
- 如果可能存在未定义行为,为什么编译器不警告您?
- 警告:#Warning qopenglfunctions.h与GLEW不兼容,GLEW定义将未定义[-Wcpp]
- GCC警告已声明但未定义的变量
- 可以在编译时警告未定义的行为
- 关于未定义操作的编译器警告
- NVCC/CUDA 3.1 - ghtr-default.h 泛洪"declared static"但未定义的警告
- 如果局部堆栈变量是未定义的行为,为什么编译器会发出有关返回对局部堆栈变量的引用的警告
- C++未定义的引用...还有警告:已弃用从字符串常量到 'char*' 的转换