这是一个头文件,
// a.h
#ifndef _A_H_
#define _A_H_
#ifndef MACRO_FUNC
#define MACRO_FUNC(X, Y) (X * Y + X - Y)
#endif
#endif
上面的代码是我如何判断宏函数MACRO_FUNC
是否定义的。这是正确的方法吗?
是的,#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)
的原因不清楚,会发生什么。
是的,这是正确的方法。确保使用您自己的实现的另一种方法是首先取消定义任何先前的定义:
#ifdef MACRO_FUNC
# undef MACRO_FUNC
#endif
#define MACRO_FUNC(X, Y) (X * Y + X - Y)
这是你所做的正确方式
是的,由于宏是由预处理器评估的,因此您需要使用预处理器指令#ifdef
或#ifndef
检查是否存在。
是的,这是您检查宏是否已定义的方式。
请注意,以 开头的标识符_[A-Z]
是为实现保留的。例如更改_A_H_
。A_H_