视频: 6.7函数原型 2024
当你没有原型时会发生什么?和C编程中的任何东西一样,当你编译时,编译器或链接器会让你知道错误信息,或者程序运行不正常。这不是世界的尽头 - 不,不像编程一个军事机器人或设计一个新的金星捕蝇器的遗传密码。
基本功能; NO RETURN
#include void prompt(); / *函数原型* / int main(){int loop;字符输入[32];循环= 0; while(loop“);}
练习1 : 修改基本函数的源代码;不返回,从第3行注释掉原型。 - >
编译错误是美好的事情,令人愉快地准确但完全神秘。这里是Code:: Blocks生成的错误信息,虽然只有消息的相关部分:13警告:隐式声明函数'提示'23警告:'提示符'的冲突类型13警告:'提示符'的先前隐式声明在这里
源代码文件中第13行出现第一个警告,其中prompt ()函数,编译器告诉你,你正在使用一个没有原型的函数,正如错误信息所示,你隐式地声明了一个函数,这是一个禁止的,而不是一个全开的错误。 > <! - 2 - >
第二个警告发生在prompt()函数驻留在程序中,源代码在第23行。已经声明了mpt()(第11行),第二次使用可能与第一次使用冲突。
最后一个警告是对第13行调用函数的引用。简单地说:编译器不知道prompt()函数是怎么回事。你的代码编译,但运行是有风险的。
你可以得出结论:原型是你C代码中绝对必要的。这并不完全正确。您可以通过重新排序源代码中的函数来避免原型设计。只要函数在使用之前被列出,就不需要原型。
练习2
: 编辑练习10-3中的源代码。删除在第3行注释掉的函数原型。从源代码底部剪切并粘贴(移动)prompt()函数列出顶部,在main()函数的上方。保存,构建和运行。 避免函数原型显示练习2的解决方案。 避免函数原型
#include / *显示提示符* / void prompt(void){printf(“C: DOS>”);} int main(){int loop;字符输入[32];循环= 0; while(loop <5){prompt(); fgets(input,31,stdin);循环=循环+ 1;} return(0);}
首先编写main()函数,然后是其他函数,这样可以提高可读性,尽管您可以自由地将自己的函数放在第一位以避免原型设计。如果你不这样做,请记住其他程序员可能会这样做,所以当你看到它时不要感到惊讶。代码中的编译器错误消息::块之后有括号。括号中的注释引用
开关
或传统的命令行选项,可以检查特定的警告。例如,练习1中的错误消息全部读取:
11警告:函数'prompt'的隐式声明(-Wimplicit-function-declaration)20警告:'prompt'的类型冲突(默认启用) >