一 常见宏概念
先说一下本文中会提到的内容:#,##,__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__
等
-
#
: 把语言符号转换成字符串 ,字符串化(stringizing) -
##
: 宏连接符 -
__VA_ARGS__
: 可变参数宏(C99编译器标准终于改变了这种局面,它允许你可以定义可变参数宏(variadic macros),这样你就可以使用拥有可以变化的参数表的宏。) 使用#define Debug(...) printf(__VA_ARGS__)
-
__ __FILE__, __LINE__ , __FUNCTION__
:宏变量
二 常见宏的使用
1.字符串化#
假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预处理运算符,它可以把语言符号转化程字符串。例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为字符串化(stringizing).
#incldue <stdio.h>
#define PSQR(x) printf("the square of" #x "is %d.\n",(x)*(x))
int main(void)
{
int y =4;
PSQR(y);
PSQR