在C中不使用函数原型有什么好处吗?

时间:2009-06-03 19:43:37

标签: c

我正在使用一些不包含某类函数的函数原型的C代码。不使用函数原型有什么好处吗?这些函数从不相互调用,也没有参数。代码变化很大,所以也许它只需要少一行来编辑?

9 个答案:

答案 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风险。