这是一个简短的程序,运行时会出现段错误。即使在迂腐的层面上,它也不会发出关于 clang 的警告。
#include <stdio.h>
#include <stdlib.h>
typedef struct object {
int type;
} object;
void write(object *obj) {
switch (obj->type) {
case 1:
break;
}
}
int main(void) {
printf("hi");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在 x86 Linux 上似乎不会发生崩溃,但我在 aarch64 Android 上。
$ gcc --version
clang version 17.0.6
Target: aarch64-unknown-linux-android24
Thread model: posix
InstalledDir: /data/data/com.termux/files/usr/bin
$ uname -a
Linux localhost 5.10.177-android13-4-00003-ga7208022a7ea-ab10815828 #1 SMP PREEMPT Fri Sep 15 16:40:54 UTC 2023 aarch64 Android
Run Code Online (Sandbox Code Playgroud)
使用 gdb 跟踪它看起来printf最终会调用write,但我现在不知道会发生这种情况。
这看起来像是一个编译器错误,但我可以很好地编译和运行其他程序。如果我删除printf …
c ×1