【发布时间】:2012-11-13 20:10:24
【问题描述】:
我将一个 C 风格的宏替换为另一个。
#define OldMacro(…) {…}
#define NewMacro(…) {…}
我想重写旧版本的宏,使其无法编译并显示特定的错误消息,例如:“OldMacro() 已弃用;请改用 NewMacro()。”这可能吗?
另外,我希望它可以在 C、C++ 和 Objective-C 中工作。
【问题讨论】:
-
#define OldMacro(...) char OldMacroIsDeprecatedUseNewMacroInstead[0] -
@MooingDuck:如果您的编译器(例如默认情况下的 gcc)允许零大小的数组,那将不起作用。
-
@MooingDuck:或者
@,如果你使用宏会强制出现语法错误。 -
这不能回答你的问题,但你可能想看看comp.lang.c FAQ的问题10.4。
-
@KeithThompson:一些编译器可能会接受
@(我知道有几个接受$)。无效数组大小的优点是事物的名称会打印在错误消息中,而@可能不会。
标签: c++ objective-c c macros