C语言预处理功能 关于字符串化和符号粘贴 2011-08-03 00:00中国IT实验室佚名
字号:A+|A-
在C语言开发中,宏定义是一个非常有用的工具,它可以使我们的代码更容易理解,更容易维护。如查一个常量在多处被使用,且今后可能会根据不同需要而修改的话,将其define一下那是再好不过了。除此之外,宏定义还有其他的功能,了解它,将更好地辅助我们开发C程序。先看个例子:
#define Conn(x,y)
x##y
#define ToString(x)
#x
#define ToChar(x)
这几个宏定义中分别用到了“##”、“#”,“#@”它们的功能分别是:
1、粘接操作符##——连接两个宏名,注意所连接的是宏名,而不是其所指代的值;
如int Conn(a,b);定义了一个int型变量ab,以后可以直接调用ab,而不必采用Conn(a,b)的形式;
printf(Conn("ab","cd"));输出结果为:abcd
但是:
#define M 0 #define var(x) Var_##x ... int var(M);//此处定义了什么?
根据ANSI/ISO C,##操作符只是简单地粘接两个宏名,则int var(M)定义的应该就是Var_M,据测试,这一点是没有问题的。但在一些比较古老的C编译环境中,也有可能定义的是Var_0,比如在TC 2.0中测试发现“Var