从头文件调用函数

标签 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);

这是正确的吗?

我的意思是这行得通,还是我根本不应该在头文件中的类似函数的宏中包含函数调用?

谢谢,如果这是一个非常愚蠢的问题,我提前道歉!

最佳答案

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

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

一般来说,应避免使用类似函数的宏。内联函数通常是更好的方法。 Here不仅对于海湾合作委员会来说是一个很好的理由。

请注意,如果您希望在编译时以这种方式初始化变量,那么无论如何都行不通。正如我已经在对您的问题的评论中挑剔的那样,该函数实际上是在运行时调用的,而不是在编译时调用的。因此这个宏没有帮助。更糟糕的是:这甚至无法编译,因为编译器不知道何时调用该函数。请注意,C 没有像 c++ 和其他 OOPL 那样的构造函数/析构函数。

关于从头文件调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30462332/

相关文章:

c - 当你在 C 中初始化一个垃圾值时会发生什么?

c - 按整数值进行位移位

java - 与Java中可用的Scala 2.10宏相比

xml - 如何处理excel宏中缺少的xml节点

scala - 如何在 scala 宏内部从带有类型参数的类型获取类型参数?

C语言字符错误

c - 一个 friend 给我发了一段我不明白的片段。这是如何运作的?

function - 从 Access 数据库中的数字获取月份名称?

javascript - 为什么使用 Function 构造函数创建的 Javascript 函数无法访问在其外部定义的其他函数?

python - 如何修复 "NameError: name method-name is not defined"?