C头文件中使用extern定义全局变量

关于C语言中extern关键词的使用

最近在头文件中使用extern定义全局变量时,出现如下报错:

  • keil51:

    *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
        SYMBOL:  SETPLACE
        MODULE:  common.obj (COMMON)
    
  • VC:

    main.obj : error LNK2001: unresolved external symbol _SetPalce
    Debug/extern_test.exe : fatal error LNK1120: 1 unresolved externals
    

解决方案

  • 方法一:用extern来声明:extern unsigned char SetPalce;这一句只是对变量i进行声明,在c文件中必须加上unsigned char SetPalce=0;进行定义
  • 方法二:声明和定义同时进行:extern unsigned char SetPalce=0;
  • 对于有很多c文件和头文件的程序,这个时候全局变量就必须在头文件中声明而不需要初始化,然后在c文件中定义(该初始化的要初始化)。如果只在头文件中定义,则编译的时候会出现重复定义的错误。如果只有头文件中声明而没有在c文件中定义就会出现没有定义有警告的情况

参考文章:https://www.cnblogs.com/hnrainll/archive/2011/01/23/1942411.html

你可能感兴趣的:(c/c++)