问题

  1. #include <stdio.h>
  2. float d();
  3. int main(void)
  4. {
  5. d(1,2);
  6. return 0;
  7. }
  8. float d(int a)
  9. {
  10. }

能通过编译!!!

总结

函数三要素
1、函数名称
2、返回值类型
3、参数列表
函数调用前必须声明或定义,一般是函数声明,函数声明的作用就是根据函数名校验函数三要素是否一致。准确的说,校验函数调用和函数定义中,返回值类型和参数类型及个数是否一致。
C语言,允许函数声明不写明参数,如上d函数。在这种情况下,编译阶段,将不会对函数调用和函数定义的参数表进行校验。也就是说,在函数调用和函数定义中的参数表,可以随便写,也能通过编译。在这种情况下通过编译,是很危险的。
解决这个问题最好办法是:函数声明一定要明确参数列表,如果不需要参数,注明void。