头文件用于声明而不是定义

一.背景

  昨天脑袋有点发蒙,在.h中定义了一个全局变量CCriticalSection g_CriticalSection;然后就报了若干个LNK2005:重复定义的链接错误(单个cpp文件单独编译时不会发现问题,而链接时把把信息汇总,就会发现问题咯).原因是不应该在头文件中定义全局变量.

  正确定义全局变量的方法是,在一个cpp中定义全局变量,然后在别的用到的cpp文件中使用extern来找到该变量.

  参考文章:error:LNK2005 已经在*.obj中定义

二.延伸

  后来查了下,在<C++ Primer>中有一条指导原则--头文件用于声明而不是定义.

    比如 extern int i =10; //虽然声明为extern,但是它是初始化式,表明是一个定义.若写成extern int i;则是一种声明咯.

    再如 double f; //不加extern,自然是声明了.

  不过,存在这一原则存在3个例外,头文件可以定义类, 值在编译时就已知的const对象和inline函数.

原文链接: https://www.cnblogs.com/Stephen-Qin/p/12672610.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    头文件用于声明而不是定义

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/341260

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午12:59
下一篇 2023年3月2日 上午12:59

相关推荐