c - C 原型函数 - 目标文件
问题描述
在 Linux 中编译 ac 源文件时如何处理原型函数?符号是存储在目标文件中(格式化为 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()
的头文件,则目标文件将为其存储一个符号。在生成调用的地方放置了对该符号的引用。链接器会将此引用解析为必须在另一个模块中定义的函数。
所以回答你的问题:
“tensor_trace”是否分配在某个地方?
的机器代码tensor_trace()
将在定义它的模块中“分配”。声明不分配任何空间。
推荐阅读
- python - 如何创建一个列表作为字典的键并添加到不同的零件列表中?
- sql - 为什么我的查询在程序 (PL/SQL) 中不返回任何记录,但在 SQL 中手动运行时却返回?
- java - 使用显式等待来等待父框架或默认内容
- android - 如果设置为包装内容,填充是否仅包含在视图大小中?
- mysql - 'MySql.Data.MySqlClient.MySqlConnectAttrs' 的类型初始化程序引发异常
- python - 现在我一直有一个问题
- python-3.x - 袖珍狮身人面像和虚拟助手
- javascript - 如何在控制台中重新启用 React 应用程序的警告/错误?
- javascript - 使用 file:// 协议时使用 javascript 请求文件
- github - 在存储库目录中显示 README.md