使用#define而不是创建函数有什么好处?

时间:2016-11-01 04:20:47

标签: c

警告:请告诉我,我是新手,并且不完全理解这段代码。

所以在这里的代码库中,https://github.com/huwan/mini-vtysh/blob/master/vtysh/vtysh.c不是仅仅创建函数,而是使用“DEFUNSH”作为函数的替代。 “DEFUNSH”的定义如下:

#define DEFUNSH(daemon, funcname, cmdname, cmdstr, helpstr) \
  int funcname (struct cmd_element *, struct vty *, int, char **); \
  struct cmd_element cmdname = \
  { \
    cmdstr, \
    funcname, \
    helpstr, \
    daemon \
  }; \
  int funcname \
  (struct cmd_element *self, struct vty *vty, int argc, char **argv)

我不太了解它的好处,对我而言,它只会让它更难阅读。使用#define的目的是什么?

2 个答案:

答案 0 :(得分:0)

宏声明了一个函数,定义了一个初始化的结构变量(包括一个指向刚声明的函数的指针),然后写入函数定义的开头。它使程序员不必编写大量的“锅炉板”。代码 - 标准化和令人兴奋的代码。

答案 1 :(得分:0)

在这种情况下,它不是风格问题 - 它是功能和宏的不同功能的问题。 #define d宏是一个简单的文本替换,其中包含:

#define FOO(x, y) x + y
FOO(2, 3)

在编译器看到完全相同的代码时,是:

2 + 3

在C中,结构和函数不能动态定义。这个特定的宏定义了一个具有给定名称的函数,这个函数不能由C中的函数完成。

在其他一些情况下,宏与功能是风格,品味和编码实践的问题。例如,有两个论点:

#define COMPUTE_IT(x, y, z) x * y * ( z - 1 )

int compute_it(int x, int y, int z) {
  return x * y * (z - 1);
}

这完全取决于背景。