从头文件中调用函数

时间:2015-05-26 15:06:33

标签: c function macros header

我对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);

这是对的吗?

我的意思是这会工作,还是不应该在头文件中的函数式宏中包含函数调用?

谢谢,如果这是一个非常愚蠢的问题,我会事先道歉!

1 个答案:

答案 0 :(得分:0)

为什么不只是有一个初始化函数?通常,您不会使用许多全局变量,因此这不会是一个大问题。对于局部变量,无论如何你都需要它。

对于原始问题:宏只是文本替换。在 C编译器执行之前执行。在编辑器中将其视为高级文本替换,因此无论您使用该宏,都将插入宏中的函数调用。

通常,应避免使用类似函数的宏。 inline函数通常是一种更好的方法。 Here不仅对gcc来说是一个很好的理由。

请注意,如果您打算在编译时以这种方式初始化变量,则无论如何都无法正常工作。正如我在对您的问题的评论中已经选择的那样,该函数实际上是在运行时调用的,而不是在编译时调用的。因此这个宏无济于事。更糟糕的是:这甚至都不会编译,因为编译器不知道何时调用该函数。请注意,C没有构造函数/析构函数,如c ++和其他OOPL。