课程名称:C语言系统化精讲 重塑编程思想 打造坚实的开发基础
课程章节:第五章 预处理和宏
授课老师:bennyhuo
课程内容
头文件包含
C语言的编译 可以理解为:
预处理 -> 编译 -> 链接
这一次学习预处理,本质上就是学习如何处理宏。
最显著的宏就是文件包含
#include <stdio.h>
本质就是把整个 stdio.h 中所有函数原型导入进来,所以你不进行这样的文件包含,自己把函数原型定义好,照样能够编译,而且程序运行也不会报错,如此所示:
int __cdecl puts(char const * ) //将此函数原型声明,其实现在标准库中,即可在不写 #include 的情况下,使用puts函数
。
类似的:
int __cdecl printf(const char *__restric__ _Format,...);
同样可以声明 printf 函数。
所以本质上引入头文件,本质上就是更方便的进行声明,其会在定义的地方进行宏展开,将所有的函数声明展开。
Ps:gcc -E
可以查看进行递归宏展开后的内容,对于复杂的宏定义,可以方便的查看具体数值。
自定义头文件
当我们想要自己写头文件,来更好地模块化编程,我们就可以编写自己的头文件。头文件*.h
中我们把函数主题写在如下框架内:
#ifndef XXXX
#define XXXX
int func()
{
//statements
}
#endif
而在使用方面,需使用 :
#include "*.h"
即可将函数引入,后方可使用。值得注意的是,使用双引号默认是相对于源文件的相对路径来搜索的。
而<*.h> 则不搜索相对路径,一般是工程指定的库文件路径。
而在 Clion 中使用CMake 编译的话需要将头文件的等信息进行修改,一般将 .c 引入即可。
而一般使用gcc 等联合编译即可。
课程收获
- 清楚地了解头文件包含,和自定义头文件等知识。
- 对于如# include 中,双引号和尖括号的区别有了仔细的区分。
- 知道了Cmake 中实用的方法,增加了对CMake 的兴趣。