【发布时间】:2023-03-06 22:41:01
【问题描述】:
我有一些旧的 C 程序要维护。对于具有完全相同参数的某些函数(至少 10 个),程序员使用宏来避免一次又一次地键入相同的参数。这是宏定义:
#define FUNC_DECL(foo) int foo(int p1, int p2, ....)
然后,如果我想定义具有相同参数的函数,我只需要输入:
FUNC_DECL(func1)
除了避免多次输入相同参数的繁琐工作之外,这种实现还有其他优点吗?
这种实现让我有点困惑。它还有其他缺点吗?
这种实现方式好不好?
【问题讨论】:
-
优点是它确保定义 do 具有相同的参数列表。缺点是它看起来不像普通的 C。为什么不将这 10 个参数打包成一个结构类型(或几个),然后制作简单的函数接口呢?总的来说,我不喜欢那种基于宏的方案,但偶尔有足够的理由使用它——这可能是一个边缘例子。
-
至少有十个函数具有相同的参数。目前每个函数只有3个参数@JonathanLeffler
-
哦,只有3个参数?那时没有理由使用宏——我认为它是 10 个参数。清晰更重要。我不认为使用宏代码会更清晰。您需要更改 10 个函数以使用 4 个参数而不是 3 个参数的可能性非常有限——而且您必须更改代码才能使用额外的参数。带走它——带走它的脑袋!
-
我同意@JonathanLeffler 的分析,这是对宏的错误使用。这个问题可以通过简单的复制/粘贴轻松解决。以
int (int p1, int p2, int p3);开头。复制粘贴9次,填写函数名。它实际上比使用宏要少打字,而且它不会向读者隐藏信息。 -
恐怕你的解决方案不需要更少的打字。如果我使用宏,我也可以使用复制和粘贴。@user3386109