• 已解决 69181 个问题
  • 已帮助 5969 位优秀工程师

变量的引用与头文件问题

liuxiaofei126 2020-01-02 浏览量:428

在C中,全局变量是作用于整个程序,比如在头文件声明int a;只要其他的.C文件调用这个头文件就可以,为啥还需要加extern呢,还有函数调用

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:8
  • extern不加的话,另外一个c文件会当成新的变量,所以加了之后编译器知道其他c文件还有一个共用的a

huihui163 回复了 yhj416606438:都添加头文件了, 回复

  • 这个问题刚开始也遇到过,其他c文件访问的话,必须加extern

  • 注意声明和定义其实是两回事,严格的说来

    extern int a; // 这只是声明有一个变量a

    extern int a=0; // 这是声明、定义一个变量a

    一般在头文件中使用

    extern int a; // 这仅仅是声明了有全局变量a

    然后再某个具体的C文件中再有对应的

    int a; // 这里是定义了全局变量a,之后就可以使用啦。

    这样,在多个C语言都引用同一个头文件时,不会出现重复定义的问题,因为

    extern int a; // 仅仅是声明,定义则在某个具体的c文件中。


    ----------------

    所以,如果全局变量,只会有一个c文件引用秒,则里面的全局变量可不加extern(但对应的c文件中就不能再有该变量的定义,因为已经定义过啦),否则建议都加上。


    需要注意对于函数来说没有这个需求。


    由此比较规范的处理就是在H中声明全局变量都加上extern,然后再在c文件中定义(只能有一个c文件中出现定义)。

  • 变量定义在C文件在,在h文件中用extern进行声明,不要在h文件中定义,会有变量冲突的问题。每引用一次头文件就会定义一次的

  • 定义应该是在C文件中的,在C文件中,int a;

    之后,在头文件中,extern int a;这样在inculde这个头文件的C文件中都可以使用这个变量a了

  • 你需要搞东西啊,
    定义变量和 定义并初始化变量的区别,这个问题就可以理解了

  • 不加extern,就是定义,加了就是声明,头文件一般不定义变量,否则多个源文件引用这个头文件,就相当于多次定义了

  • 这个是因为全局变量可能在其他文件中定义,加extern就是声明,表示可以在其他文件中使用

变量的引用与头文件问题