gpt4 book ai didi

c - 一种让 GCC 毒药只适用于源代码而不适用于命令行的方法?

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:47 24 4
gpt4 key购买 nike

我有一个已清除所有 PLATFORM_X ifdef 的文件,目的是保持这种状态,使其独立于平台。

所以我在源代码中添加了以下内容,以鼓励人们不要再使用 ifdef PLATFORM_X 添加任何 hack

#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 的文件中,您不需要定义PLATFORM_X,所以写

/* PLATFORM_X configuration macro is deprecated; do not add new uses. */
#undef PLATFORM_X
#pragma GCC poison PLATFORM_X

在包含任何可能仍然使用宏的头文件之后。

请注意,您从不需要将#undef 包装在#ifdef 中; #undef 如果应用于已经不是宏的标识符,则静默无效。

关于c - 一种让 GCC 毒药只适用于源代码而不适用于命令行的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23520907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com