A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM_lpn 中级黑马   /  2014-12-8 22:51  /  3991 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. //#include <stdio.h>

  2. int main()
  3. {
  4.          printf("5555555\n");
  5.          return 0;
  6. }
复制代码

//此上段代码  编译时有个没有包含头文件的警告  头文件指函数的声明
  1. #include <stdio.h>
  2. //void min();
  3. int main()
  4. {
  5.          printf("5555555\n");
  6.          min();
  7.          return 0;
  8. }

  9. void min()
  10. {

  11. }
复制代码

//此上段代码  也是注释掉了函数的声明  而编译时就报错了

同时省略了函数的声明   为什么编译时出现的问题不一样呢

6 个回复

倒序浏览
第一个注释掉了头文件stdio.h;而第二个注释掉函数声明;编译器编译从上往下开始编译,没发现没有声明函数;你如果把函数定义放前面,系统就不会报错了。
回复 使用道具 举报
chasedream 发表于 2014-12-9 00:16
第一个注释掉了头文件stdio.h;而第二个注释掉函数声明;编译器编译从上往下开始编译,没发现没有声明函数; ...

或者把声明写上就不会报错
回复 使用道具 举报
chasedream 回答的挺好,
回复 使用道具 举报
第一个报的是头文件错误,第二个报的是函数声明错误。
如果函数定义在调用之前,则不用声明,
如果函数定义在调用之后,则必须先声明,否则会报错误
回复 使用道具 举报
  1. //#include <stdio.h>

  2. int main()
  3. {
  4.         printf("OK");
  5.         return 0;
  6. }
复制代码

testStdio.c


注释掉stdio.h 之后 编译出以下警告 ,警告就是意味着可以运行
cc testStdio.c -o testStdio
:
testStdio.c:5:2: warning: implicitly declaring library function 'printf' with
      type 'int (const char *, ...)'
        printf("OK");
        ^
testStdio.c:5:2: note: please include the header <stdio.h> or explicitly provide
      a declaration for 'printf'
1 warning generated.

生成了可执行文件  testStdio
./testStdio 运行
XXX-fafda:cprogram keycola$ ./testStdio
OK

运行 还是可以的

加上头文件,编译遇到之后就会去找那个函数的地址

而用户自定义的函数,
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         printf("OK");
  5.         test();
  6.         return 0;
  7. }

  8. void test();
  9. {
  10.         printf("\n test\n");
  11. }
复制代码


testStdio.c:6:2: warning: implicit declaration of function 'test' is invalid in
      C99 [-Wimplicit-function-declaration]
        test();
        ^
testStdio.c:10:6: error: conflicting types for 'test'
void test();
     ^
testStdio.c:6:2: note: previous implicit declaration is here
        test();
        ^
testStdio.c:11:1: error: expected identifier or '('
{
^
1 warning and 2 errors generated.

直接出错误了,编译是从第一行到最后一行,所以自定义函数 要在 使用这个函数的上面,或者声明
回复 使用道具 举报
看看视频吧。。。会对你有帮助的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马