VC中的#define诡异用法,请教

来源:百度知道 编辑:UC知道 时间:2024/05/14 08:45:54
最近在看老潘的com原理与应用.
最七章的源码,看不下去了,像这个宏定义.完全没见过...
请高手解答.特别这个"\",放在后面,不明所以..
#define IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
AFX_DATADEF COleObjectFactory class_name::factory(class_name::guid, \
RUNTIME_CLASS(class_name), FALSE, _T(external_name)); \
AFX_COMDAT const AFX_DATADEF GUID class_name::guid = \
{ l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }; \
今天白天耐下心来看了看MSDN,已经弄懂了.还有##啥的一些东西.
微软把这个宏用得太YD了,不服不行.
谢谢了.

这里“\”其实是这样的,当你的一段连续的代码,如果用一行书写太长,你想要换行书写时,就可以使用。
比如int a=b;
你可以写成
int a\
=b;
//这里不会变成int a\=b;
这里很短,没必要这么做,我只是做个示范。你上面的那个就是这样的,因为很长,所以把一行的,改成分行书写。

你可以把它回复成一行来看。
如果你给出的是完整的,那么这就表示代码中,出现前面那个部分的地方
(IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8))

换成后面的

AFX_DATADEF COleObjectFactory class_name::factory(class_name::guid,RUNTIME_CLASS(class_name), FALSE, _T(external_name)); AFX_COMDAT const AFX_DATADEF GUID class_name::guid = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } };

不过你后面是不是还有一部分被你省略了?

比如我在宏定义中写了#define abc a=3; b=4;

那么,在实际使用中,我可以用
int a,b;
abc
printf("%d,%d",a,b);
明白了吧。

哈哈,当初我也给这个问题搞糊涂了!