模块化编程和函数原型

OCR*_*OCR 2 c c99

我正在这个(法国)网站上学习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;
}
Run Code Online (Sandbox Code Playgroud)

你能解释一下它的工作原理吗?

Wea*_*ane 5

这是因为编译器假设参数和返回值是int,它们是.如果您的函数返回了一个float值,它将无法正常工作.这就是使用函数原型的原因:声明函数(比如在头文件中),这样就可以正确使用它,而不需要构建此模块的编译器看到正文.正文可能位于另一个文件中,也可能位于库中.所以你应该有

#include <stdio.h>
#include <stdlib.h>

int triple(int nb);      // <-- function prototype

int main(int argc, char *argv[]) { ...
Run Code Online (Sandbox Code Playgroud)

在你的程序的顶部.但是没有必要把整个功能放在前面main.