当定义写在源代码的末尾时,为什么需要用C语言对数据和函数进行“声明”?
考虑下面的“ C”代码: #include<stdio.h> main() { printf("func:%d",Func_i()); } Func_i() { int i=3; return i; } Func_i()是在源代码的末尾定义的,并且在main()。中使用之前没有提供声明。在编译器Func_i()进入的时候main(),它出来main()并找到了Func_i()。编译器会以某种方式找到返回的值Func_i()并将其提供给printf()。我也知道,编译器无法找到返回类型的Func_i()。它在默认情况下需要(猜测?)的返回类型的Func_i()是int。就是说,如果代码具有float Func_i(),编译器将给出错误:的类型冲突Func_i()。 从上面的讨论中我们看到: 编译器可以找到由返回的值Func_i()。 如果编译器可以找到返回的值Func_i()由未来的出来main()和向下搜索源代码,那么为什么就不能找到Func_i(),它的类型明确提及。 编译器必须知道它Func_i()是float类型的-这就是为什么它会产生冲突类型的错误的原因。 如果编译器知道该Func_i类型为float类型,那么为什么仍假定它Func_i()为int类型,并给出类型冲突的错误?为什么不强制使它Func_i()成为float类型。 我对变量声明也有同样的疑问。考虑下面的“ C”代码: #include<stdio.h> main() { /* [extern int Data_i;]--omitted the declaration */ printf("func:%d and Var:%d",Func_i(),Data_i); } Func_i() { int i=3; return i; } int Data_i=4; 编译器给出错误:未声明“ Data_i”(此函数中的首次使用)。 当编译器看到 Func_i(),它会进入源代码以查找Func_()返回的值。为什么编译器不能对变量Data_i做同样的事情? …