我正在使用一些不包含某类函数的函数原型的C代码。不使用函数原型有什么好处吗?这些函数从不相互调用,也没有参数。代码变化很大,所以也许它只需要少一行来编辑?
答案 0 :(得分:5)
函数原型用于外部函数。我的规则是每个非静态函数都获得一个原型,除了main()。我使用'-Wmissing-prototypes'GCC选项。通常它捕获的是我忘记声明一个静态函数。
另外,用C语言声明函数:
void function(void);
而不是这样:
void function();
因为第二种方式意味着该函数采用了未指定数量的参数,这不是您想要的(它与ANSI C之前的兼容性)。
答案 1 :(得分:4)
否强>
我不知道在严格的情况下它是否合法。
答案 2 :(得分:2)
答案 3 :(得分:1)
“所以也许它只需要少一行来编辑?”
在这种情况下,这是唯一可能的“好处”,即懒惰。
答案 4 :(得分:1)
更少的代码改变是我能想到的唯一“优势”。通常这只是'懒惰'
无论如何,缺点更为显着:你必须在一个源文件中拥有所有功能;源文件中的函数顺序现在很重要,等等。另外,其他人会看到/为头文件混淆...最好的做法是.c和.h它。
答案 5 :(得分:0)
我看到的唯一好处是,每次更改函数本身时都不必更新函数原型。
答案 6 :(得分:0)
代码变化很大,所以也许就是这样 只编辑一行?
我猜这就是原因。我想不出任何其他原因 - 编译速度(实际上)也没有改变,执行时间也没有,只是更新代码的时间。
答案 7 :(得分:0)
我能想到的唯一优势是它可以节省您将函数的第一行复制并粘贴到.c或.h文件的原型部分。
对于其他文件中引用的函数,您别无选择,只能拥有原型。
对于具有文件范围的函数(即静态函数),将所有原型放在文件顶部的块中是有用的。这样,任何静态函数都可以从该文件中的任何位置调用。如果没有原型,函数A()只能在代码中声明B()之前调用函数B()。
此外,如果范围内没有原型,一些编译器会对参数做出不安全的假设。
此外,如果您编写的代码必须符合MISRA-C,则要求所有函数在范围内具有原型。
我还提倡确保原型包含参数名称,而不仅仅是它们的类型(这是合法的),因为它只是通过查看原型来阐明参数的用途。
答案 8 :(得分:0)
键入的次数较少,因此可能会降低您的RSI风险。