c - gcc -O3 标志会导致警告 -O2 不会

标签 c optimization gcc compiler-optimization

我正在构建一个相当复杂的应用程序,使用 -O0 构建时没有任何错误/警告。然而,当我尝试 -O3 时,我得到了一些令人费解的问题。例如:

1: static pinfo_t* pinfo[2] = { &gv1, &gv2 }; // GLOBAL
2: 
3: int i;
4: int x = sizeof(pinfo);
5: 
6: for (i = 0; i < x; i ++)
7:    if (pinfo[i]->id == NO_ID)
8:        printf("%s\n", pinfo[i]->name);

请注意,编译器 (gcc v4.3.2) 使用 -O0(也使用 O1 和 O2)成功构建了它。但是对于 -O3,编译器正确地将第 7 行定位为潜在问题,导致行错误:

error: array subscript is above array bounds

很公平,但是当我注释掉第 7 行时,第 8 行没有问题,这也应该被标记!

感谢任何帮助!

最佳答案

关于警告和优化级别,在 GCC 中,在优化过程中分析代码时会生成一些警告,因此当未启用这些过程时,也不会发出这些警告。这是一个长期存在的问题,但到目前为止,它还没有在任何人的 TODO 列表中传播得足够高。

关于c - gcc -O3 标志会导致警告 -O2 不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16308065/

相关文章:

c - 获取序列的递归函数无法正常工作

c - 在C中显示特殊字符

c - macOS:找不到 -lpaho-mqtt3c 的库

c - nlopt 中的固定区间约束

python - 当前使用 "for loop"的 pandas 数据帧转换的性能优化

javascript - 当我尝试使用 jQuery 将标题归因于 DropDownlist 时出现性能问题

R:关于优化的问题 - 优化中的函数值无效

c - C 中可变大小数组的陷阱

c - GCC fastcall 函数定义

c - 将地址传递给指针是否会导致类型提升