这是一个头文件,
// a.h
#ifndef _A_H_
#define _A_H_
#ifndef MACRO_FUNC
#define MACRO_FUNC(X, Y) (X * Y + X - Y)
#endif
#endif
以上代码是我判断是否定义了宏函数MACRO_FUNC
的方法。这是正确的方法吗?
答案 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_
。