【问题标题】:Code that won't compile in C, C++ and Obj-C with a specific error message无法在 C、C++ 和 Obj-C 中编译并带有特定错误消息的代码
【发布时间】: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


【解决方案1】:

你可以使用这个宏定义:

#define OLD_MACRO()  (error_use_of_OLD_MACRO_is_deprecated = 0)

【讨论】:

  • 聪明,比我认为的数组技巧适用于更多情况
  • @MooingDuck 你知道除非有人定义了非常量 error_use_of_OLD_MACRO_is_deprecated 整数兼容变量,否则它不起作用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 2013-11-23
  • 2015-07-20
  • 2014-06-14
  • 1970-01-01
  • 2013-09-20
相关资源
最近更新 更多