我正在这个(法国)网站上学习C:http://openclassrooms.com/courses/apprenez-a-programmer-en-c我在关于模块化编程的章节中说:
因为订单在这里具有真正的重要性:如果您将功能放在源代码中的main之前,那么您的计算机已经读取并知道它。当您打电话给该功能时,计算机将知道该功能并知道去哪里获得它。
但是,如果您将功能放在main之后,它将无法工作,因为计算机还不知道该功能。试试看吧!
我尝试将我的函数放在main函数之后,如下面的代码所示,但我的代码可以工作:
#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;
}
你能解释一下它为什么会起作用吗?
答案 0 :(得分:5)
这是因为编译器假定参数和返回值是int
,它们是。如果您的函数返回float
值,则无法正常工作。这就是使用函数原型的原因:声明函数(比如在头文件中),这样就可以正确使用它,而不需要构建此模块的编译器看到正文。正文可能位于另一个文件中,也可能位于库中。所以你应该
#include <stdio.h>
#include <stdlib.h>
int triple(int nb); // <-- function prototype
int main(int argc, char *argv[]) { ...
位于程序的顶部。但是没有必要将整个函数放在main
之前。
答案 1 :(得分:1)
您的代码可能是根据较旧的C标准编译的,该标准并不需要原型。相反,它假设它所看到的任何未声明的函数接受它传递的任何参数,并返回int
。
答案 2 :(得分:0)
如果您使用警告选项(-Wall)进行编译(您应该始终这样做),那么您将看到编译器通过为其创建隐式声明来猜测函数是否存在。
通常你不希望编译器猜测你的函数声明,因为它可能会弄错它们。保持安全,并提前声明您的功能。
答案 3 :(得分:-2)
程序不包含函数原型声明。 。 应该有一个:
int triple(int);