警告:请告诉我,我是新手,并且不完全理解这段代码。
所以在这里的代码库中,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
的目的是什么?
答案 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);
}
这完全取决于背景。