我有一些旧的C程序需要维护。对于具有完全相同参数的一些函数(至少10个),程序员使用宏来避免一次又一次地键入相同的参数。这是宏定义:
#define FUNC_DECL(foo) int foo(int p1, int p2, ....)
然后,如果我想用相同的参数定义函数,我只需要输入:
FUNC_DECL(func1)
除了避免多次输入相同参数的繁琐工作外,这种实现还有其他优点吗?
这种实现让我有点困惑。它还有其他缺点吗?
这种实施方式是好的吗?
答案 0 :(得分:4)
正如我在主要问题的评论中所指出的,使用宏来声明具有相同参数列表的函数的优点是它确保定义 do 具有相同的参数列表。
主要的缺点是它看起来不像普通的C,所以阅读代码的人必须搜索更多的代码来弄清楚它的含义。
总的来说,我不喜欢那种基于宏的方案,但偶尔也有足够的理由使用它 - 这可能是一个边缘的例子。
至少有十个具有相同参数的函数。目前,每个功能只有3个参数。
哦,只有3个参数?没有借口使用宏 - 我认为这是10个参数。清晰度更重要。我不认为使用宏代码会更清晰。您需要更改10个函数以使用4个参数而不是3个参数的机会相当有限 - 并且您必须更改代码以使用额外参数。打字的节省是不相关的;节省用于宏观意义的时间是相关的。并且第一个不得不对代码进行拼图的人将花费更长时间来做这件事,而不是保存输入函数声明 - 即使你在打字时狩猎和啄食。
远离它 - 用它的头!清除宏。让你的代码再次开心。
答案 1 :(得分:1)
#define
是一种文本处理器。因此,无论是编写完整的函数声明还是使用预处理器,两者都会以相似的执行时间执行相同的操作。使用#define
使程序可读/简短并且根本不影响最终结果,但更多的#define
意味着更多的编译时间而不是其他任何东西。但一般来说,程序的使用多于编译。因此,#define
的使用根本不会妨碍您的生产环境。