如果有许多具有相同参数的函数,我应该使用宏来避免多次键入参数吗?

时间:2016-08-16 04:28:32

标签: c function macros

我有一些旧的C程序需要维护。对于具有完全相同参数的一些函数(至少10个),程序员使用宏来避免一次又一次地键入相同的参数。这是宏定义:

#define FUNC_DECL(foo) int foo(int p1, int p2, ....)

然后,如果我想用相同的参数定义函数,我只需要输入:

FUNC_DECL(func1) 

除了避免多次输入相同参数的繁琐工作外,这种实现还有其他优点吗?

这种实现让我有点困惑。它还有其他缺点吗?

这种实施方式是好的吗?

2 个答案:

答案 0 :(得分:4)

正如我在主要问题的评论中所指出的,使用宏来声明具有相同参数列表的函数的优点是它确保定义 do 具有相同的参数列表。

主要的缺点是它看起来不像普通的C,所以阅读代码的人必须搜索更多的代码来弄清楚它的含义。

总的来说,我不喜欢那种基于宏的方案,但偶尔也有足够的理由使用它 - 这可能是一个边缘的例子。

  

至少有十个具有相同参数的函数。目前,每个功能只有3个参数。

哦,只有3个参数?没有借口使用宏 - 我认为这是10个参数。清晰度更重要。我不认为使用宏代码会更清晰。您需要更改10个函数以使用4个参数而不是3个参数的机会相当有限 - 并且您必须更改代码以使用额外参数。打字的节省是不相关的;节省用于宏观意义的时间是相关的。并且第一个不得不对代码进行拼图的人将花费更长时间来做这件事,而不是保存输入函数声明 - 即使你在打字时狩猎和啄食。

远离它 - 用它的头!清除宏。让你的代码再次开心。

答案 1 :(得分:1)

#define是一种文本处理器。因此,无论是编写完整的函数声明还是使用预处理器,两者都会以相似的执行时间执行相同的操作。使用#define使程序可读/简短并且根本不影响最终结果,但更多的#define意味着更多的编译时间而不是其他任何东西。但一般来说,程序的使用多于编译。因此,#define的使用根本不会妨碍您的生产环境。