关于点H文件和点C文件的问题,求大神解答,谢谢-关于点H文件和点C文件的问题,求大神解答,谢谢

AID:
CID:
视频图片:
作者头像:
弹幕地址:
视频描述:

热门回复:

  • yoooooiko:1、main.c里面包含的头文件是不是等价的 将所有.h文件的内容复制到一个.h文件中是可以的,编译时预处理器做的也是将头文件和宏就地展开。但是不建议这么做,因为这会使工程的代码结构不清晰。 2、文件搜寻 Keil可以指定头文件的搜索路径,编译时编译器会按照指定的路径搜索需要的头文件,因此.h文件和.c文件可以分开放。 至于.c文件,在把.c文件添加进工程时Keil就自动记录了.c文件的路径,因此.c文件也可以分开放。 3、为什么m.c和mian.c中都要包含m.h (1)m.h里有数据类型u8和函数add的声明,不包含m.h会编译失败的原因是m.h中定义了数据类型u8,main.c和m.c中都用到了u8,用到了但是没有找到定义,编译器自然要报错。 (2)将u8类型的变量替换为int等C自带的类型后,去掉m.h编译,会有警告但是可以编译成功并运行。 (3)这里将编译粗略分为3个阶段,预处理、编译、链接。预处理阶段展开#include和处理宏,编译阶段将C代码转换为中间文件。各个.c文件直到编译过程结束仍然是独立的,每个.c文件单独编译,编译器不检查文件中使用到的外部函数是否被定义,仅将其作为符号导出。在链接阶段,链接器检查符号并根据一定规则连接各个中间文件和库文件,就像拼拼图,最终生成需要的二进制文件。在链接阶段链接器会检查相应的符号是否被定义,如果有定义,会将符号和定义对应起来,如果没有找到定义,则会报错并中止链接。