Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 模块化编程和函数原型_C_C99 - Fatal编程技术网

C 模块化编程和函数原型

C 模块化编程和函数原型,c,c99,C,C99,我在这个(法语)网站上学习C语言:我在模块化编程一章中说: 因为顺序在这里具有真正的重要性:如果在源代码中将函数放在main之前,那么您的计算机已经阅读并知道了它。当您调用该函数时,计算机将知道该函数并知道从何处获取该函数 但是,如果将函数放在main之后,它将无法工作,因为计算机还不知道该函数。试试看 我尝试将我的函数放在主函数之后,如下代码所示,但我的代码仍然有效: #include <stdio.h> #include <stdlib.h> int main(i

我在这个(法语)网站上学习C语言:我在模块化编程一章中说:

因为顺序在这里具有真正的重要性:如果在源代码中将函数放在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;
}
#包括
#包括
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);