我有一个 C 函数指针数组:
int f1 (void) {
return 1;
}
int f2 (void) {
return 2;
}
int (*const functions[])(void) = {f1, f2};
在代码的其他地方(使用第三方工具),我在使用函数数组之前破坏了它的内容。所以,
result = functions[0]();
应该导致不可定义的行为(甚至中止正在运行的程序)。但事实并非如此。结果就好像破坏从未发生过一样。
目前,我可以想象这种行为的两个错误来源:
- 破坏不会发生
- 编译器在编译时内联数组的内容,因此破坏没有效果。
到目前为止,第 3 方工具从未表现出不破坏它应该破坏的东西的行为。因此,我不得不假设后者。
如何防止编译器内联函数数组的内容?