您的位置:首页 > 编程语言 > C语言/C++

c语言预处理器指令

2014-01-06 22:51 405 查看
c语言有强大的预处理器指令,在很多情况下都是很有用的。

首先介绍什么是预处理器,预处理器就是在程序的源代码编译之前,会对程序进行翻译工作,就是把这程序\之后的回车去掉,以及去掉注释,然后会把之间的空白自符去掉,然后再根据预处理指令把程序进行预处理操作,等着一切都进行完毕以后,就会进行编译操作。

#define与#undef的使用:

#define是最常用的预处理器指令,他代表一个宏定义。例如这样一个例子,#define A 1就代表用1代替接下来的代码里边出现的A,由于这是预编译指令,是在程序的编译之前进行的,所以完全不必担心程序执行的效率的影响,这么做反而会使得程序的可读性以及可维护性得到很大的提高,强烈建议以后常用的常量都用#define来表示。

另外,c语言允许对宏定义的重定义,只是会覆盖之前的宏定义而已。

#define不仅可以宏定义数值常量,还可以宏定义函数,其实这不能称之为函数,只是把对应的自符串替换成为对应的代码而已。例如#define S(X) X*X 的话,在接下来的程序中使用S(2)的话,就会被预处理器替换成为2*2,但是有一个缺点,如果是S(2+1)的话,就会被替换成为2+1*2+1,这肯定不是你想要的,所以对于宏定义的函数最好都加上括号,并且每一个元素都加上括号。并且注意在宏定义的函数里边不要使用++或者--的运算符,会造成不好的后果。

宏定义的函数并不适合定义比较大的函数,宏定义的函数比较适合于定义那种函数体比较小的函数,比如max,min之类的函数,一般只有一两行。

#undef就是把宏定义给取消掉。

##以及可变宏的使用:

##是宏定义的粘合剂,据一个例子大家就知道了,例如  #define S(N)  a##N就代表在接下来的代码里边如果定义一个变量,int S(1)就等同于定义int a1;

可变宏就像printf的可变参数一样,据一个例子就是  #define PR(...) printf(__VA_ARGS__),这样子的话就是用__VA_ARGS__代替前边的...。

#include的使用:

#include是c语言的预处理器指令的又一个很常用的指令。#include就代表把对应的文件复制粘贴到对应的位置一样。

条件编译的指令:

条件编译在预处理器指令中也是十分常用的指令,#ifdef就是如果定义的意思,#else类似于c语言的else,#endif就是结束if,#ifndef就是如果没有定义某个宏,#elif就类似于c语言的else if,举一个例子就是。

#ifndef A

#incldue "A.h"

#elif defined(B)

#include "B.h"

#endif

就是代表如果宏定义了A的话,就会加入a.h文件,如果定义了B的话,就会加入B。h文件。

预定义宏的使用:

预定义宏是c语言一开始就定义好的几个宏,介绍下:

__DATE__代表当前日期

__FILE__代表当前源文件

__TIME__代表当前时间

举一个例子说明,

int main(int argc,char *args[])

{

    printf("%s\n",__DATE__);

    printf("%s\n",__FILE__);

    printf("%s\n",__TIME__);

    return 0;

}

输出结果:

Jan  6 2014

E:\unniversity\c-c++\practice\c++test\main.cpp

22:37:05

其他的一些宏定义指令:

#progma指令可以用于在代码里边修改编译器的一些设置,比如#progma c9x on就可以设置编译起是c99支持的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c c语言