C 模块化编程和函数原型
我在这个(法语)网站上学习C语言:我在模块化编程一章中说: 因为顺序在这里具有真正的重要性:如果在源代码中将函数放在main之前,那么您的计算机已经阅读并知道了它。当您调用该函数时,计算机将知道该函数并知道从何处获取该函数 但是,如果将函数放在main之后,它将无法工作,因为计算机还不知道该函数。试试看 我尝试将我的函数放在主函数之后,如下代码所示,但我的代码仍然有效:C 模块化编程和函数原型,c,c99,C,C99,我在这个(法语)网站上学习C语言:我在模块化编程一章中说: 因为顺序在这里具有真正的重要性:如果在源代码中将函数放在main之前,那么您的计算机已经阅读并知道了它。当您调用该函数时,计算机将知道该函数并知道从何处获取该函数 但是,如果将函数放在main之后,它将无法工作,因为计算机还不知道该函数。试试看 我尝试将我的函数放在主函数之后,如下代码所示,但我的代码仍然有效: #include <stdio.h> #include <stdlib.h> int main(i
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int nbE = 0;
int nbM = 0;
printf("Nombre a tripler : ");
scanf("%d", &nbE);
nbM = triple(nbE);
printf("Le nombre triple de %d est %d", nbE, nbM);
return 0;
}
int triple(int nb)
{
return nb * 3;
}
#包括
#包括
int main(int argc,char*argv[])
{
int-nbE=0;
int-nbM=0;
printf(“名为三元组:”);
scanf(“%d”&nbE);
nbM=三重(nbE);
printf(“名义三重德%d est%d”,nbE,nbM);
返回0;
}
整数三元组(整数nb)
{
返回nb*3;
}
您能解释一下它为什么工作吗?您的代码可能是根据旧的C标准编译的,它不需要原型。相反,它假设它看到的任何未声明的函数调用它传递的任何参数,并返回
int
如果使用警告选项(-Wall)编译(您应该经常这样做),那么您将看到编译器通过为函数创建隐式声明来猜测函数的存在
通常,您不希望编译器猜测您的函数声明,因为这可能会使它们出错。保持安全,并始终提前声明您的函数 这是因为编译器假定参数和返回值是
int
,它们是。如果函数返回一个float
值,它将无法正常工作。这就是为什么要使用函数原型:声明函数(比如在头文件中),这样就可以正确使用函数,而不必让构建此模块的编译器看到函数体。正文可能位于另一个文件或库中。所以你应该
#include <stdio.h>
#include <stdlib.h>
int triple(int nb); // <-- function prototype
int main(int argc, char *argv[]) { ...
#包括
#包括
整数三元组(整数nb);// 程序不包含函数原型声明。
.
应该有一个:
int triple(int);