当未设置优化标志时,此代码可以正常工作:

#include <cstdio>
int main(){
  float *ptr = ({float var[10] = {1,2,3,4,5,6,7,8,9,10}; var;});
  float *ptr1 = ({float var[10]; for(int i_=0;i_<10;i_++)var[i_]=i_+1; var;});
  float *ptr2 = ({float var[10]; var[4]=5; var;});
  printf("\n value = %f %f %f",ptr[4],ptr1[4],ptr2[4]);
}

它按预期返回5 5 5
但是,设置优化标志后,它将返回5 0 5
ptr1有一些与循环有关的问题。为什么?
也许是一个错误?

我正在使用最新的4.8.0,经过测试的x64,x86以及其他构建。都是一样的行为。

最佳答案

您正在使用GNU语言扩展,因此让我们看一下GNU documentation:


var每次都被销毁,并且指向其第一个元素(由表达式返回的内容)的指针不安全地取消引用。

关于c++ - gcc优化标志中断代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16556292/

10-11 21:55
查看更多