为什么在main中重新声明一个函数?

时间:2013-01-31 16:38:00

标签: c

我遇到一个处理菜单的程序的一些例子。

他在main函数之前声明了所有函数,因为我理解应该是,然后在main中提到了一个函数,它是一个void函数:

char get_choice(void);
char get_first(void);
int get_int(void);
void count(void);
int main(void)
{
    int choice;
    void count(void);
    while ( (choice = get_choice()) != 'q')
    {
        switch (choice)
        {
            case 'a' : printf("Buy low, sell high.\n");
                break;
            case 'b' : putchar('\a'); /* ANSI */
                break;
            case 'c' : count();
                break;
            default : printf("Program error!\n");
                break;
        }
    }
    printf("Bye.\n");

...(功能实施)

你能告诉我为什么这样吗? TNX

4 个答案:

答案 0 :(得分:6)

毫无理由,这只是原型的无意义重复。

答案 1 :(得分:4)

这些只是函数的声明而不是定义。不太确定为什么count函数被声明两次。声明只是告诉编译器有一些东西有这个名字。也许程序员忘了定义方法?

声明提供符号的基本属性:其类型和名称。定义提供了该符号的所有细节 - 如果它是一个函数,它的作用是什么;如果它是一个类,它有哪些领域和方法;如果它是变量,则存储该变量。

例如声明如下:

void count(void);

例如,定义如下:

void count(void){

......

}

答案 2 :(得分:3)

无关紧要 - 只要你的程序有意义。显然,如果它在main中,那么在实际的函数实现之前没有其他函数会“知道”函数原型是什么,这会产生影响。

我个人倾向于在调用之前实现该函数,这样就避免了将原型放在何处的问题[除非它进入头文件,在这种情况下往往会解决问题]。

答案 3 :(得分:1)

  你能告诉我为什么这样吗? TNX

没有为什么超出它是一个简单的错误;作者只是错过了多余的声明。只要两个声明都相同,它就不是问题(虽然它很丑陋,应该清理)。

FWIW,这就是为什么我总是定义函数,然后才能在同一个文件中使用它们。该定义算作一个声明,因此只需要担心一个原型。