首页 > C/C++语言 > C/C++基本语法 > 在C语言中声明函数之前调用函数会发生什么?
2022
10-14

在C语言中声明函数之前调用函数会发生什么?

在C语言中声明函数之前调用函数会发生什么?

 

在C语言中,如果函数在声明之前被调用,编译器将假定函数的返回类型为int。

例如,以下程序在编译中失败。

 

#include <stdio.h>

int main(void)

{

    // Note that fun() is not declared

    printf("%c\n", fun());

    return 0;

}

 

char fun()

{

   return 'G';

}

如果上面代码中的函数char-fun()稍后被定义为main()和调用语句,那么它将无法成功编译。因为编译器默认假定返回类型为“int”。在声明时,如果返回类型与int不匹配,则编译器将给出错误。

 

以下程序编译并运行良好,因为函数是在main()之前定义的。

 

#include <stdio.h>

 

int fun()

{

   return 10;

}

 

int main(void)

{

    // Note the function fun() is declared

    printf("%d\n", fun());

    return 0;

}

参数呢?编译器不假设参数。因此,当函数应用于某些参数时,编译器将无法对参数类型和arity执行编译时检查。这可能会导致问题。例如,以下程序在GCC中编译良好,并生成垃圾值作为输出。

 

#include <stdio.h>

 

int main (void)

{

    printf("%d", sum(10, 5));

    return 0;

}

int sum (int b, int c, int a)

{

    return (a+b+c);

}

存在这样一种误解,即编译器假定输入参数也是int。如果编译器假设输入参数是int,那么上述程序在编译时就会失败。

通常建议在使用函数之前声明函数,这样在程序运行时我们就不会看到任何意外


留下一个回复