解决头文件中定义全局变量MSVCGNU编译器出现重定义问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决头文件中定义全局变量MSVCGNU编译器出现重定义问题相关的知识,希望对你有一定的参考价值。

 有时候我们经常碰到这样的事情,想定义某个类的静态成员,在头文件中定义该成员或者全局变量,头文件又同时被多个文件引用到,链接的时候则会出现,重定义,但是又不想在cpp文件中定义,现有一种方法可以解决此问题,直接上代码

#if defined(_MSC_VER )
__declspec(selectany)
#elif defined(__GNUC__)
__attribute__((weak))
#else 
#error "unknown complier"
#endif
int a=1;

如果不同的编译器用不同方式,大体都是解决头文件重定义问题,对于clang编译器不知是否兼容GNU这种定义方式,待测。具体原理百度关键字就有了。

以上是关于解决头文件中定义全局变量MSVCGNU编译器出现重定义问题的主要内容,如果未能解决你的问题,请参考以下文章

fatal error LNK1169:找到一个或多个重定义的符号

C++找到一个或多个多重定义的符号

VC中编译出现error LNK2005:xx already defined in xxx.obj问题解决。

编译C程序出现多重定义,怎么解决?

C语言可以在不同的源文件中定义相同名字的全局变量吗

c语言一个结构体如何在多个源文件里面调用?