gpt4 book ai didi

c - 是 GCC 的选项 -O2 破坏了这个小程序还是我有未定义的行为

转载 作者:太空狗 更新时间:2023-10-29 16:35:51 25 4
gpt4 key购买 nike

<分区>

我在一个非常大的应用程序中发现了这个问题,并从中制作了一个 SSCCE。我不知道代码是否有未定义的行为或 -O2 破坏了它。

当使用 gcc a.c -o a.exe -O2 -Wall -Wextra -Werror 编译它时,它会打印 5

但是在编译时不使用 -O2(例如 -O1)或取消注释 2 个注释行之一(防止内联)时它会打印 25 .

#include <stdio.h>
#include <stdlib.h>
// __attribute__((noinline))
int f(int* todos, int input) {
int* cur = todos-1; // fixes the ++ at the beginning of the loop
int result = input;
while(1) {
cur++;
int ch = *cur;
// printf("(%i)\n", ch);
switch(ch) {
case 0:;
goto end;
case 1:;
result = result*result;
break;
}
}
end:
return result;
}
int main() {
int todos[] = { 1, 0}; // 1:square, 0:end
int input = 5;
int result = f(todos, input);
printf("=%i\n", result);
printf("end\n");
return 0;
}

是 GCC 的选项 -O2 破坏了这个小程序还是我在某处有未定义的行为?

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