当未设置优化标志时,此代码可以正常工作:
#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/