功能在C中的顺序

Que*_*ouf 3 c

为什么我的代码有效?我在声明它之前调用函数generateNumber,并且我没有在文件的开头设置原型,所以通常它不应该工作,是吗?

这是我的代码:

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


int main(int argc, const char * argv[]) {
    int max = 100;
    int min = 1;
    int mysteryNumber = generateNumber(min, max);
    int enteredNumber = min-1;
    do{
        printf("Enter a number !\n");
        scanf("%d", &enteredNumber);
        if (enteredNumber > mysteryNumber) {
            printf("It's less !");
        }else if(enteredNumber < mysteryNumber){
            printf("It's more !");
        }
    }while (enteredNumber != mysteryNumber);
    printf("Congratulations, the mystery number was %d \n", mysteryNumber);
    return 0;
}

int generateNumber(int min, int max){
    srand(time(NULL));
    return (rand() % (max - min + 1)) + min;
}
Run Code Online (Sandbox Code Playgroud)

谢谢提前!

das*_*ght 5

令人惊讶的是,这是实际应该与旧编译器一起使用的极少数情况之一- 特别是在C99之前的编译器.不过,你不应该这样做:int在C99中删除了隐式,因为它使代码变得脆弱.

当一个函数缺少原型时,旧的C编译器常常假设它的所有参数都与你传递的表达式类型相匹配,并且它们的返回类型是int.您的函数恰好符合此描述:您传递两个整数,并将返回值视为int.