深入浅出C语言(2)----编译预处理

编译器在对源程序进行编译之前,首先要由预处理程序对程序文本进行预处理。

1.       #include 指令
#include<
文件名>按标准方式搜索, 搜索目录为: 编译器之前设置好的目录

#include “文件名”, 编译器首先在当前目录搜索,如果没有找到,再按标准方式搜索。
#include
指令叫文件包含指令,其作用是将中一个源文件嵌入到当前源文件中的#include指令位置处。
C中,我们通常是将一个.h 文件#include进入.c文件中。按#include指令的意思,是可以#include任意格式的文件的。你能这样写:
#include “a.c” //
a.c文件包含到当前位置中
#include “a.txt” //
a.txt 文件包含到当前位置中
这些做法是都是可以的。
C中,#include的位置通常是 .c 文件的开头, 其实,你可以在任意位置的。。写在.c文件的末尾也是可以的。

示例:
//file a.txt
#define MAX 100

 

//file a.c

#include “a.txt”

Void main()

{

}

 

//file. a.c

Void main()

{

}

#include “a.txt”

 

编译器执行预编译的结果是:

对于第一种:

#define MAX 100

Void main()

{

}

 

对于第二种写法:

Void main()

{

}

#define MAX 100

 

#include 文件包含指令,会把需要的文件代码copy到当前文件中。 如果在a.c, b.c , c.c三个文件中都有#include “a.h”, 编译器会把a.h copy到这三个文件中去。当然,你可以不要.h 而是直接在a.c,b.c, c.c文件写入a.h的内容,只是这样比较麻烦。不过,从这点也是告诉大家,.h文件并不是一定要存在的,有.c就可以了。

2.       #define 指令
在我们上述示例中,已经用到了 #define MAX 100这种写法了。编译器在预处理时,是把#define 所定义的内容进行替换。一般我们好象习惯写一行。其实,你可以写多行代码的。。

#define MY_CODE  while(i) \

                  {\

                  }\

编译器会把这段code替换到MY_CODE调用处。

3.       常用预处理指令:

指令

说明

#include

文件包含

#define

定义宏

#if/#ifdef/#elif/#else/#endif

条件编译指令

##

连接指令

#error

编译器遇到此指令为报错,并停止编译

 

如果一个工程里有这样的几个文件:

Comm.h, Hello.h, hello.c, main.h, main.c 其中main函数在main.c

.h 格式的文件,前面已经说了,形式上是可以写成任意格式的,如.txt, .dat之类的;

.c 需要严格遵守。因为编译器是搜索.c文件来编译的, 如果在.c#include h文件,才会把.h文件的内容copy.c中;反之,如果没有引用任何.h文件,那编译器就会不管它的。

当然,你也可以给编译器设置一些参数, 告诉编译器,类似于.m文件也是源代码,编译的时候,要编译这种格式的文件。。只是一般程序设计的时候,不建议这么做而已。

 

对于上述的工程来说,编译预处理完毕之后, main.c & hello.c被整合了,我们姑且认为整合后的代码文件为:main_tmp.c & hello_tmp.c ,其他的.h, .c 文件都没有了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值