我有一个关于 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);
这是正确的吗?
我的意思是这行得通,还是我根本不应该在头文件中的类似函数的宏中包含函数调用?
谢谢,如果这是一个非常愚蠢的问题,我提前道歉!
最佳答案
为什么不直接有一个初始化函数呢?通常,您不会使用很多全局变量,因此这不会有太大问题。对于局部变量,您无论如何都需要它。
对于原来的问题:宏只是文本替换。它在 C 编译器执行之前执行。将其视为编辑器中的高级文本替换,因此无论您在何处使用该宏,宏中的函数调用都将被插入。
一般来说,应避免使用类似函数的宏。内联函数通常是更好的方法。 Here不仅对于海湾合作委员会来说是一个很好的理由。
请注意,如果您希望在编译时以这种方式初始化变量,那么无论如何都行不通。正如我已经在对您的问题的评论中挑剔的那样,该函数实际上是在运行时调用的,而不是在编译时调用的。因此这个宏没有帮助。更糟糕的是:这甚至无法编译,因为编译器不知道何时调用该函数。请注意,C 没有像 c++ 和其他 OOPL 那样的构造函数/析构函数。
关于从头文件调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30462332/