如何判断是否定义了宏功能?

时间:2013-01-27 13:23:43

标签: c macros

这是一个头文件,

// a.h

#ifndef _A_H_
#define _A_H_

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

#endif

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

5 个答案:

答案 0 :(得分: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),如果原因不明确,请考虑会发生什么。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

这是你做的正确的方式

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

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