我遇到一个处理菜单的程序的一些例子。
他在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答案 0 :(得分:6)
毫无理由,这只是原型的无意义重复。
答案 1 :(得分:4)
这些只是函数的声明而不是定义。不太确定为什么count函数被声明两次。声明只是告诉编译器有一些东西有这个名字。也许程序员忘了定义方法?
声明提供符号的基本属性:其类型和名称。定义提供了该符号的所有细节 - 如果它是一个函数,它的作用是什么;如果它是一个类,它有哪些领域和方法;如果它是变量,则存储该变量。
例如声明如下:
void count(void);
例如,定义如下:
void count(void){
......
}
答案 2 :(得分:3)
无关紧要 - 只要你的程序有意义。显然,如果它在main中,那么在实际的函数实现之前没有其他函数会“知道”函数原型是什么,这会产生影响。
我个人倾向于在调用之前实现该函数,这样就避免了将原型放在何处的问题[除非它进入头文件,在这种情况下往往会解决问题]。
答案 3 :(得分:1)
你能告诉我为什么这样吗? TNX
没有为什么超出它是一个简单的错误;作者只是错过了多余的声明。只要两个声明都相同,它就不是问题(虽然它很丑陋,应该清理)。
FWIW,这就是为什么我总是定义函数,然后才能在同一个文件中使用它们。该定义算作一个声明,因此只需要担心一个原型。