函数原型在main中声明 - 最佳实践?

时间:2009-06-02 16:10:25

标签: c

这是在主函数内部声明函数原型的好方法吗?

我正在看一个C教程,我认为已经过时了。但是,他们在main中声明了函数原型。我通常在主要之前宣布在外面。

#include <stdio.h>

int main ()
{
    char myname [30];
    int theage;
    int getage ();

    printf ("\nEnter your name:");
    gets (myname);
    theage = getage ();
    printf("\n AGE = %d and NAME = %s", theage, myname);
    return 0;
}

int getage ()
{
    int myage; /* local to only getage() */

    printf ("\nEnter your age: ");
    scanf ("%d",&myage);
    return (myage);
}

5 个答案:

答案 0 :(得分:16)

我个人会说“不”,原因如下:

  • 它使主要代码更长
  • 它可能会让新手感到困惑,认为该功能是由主要的
  • 作用的
  • 在实际代码中,我通常会将函数放在不同的编译单元中并#include其头文件

答案 1 :(得分:5)

我也会说“不”,如果你开始在整个代码中使用显式声明,当你调用的函数突然改变其签名时,你肯定会得到未解析的外部因素。如果在一个头文件中有一个声明,则只需在函数更改时更改一个声明。

但是,由于以下原因,我会说是的:如果您只是编写一个仅为一次性使用而编写的简单测试方法,即如果您想要快速测试某些内容,然后立即丢弃该功能。然后,只要在你想要打电话之前就输入一个声明就可以了。

对于生产代码 - &gt;不不不 ! :)

答案 2 :(得分:4)

这不是一种好的风格。

在开头声明本地函数原型或将它们移动到头文件。

函数原型(以及外部变量)几乎可以在c语言的任何地方声明。然而,仅仅因为它可能不应该没有理由写出意大利面风格C.

它使代码的可读性降低。对我来说,这种做法是代码嗅觉的明显标志。

答案 3 :(得分:1)

我认为这只是本教程的一个小例子......这就是你开始介绍函数时所做的......

我同意尼尔......

答案 4 :(得分:1)

由于我没有在这个小马表演中跳过所需数量的篮球,我别无选择,只能将此评论作为答案发布。

请记住,这只是一本书的摘录,而不是人们在生产环境中看到的那种代码。代码片段很好但不理想。尼尔给出了最好的答案,所以我给了他+1。如果你真的想知道它是如何在教程/教科书之外完成的,我会注意到他的第三点。

此外,我正在制作它们:“stdio.h”vs只是告诉预处理器在哪里搜索文件stdio.h的一种方式。同样,在大多数情况下,您会看到stdio.h被&lt;&gt;包围代替 ””。但是,正如Neil的第3点所提到的,你自己的头文件将被“”包围。