前言
本人学生党,辣鸡一个,还望包涵
正文
一、宏定义的基本使用方法
宏定义对于学过c语言的人来说应该并不陌生,其实说白了就是#define,但是对于初学者来说,用法一般只有这样
// 定义一个常量
#define CONST "value"
但是实际上这个宏定义还可以定义一些“函数”,比如说下面的
// 定义一个加法的宏
#define add(num1, num2) (num1 + num2)
这句话的意思其实是当你在写add(5, 6)的时候,5被当作num1,6被当作num2,然后对宏展开的内容进行替换,也就是替换成(5+6)。编译器会在进行预处理的时候完成这个替换。
二、使用代码块完成宏定义
但是如果说在这个定义中要使用多个语句或者说其他的变量怎么办呢?我们可以使用代码块来完成这些操作。
// 代码块是{}
// 定义一个交换两个变量值的宏
#define exchange(num1, num2) {int c; c=num1; num1=num2; num2=c;}
在代码块中定义的变量会在程序离开该块的时候失效,这样的话这个变量c就不会影响到宏定义以外的代码内容。
三、行连接符''
我们可以看到,上面的宏定义因为把所有的语句都写在了同一行,看起来十分臃肿,那我们有没有什么办法把它分成几行呢?肯定是有的,我们用''连接符可以链接两行之间的内容
// 还是上面的那个交换
#define exchange(num1, num2) \
{ \
int c; \
c=num1; \
num1=num2; \
num2=c; \
}
但是要注意的是。''符号同一行的后面不能再有任何的字符。最经常的错误就是''后面加多了空格或者是制表符,这样也会导致编译错误。