gpt4 book ai didi

GCC 中的编译器标志 (C)

转载 作者:行者123 更新时间:2023-11-30 21:05:47 24 4
gpt4 key购买 nike

我已经阅读了 GCC 文档和 man。如果我将代码编译为 (1)gcc -o test test.c执行时我得到一些结果。如果我将其编译为 (2)gcc -O -o test test.c当我运行它时,我得到不同的结果。

阅读 GCC 手册后,我使用(而不是 -O)该手册所说的选项 -O 有效的所有选项进行编译。我没有得到与选项(2)相同的结果。结果就是句子(1)。什么(并且没有记录)改变了生成的程序的行为?测试代码:

#include <stdio.h>

int var1 = 0;
int var2 = 0;

int main() {
int *pntr = &var2;
pntr--;
(*pntr) = 99;
printf("Var1=%d\n",var1);
printf("Var2=%d\n",var2);
}

最佳答案

没有 UB 没有问题

#include <stdio.h>

union
{
struct
{
int var1;
int var2;
};
int arr[2];
}u;

int main() {
int *pntr = &u.arr[1];
pntr--;
(*pntr) = 99;
printf("Var1=%d\n",u.var1);
printf("Var2=%d\n",u.var2);
}

关于GCC 中的编译器标志 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52617483/

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