c - gcc 使用函数指针消除死代码

标签 c gcc dead-code

我对链接器如何消除未使用的函数和数据段的死代码有初步的了解。如果您使用正确的编译器和链接器标志,它会将每个函数和数据成员放入它自己的部分,然后当链接器链接它们时,它将看到,如果没有直接引用,没有任何链接到该部分然后它不会链接那个部分变成了最终的 Sprite 。

我正在尝试调和函数指针的工作方式。例如,您可以有一个函数指针,其值基于用户输入。这样做可能不是一件安全的事情,但是编译器和链接器将如何处理呢?

最佳答案

如果不显式引用函数,就没有可移植的方法来分配函数指针(例如,您不能对函数指针使用指针算法)。

因此,从您的程序可以访问的每个函数也必须在代码中被命名和引用,并且链接器会知道它。甚至将函数指针存储在数组中,如:

typedef void (*Callback)();
Callback callbacks[] = { foo, bar, baz };

足以确保列出的函数将包含在链接的可执行文件中(数组内容将在加载时或链接时固定,具体取决于平台)。

关于c - gcc 使用函数指针消除死代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26617934/

相关文章:

C:如何为生成树释放内存?

c++ - 在根窗口的背景中显示彩色 X 窗口像素图

c - 用于 Linux 的 C 应用程序的运行时配置

c++ - 为什么那个模板函数不能编译?

我可以更改之前在 C 中声明的变量的数据类型吗?

c - 段错误不会发生

c - C中的基本类型

Java常量表达式和代码消除

java - Eclipse 中不需要的死代码警告

更改 C 代码以完全运行(包括 if 的所有部分)