为什么可以调用稍后在C中声明的函数?

xia*_*oyi 3 c

我有这个小代码来演示它:

#include "stdio.h"

int main() {
    int a = testfunc();  // declared later
    printf("%d", a);
    return 0;
}

int testfunc() {
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

它编译时没有错误,输出1正如预期的那样.

请参阅操作:http://ideone.com/WRF94E

为什么没有错误?它是C规范的一部分还是编译器相关的东西?

Raz*_*van 5

函数testfunc()是隐式声明的.编译器无法执行任何签名检查,因此您可能会遇到运行时错误,以防您无法以核心方式调用它.

这是C规范的一部分.但C规范中的建议是在当前文件的开头或头文件中声明您计划实现和使用的所有函数.