从头文件调用函数
call a function from a header file
我对 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 编译器执行 之前 执行。将其视为编辑器中的高级文本替换,因此无论您在何处使用该宏,都会插入宏中的函数调用。
一般来说,应该避免使用类似函数的宏。 inline
函数通常是更好的方法。 Here 不仅对 gcc 来说是一个很好的理由。
请注意,如果您打算在编译时以这种方式初始化变量,则无论如何都行不通。正如我已经在对你的问题的评论中挑剔的那样,该函数实际上是在 运行 时调用的,而不是在编译时调用的。因此这个宏将无济于事。更糟的是:这甚至无法编译,因为编译器不知道何时调用该函数。请注意,C 没有像 c++ 和其他 OOPL 那样的 constructors/destructors。
我对 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 编译器执行 之前 执行。将其视为编辑器中的高级文本替换,因此无论您在何处使用该宏,都会插入宏中的函数调用。
一般来说,应该避免使用类似函数的宏。 inline
函数通常是更好的方法。 Here 不仅对 gcc 来说是一个很好的理由。
请注意,如果您打算在编译时以这种方式初始化变量,则无论如何都行不通。正如我已经在对你的问题的评论中挑剔的那样,该函数实际上是在 运行 时调用的,而不是在编译时调用的。因此这个宏将无济于事。更糟的是:这甚至无法编译,因为编译器不知道何时调用该函数。请注意,C 没有像 c++ 和其他 OOPL 那样的 constructors/destructors。