在C语言中,所有以#开头的语句被称为预处理语句,那他们有什么需要知道的知识点呢?
首先,预处理语句严格来讲并不是C语言,编译的时候也不由编译器来处理,而是由预处理器分析和处理。
其次,预处理指令必须独自占一行,而且只能占一行。怎么理解呢?以宏定义为例,看下面的代码演示:
这是正确的写法:
#define MAX(a, b) ((a) > (b) ? (a) : (b)) #define MAX(a, b) \ ({ \ typeof(a) _a = a; \ typeof(b) _b = b; \ ((_a) > (_b) ? (_a) : (_b)); \ })
这是错误的写法:
#define PI 3.14 #define SIZE 32 #define MAX(a, b) ({ typeof(a) _a = a; typeof(b) _b = b; ((_a) > (_b) ? (_a) : (_b)); })
上述代码中,错误的写法错在:一行中出现了多条预处理语句,或者一条预处理语句写了很多行。这些写法都是不行的。