宏定义是比较常用的预处理指令,即使用“标识符”来表示“替换列表”中的内容。标识符称为宏名,在预处理过程中,预处理器会把源程序中所有宏名,替换成宏定义中替换列表中的内容。
常见的宏定义有两种,不带参数的宏定义和带参数的宏定义。
2、无参宏定义
无参数宏定义的格式为:燃盯
#define 标识符 替换列表
替换列表皮雀和可以是数值常量、字符常量、字符串常量等,故可以把宏定义理解为使用标识符表示一常量,或称符号常量。
所谓的宏就是给某个值的一个固定的名称,便于后面程序的修改和维护。尺袜具体的定义格式是:#define 宏名 值
也就是把右边的那个值取个 名字。
比如你写的
#define GCN_ICON PACKAGE_DATA_DIR "/"
宏的名字叫GCN_ICON PACKAGE_DATA_DIR ,他的具虚竖体值是"/"。在程序编译时,凡是程序中出现GCN_ICON PACKAGE_DATA_DIR 的地方,都会替换成"/"。这样做的目的主要是为了维护程序的方便。比如,你想把"/"改成另一个值,那么在这里你只要把定义部分改过来就可以了,程序中是不陵誉激需要修改的。如果不这样做,那么程序中的每个使用他的地方都需要修改,不止量很大,还容易出错。
C语言中的宏定义用法分为两种。
1、不带参数的宏定义指绝比较简单,就是用一个指定的标识符来代表一个字符串。它的一般形式为“#define 标识符 字符串”,例如#define E 2.718281828459。这种方法使用户能以一个简单的名字代替一个长的字符串。
2、带参数的宏定义不是仅仅进行简单的字符串替换,还要进行参数替换。其定义渣散的一般形式为;“#define 标识符(宏名)(参数表) 字符串”,字符串中包含在括号中所指定的参数。例如#define S(a,b) a*b area=S(3. 2)。
扩展资料:
宏定义只占编译时间,函数调用则占用运行时间(分配单元,保存现场,值传递,返回),每次执行都要载入,所以执行相对宏定义会较慢。
使用宏定义次数多时,宏定义展开后源程序很长,因为每展开一次都使程序增长,但是执行起来比较快一点(这也不是绝对的,当有唯梁姿很多宏定义展开,目标文件很大,执行的时候运行时系统换页频繁,效率就会低下)。而函数调用不使源程序变长。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)