一世轻尘 发表于 2020-12-20 09:56:10

这个警告为啥?

本帖最后由 一世轻尘 于 2020-12-20 09:59 编辑

#include<stdio.h>
#include<conio.h>
extern int m=100;
int main()
{
        void print();
       
        for(int i=0;i<15;i++)
          print();
        getch();   
}

void print()
{
        static int x=1000;
        printf("x is %d,m is %d\n",x,m);
        x++,m++;
}
gcc编译{:10_254:}

jackz007 发表于 2020-12-20 10:43:17

本帖最后由 jackz007 于 2020-12-20 10:45 编辑

      这一句
extern int m=100;
      改为
int m=100;
      "extern" 的意思是这个变量来自其它的源代码文件。在使用多个源代码文件编程时才有用。

一世轻尘 发表于 2020-12-20 10:55:20

jackz007 发表于 2020-12-20 10:43
这一句

      改为


可是好像只有gcc编译器不能,而且我书上说是可以这样,而且我上网查了一下也是一样。听说vc编译就不会警告

jackz007 发表于 2020-12-20 11:07:41

一世轻尘 发表于 2020-12-20 10:55
可是好像只有gcc编译器不能,而且我书上说是可以这样,而且我上网查了一下也是一样。听说vc编译就不会警 ...

      请参考这一篇文章,说得比较得体
      https://www.jianshu.com/p/111dcd1c0201

一世轻尘 发表于 2020-12-20 11:11:38

jackz007 发表于 2020-12-20 11:07
请参考这一篇文章,说得比较得体
      https://www.jianshu.com/p/111dcd1c0201

可是我在函数外定义且初始化了,为啥会警告呢?

一世轻尘 发表于 2020-12-20 11:12:51

jackz007 发表于 2020-12-20 11:07
请参考这一篇文章,说得比较得体
      https://www.jianshu.com/p/111dcd1c0201

编译器的问题吗

jackz007 发表于 2020-12-20 11:23:11

一世轻尘 发表于 2020-12-20 11:12
编译器的问题吗

      编译器没有任何问题,是你自己的问题,因为,没有人这么定义变量,你这是在声明,而不是在定义变量,你的这种写法,编译器不会为 m 分配内存空间,而按照你的预期,是必须要分配到的,这就是你代码的问题所在。
页: [1]
查看完整版本: 这个警告为啥?