带有多个语句的C ++宏

时间:2014-12-30 07:48:08

标签: c++ replace macros c-preprocessor

我正在从sourceforge分析FileTransfer开源项目的来源。我是C ++的新手,我遇到了以下宏:

#define USES_CONVERSION int _convert; (_convert); UINT _acp = ATL::_AtlGetConversionACP() /*CP_THREAD_ACP*/; (_acp); LPCWSTR _lpw; (_lpw); LPCSTR _lpa; (_lpa)

我理解预处理器在简单宏中完成替换的基本思路,如:

#define PI 3.14

但是我不理解上面显示的长宏(第一个)。有人请解释一下吗?

3 个答案:

答案 0 :(得分:1)

它只是取代了

的出现
USES_CONVERSION

代码

int _convert; (_convert); UINT _acp = ATL::_AtlGetConversionACP() /*CP_THREAD_ACP*/; (_acp); LPCWSTR _lpw; (_lpw); LPCSTR _lpa; (_lpa) 

这只是一个简单的文字替换

答案 1 :(得分:0)

换句话说,这是一个宏功能。并且可以在有人用C语言用C#语言实现getter和setter的情况下使用。

但是在c ++语言中,我们不推荐这种用法,因为它不易理解。

答案 2 :(得分:0)

宏是 ATL 库的一部分,定义在 atlmfc\include\atlconv.h 中,它创建局部变量,由 atlconv.h 中定义的其他宏使用,如 A2W、W2A。 其目的是提供方便的方式在不同类型的字符数组(ansi、widechars)之间进行转换。