1

这是一个头文件,

// a.h

#ifndef _A_H_
#define _A_H_

#ifndef MACRO_FUNC
#define MACRO_FUNC(X, Y) (X * Y + X - Y)
#endif

#endif

上面的代码是我如何判断宏函数MACRO_FUNC是否定义的。这是正确的方法吗?

4

5 回答 5

2

是的,#ifdef或者#ifndef是测试正在定义的宏的正确方法。请注意,您也可以使用#undef后跟#define替换任何现有定义。

#ifdef MACRO_FUNC
#undef MACRO_FUNC
#endif
#define MACRO_FUNC(X, Y) (X * Y + X - Y)

此外,您的示例宏会更好地表示为

#define MACRO_FUNC((X), (Y)) ((X) * (Y) + (X) - (Y))

考虑一下如果你打电话MACRO_FUNC(somevar - 1, othervar + 1)的原因不清楚,会发生什么。

于 2013-01-27T13:26:22.417 回答
2

是的,这是正确的方法。确保使用您自己的实现的另一种方法是首先取消定义任何先前的定义:

#ifdef MACRO_FUNC
#  undef MACRO_FUNC
#endif
#define MACRO_FUNC(X, Y) (X * Y + X - Y)
于 2013-01-27T13:26:33.407 回答
1

这是你所做的正确方式

于 2013-01-27T13:25:28.030 回答
1

是的,由于宏是由预处理器评估的,因此您需要使用预处理器指令#ifdef#ifndef检查是否存在。

于 2013-01-27T13:25:50.733 回答
1

是的,这是您检查宏是否已定义的方式。

请注意,以 开头的标识符_[A-Z]是为实现保留的。例如更改_A_H_A_H_

于 2013-01-27T13:26:32.893 回答