我对C中的头文件有疑问。我需要初始化一个变量但是根据条件。为了评估我需要调用函数的条件,请参阅下面的代码:
我在header.h中有以下类似函数的宏,我需要调用function():
#define func_like_macro() do{\
if((function()==290))\
{\
macro(x, 0);\
}\
else\
{\
macro(x, 1);\
}\
macro(w, 1);\
macro(z, 1);\
}while(0);
这是对的吗?
我的意思是这会工作,还是不应该在头文件中的函数式宏中包含函数调用?
谢谢,如果这是一个非常愚蠢的问题,我会事先道歉!
答案 0 :(得分:0)
为什么不只是有一个初始化函数?通常,您不会使用许多全局变量,因此这不会是一个大问题。对于局部变量,无论如何你都需要它。
对于原始问题:宏只是文本替换。在 C编译器执行之前执行。在编辑器中将其视为高级文本替换,因此无论您使用该宏,都将插入宏中的函数调用。
通常,应避免使用类似函数的宏。 inline
函数通常是一种更好的方法。 Here不仅对gcc来说是一个很好的理由。
请注意,如果您打算在编译时以这种方式初始化变量,则无论如何都无法正常工作。正如我在对您的问题的评论中已经选择的那样,该函数实际上是在运行时调用的,而不是在编译时调用的。因此这个宏无济于事。更糟糕的是:这甚至都不会编译,因为编译器不知道何时调用该函数。请注意,C没有构造函数/析构函数,如c ++和其他OOPL。