C 原型函数 - 目标文件
C Prototype Function - object file
在Linux中编译c源文件时如何处理原型函数?符号是存储在目标文件中(格式为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()
的机器代码在定义它的模块中将是 "allocated"。该声明 不 分配任何 space.
在Linux中编译c源文件时如何处理原型函数?符号是存储在目标文件中(格式为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()
的机器代码在定义它的模块中将是 "allocated"。该声明 不 分配任何 space.