【编程初入门】 看C Primer Plus 看到刚开头函数定义的时候有个小问题,感觉函数有重复定义

本人自学编程还没多久,遇到问题比较初级,希望各位路过的大神多多指点,不喜勿喷哈。
代码如下:

/*在一个文件中使用两个函数*/
#include <stdio.h>
void butler (void);  /* ISO/ANSI C函数原型*/
int main (void)
{
    printf("I will summon the butler function.\n");
    butler();
    printf("Yes. Bring me some tea and writeable CD-ROMS.\n");
    return 0;
}

void butler (void) /*   函数定义的开始   */
{
    printf("You rang, sir?\n")
}

我的问题是:

clipboard.png

void butler (void);  /* ISO/ANSI C函数原型*/

究竟这一行代码起到什么作用? 以前学过一点JAVA和python 印象中里面没有类似这样的东西

阅读 3.7k
2 个回答

C 语言对函数要求 先声明后定义再调用

void butler (void); /* ISO/ANSI C函数原型*/ 这个是声明,告知编译器我需要使用该函数

void butler (void) /*   函数定义的开始   */
{
    printf("You rang, sir?\n");
}

这个是定义

但是如果调用发生在定义之后,那么可以省略声明这一步。

/*在一个文件中使用两个函数*/
#include <stdio.h>
void butler (void) /*   函数定义的开始   */
{
    printf("You rang, sir?\n");
}
int main (void)
{
    printf("I will summon the butler function.\n");
    butler();
    printf("Yes. Bring me some tea and writeable CD-ROMS.\n");
    return 0;
}

但是在多文件中函数互相调用、库函数之类的情况下,函数如果没有声明,编译器会报错。

前者是声明,后者才是定义
声明是告诉编译器有这样一个东西,定义是告诉编译器这个东西具体长什么样。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进