如何在本地抑制#define?

aka*_*nuk 1 c++ c-preprocessor

刚抓到一个愚蠢的小虫.我有一个带有CreateFile()功能的zip处理库.Winbase.h,包括在我的标题深处的某个地方,重新定义它CreateFileW,链接器疯了.

当然,我会winbase在这个特殊情况下排除.它不应该在第一位的范围内.但理论问题仍然很有趣,

有没有办法在本地压制一些定义?

Pet*_*ker 5

您可以通过在名称周围加上括号来绕过宏:

(CreateFile)(arguments);
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为宏CreateFile是一个类似函数的宏(即它在括号中需要一个参数列表); 名称后面的右括号与使用类似函数的宏的语法不匹配,因此预处理器不会展开它.

当然,"正确"的解决方案是正确命名功能,即create_file.<g>