最近在看微软某个SDK源码,看到一段宏定义之类的,实在没看懂,这段代码如下:
#define CREATE_BRICK_SOURCE(NAME, TPL_BRICK, CONTEXT, NEXT_BRICK) \
typedef TPL_BRICKC_##NAME; \
typedef __C_##NAME *S_##NAME; \
S_##NAME NAME(aligned_new(C_##NAME, CONTEXT, NEXT_BRICK));
求大神解释解释该怎么看懂这段代码啊
不知道你这个问题是否已经解决, 如果还没有解决的话:摘自 《C程序设计语言》1.4节
在结束讨论温度转换程序前,我们再来看一下符号常量。在程序中使用300、20等类似的“幻数”并不是一个好习惯,它们几乎无法向以后阅读该程序的人提供什么信息,而且使程序的修改变得更加困难。处理这种幻数的一种方法是赋予它们有意义的名字。#define指令可以把符号名(或称为符号常量)定义为一个特定的字符串:
#define 名字 替换文本
在该定义之后,程序中出现的所有在#define 中定义的名字(既没有用引号引起来,也不是其它名字的一部分)都将用相应的替换文本替换。其中,名字与普通变量名的形式相同:它们都是以字母打头的字母和数字序列;替换文本可以是任何字符序列,而不仅限于数字。
#include <stdio.h>
#define LOWER 0 /*lower limit of table */
#define UPPER 300 /*upper limit */
#define STEP 20 /*step size * /
/*print Fahrenheit-Celsius table */
main()
{
int fahr;
for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP)
printf ("%3d %6.1f\n", fahr, (5.0/9.0)* (fahr-32 ));
}
其中,LOWER、UPPER与 STEP都是符号常量,而非变量,因此不需要出现在声明中。符号常量名通常用大写字母拼写,这样可以很容易与用小写字母拼写的变量名相区别。注意,#define指令行的末尾没有分号。