gpt4 book ai didi

c++ - gcc 优化标志中断代码

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:22:33 25 4
gpt4 key购买 nike

当没有设置优化标志时,这段代码工作正常:

#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 :

In a statement expression, any temporaries created within a statement are destroyed at that statement's end.

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com