【发布时间】:2014-06-24 14:43:54
【问题描述】:
我有一个已清除所有 PLATFORM_X ifdefs 的文件,目的是保持这种状态,使其独立于平台。
所以我在源代码中添加了以下内容,以鼓励人们不要再使用 ifdef PLATFORM_X 添加任何技巧
#pragma GCC poison PLATFORM_X
#ifdef PLATFORM_X // compiler catches when a dev tries to add more hacky code
// bla bla
#endif
但是,由于文件本身是使用 -DPLATFORM_X 与该平台的所有其他文件一起编译的,因此会触发警告。
./foo.c:3:20: error: poisoning existing macro "PLATFORM_X"
我真的希望毒药只触发源文件中的添加。这可能吗?
(在这种情况下修改 makefile 并不理想,因为这确实是一个全局定义)
另一种方法是在有毒头文件中使用#undef PLATFORM_X,但这样代码只是默默地省略而不是出错。
想法?
【问题讨论】:
-
你的意思是
#ifdef PLATFORM_X, #undef PLATFORM_X, #endif, #pragma GCC posion PLATFORM_X不起作用吗?我不明白为什么它不会?当然,如果 Makefile 定义了它,它就不会捕获它,因为我们只是取消了它。与完全没有定义时相比,上述内容有什么区别? -
是的,这行得通!好主意。
-
Np,很高兴为您提供帮助。将其发布为答案。
标签: c gcc c-preprocessor