【问题标题】:Undef'ing a function-like macro取消定义类似函数的宏
【发布时间】:2010-08-17 15:49:54
【问题描述】:

C/C++中有两种宏:

 #define ABC   /* usual */

 #define FUNC(a)  /*function-like*/

但是我怎样才能取消定义它们呢?

更新:那么取消定义“类常量宏”和“类函数宏”没有区别吗?

【问题讨论】:

  • 如果我有 '#Define abc' 和 '#Define abc(A)',它们都将用一个 '#undef abc' 不定义?
  • 没有宏重载这样的事情。在您第二个 #defineabc 之后,第一个将消失。
  • @osgx:不,我很抱歉,但错了。
  • 第二个#define ABC 无效(除非新定义与旧定义相同,但不在此处)。一些狡猾的预处理器可能会允许它。其他人会给出警告或错误。
  • @osgx:也许你有一个不兼容的预处理器允许宏重载,但一个兼容的不会。我们无法真正回答有关不合规实现如何表现的问题。

标签: c-preprocessor


【解决方案1】:
#undef ABC
#undef FUNC

#undef "cancels" out a previous #define。效果就像您以前从未有过特定标识符的 #define。请注意#defines 不尊重范围,因此最好仅在需要时使用它们。

另请注意,一个宏标识符是否使用“通常”语法而另一个使用“类函数”语法并不重要。 #define ABC#define ABC(A) 都定义了一个名为 ABC 的宏。如果两者都有,但没有 #undefing 其中一个,最新的一个会“覆盖”另一个。 (如果发生这种情况,一些编译器可能会发出警告。)

【讨论】:

  • 哈哈。我知道那会发生:-)
【解决方案2】:
#undef ABC
#undef FUNC

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
  • 2015-10-29
  • 2011-05-01
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
  • 2023-03-18
相关资源
最近更新 更多