宏
#define
用来定义一个宏。
#
开头的是编译预处理指令。
在c语言的编译器开始编译之前,编译预处理程序(cpp)会把程序中的宏的名字替换成值。
宏的定义可以做到非常复杂。
头文件
多个.c文件
在一个项目中的多个.c
文件是可以一起编译,然后链接起来的,通常.c
文件中存放的都是函数。
如果你在一个.c
文件中使用了另一个文件中定义的函数,没有函数声明,又恰好用了不同数据类型的参数,在链接的时候是不会发生错误的。
因此通常我们需要一个.h
文件来存放函数声明和全局变量。
从.c到可执行文件
.c
—>.i
—>.s
—>.o
—>.out
.c
:源代码文件.i
:编译预处理文件.s
:汇编代码文件.o
:经过汇编得到目标代码文件.out
:经过链接等操作得到可执行文件
头文件.h
1 |
这行代码很眼熟吧,这里需要注意两点:
- 有时候我们会说引入了库函数,这种说法是有失偏颇的,
stdio.h
中都是函数声明,实际上并没有函数定义 <>
表示到指定目录下去寻找该头文件
1 |
我们自己定义的头文件,用" "
,表示在同一个项目的文件中寻找
头文件实际上也是文本替换。这就会导致多个文件之间相互include
时,有极大可能会发生重定义(redefine)的情况。
#ifndef
1 |
|
在头文件中加入这段代码,就可以避免引用时发生重定义,_MGRAPH_H_
这个名字,只要能保证你在其它地方不会用到一模一样的名字即可,通常是用头文件的名字加上几个_
来避免。