在 Linux 中编译 c 源文件时如何处理原型(prototype)函数?符号是存储在目标文件中(格式为ELF文件)还是存储签名以在链接时引用它? 例如:
#define MAX 32
typedef struct{
float[3][3];
}Tensor_t;
float tensor_trace(Tensor_t* t);
“tensor_trace”是在某处分配的吗?
最佳答案
顺便说一句,您需要为 float
数组命名。
如果将显示的源代码编译为 C 文件,结果将是一个空目标文件。不会存储任何符号。
如果您使用显示的源代码作为包含在另一个 C 文件中的头文件,该文件不调用tensor_trace()
,目标文件将没有为其存储的符号.
如果您使用显示的源代码作为包含在另一个 C 文件中的头文件,该文件确实调用了 tensor_trace()
,目标文件将为其存储一个符号。在生成调用的地方放置对该符号的引用。链接器会将此引用解析为必须在另一个模块中定义的函数。
所以回答你的问题:
Is "tensor_trace" allocated somwhere?
tensor_trace()
的机器代码将在定义它的模块中“分配”。该声明不分配任何空间。
关于C 原型(prototype)函数 - 目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58101174/