c语言预处理器指令

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++,c,c语言,宏)