【问题标题】:Function prototype declared inside main - best practice?在 main 中声明的函数原型 - 最佳实践?
【发布时间】:2009-06-02 16:10:24
【问题描述】:

在主函数内部声明函数原型是一种好的风格吗?

我正在看一个 C 教程,我认为它已经过时了。但是,他们在 main.js 中声明了函数原型。我通常在 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);
}

【问题讨论】:

  • 我没有在您的代码中看到函数声明。你说主要功能?还是主要的“文件”?请注意,“stdio.h”是不对的,应该是 ...你能准确地说出你的问题吗?
  • @LB 函数原型是第6行(int getage();)
  • +1 表示问题。根据下面的回答,似乎在functions中声明函数原型不是一个好习惯,那么接下来的问题是,在main()函数中这样做有什么好处吗?

标签: c


【解决方案1】:

我个人会说“不”有几个原因:

  • 它使 main 的代码更长
  • 它可能会让新手误以为函数是由 main 限定的
  • 在实际代码中,我通常会将函数放在不同的编译单元中并#include 其头文件

【讨论】:

  • 4) 函数原型更难找到
【解决方案2】:

我还要说不,另外一个原因是,如果您开始在整个代码中使用显式声明,那么当您调用的函数突然更改其签名时,您肯定会得到未解析的外部变量。如果ONE头文件中有ONE声明,只需要在函数变化时修改ONE声明即可。

但是,我会说是,因为以下原因:如果您只是编写一个仅用于一次性使用的简单测试方法,即,如果您想快速测试某些东西,然后立即丢弃该函数。那么在你想打电话之前直接声明就很不错了。

对于生产代码 -> 不不不! :)

【讨论】:

    【解决方案3】:

    这不是一个好的风格。

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

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

    它使代码的可读性降低。对我来说,这种做法是代码异味的明显迹象。

    【讨论】:

      【解决方案4】:

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

      我同意尼尔的观点……

      【讨论】:

        【解决方案5】:

        由于我在这个小马表演中没有完成所需的圈数,我别无选择,只能发布此评论作为答案。

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

        另外,因为我正在制作它们:“stdio.h”vs 只是告诉预处理器在哪里搜索文件 stdio.h 的一种方式。同样,在大多数情况下,您会看到 stdio.h 被 而不是 "" 包围。但是,正如 Neil 的第 3 点所述,您自己的头文件将被“”包围。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-26
          • 1970-01-01
          相关资源
          最近更新 更多