我发现这段代码使用“-fsanitize=undefined,address”和不使用它会产生不同的结果。
int printf(const char *, ...);
union {
long a;
short b;
int c;
} d;
int *e = &d.c;
int f, g;
long *h = &d.a;
int main() {
for (; f <= 0; f++) {
*h = g;
*e = 6;
}
printf("%d\n", d.b);
}
Run Code Online (Sandbox Code Playgroud)
命令行是:
$ clang -O0 -fsanitize=undefined,address a.c -o out0
$ clang -O1 -fsanitize=undefined,address a.c -o out1
$ clang -O1 a.c -o out11
$ ./out0
6
$ ./out1
6
$ ./out11
0
Run Code Online (Sandbox Code Playgroud)
Clang 版本是:
$ …Run Code Online (Sandbox Code Playgroud)