手记

【学习打卡】第2天 C语言预处理和宏

课程名称: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 的兴趣。
0人推荐
随时随地看视频
慕课网APP