a.cpp
const unsigned char whatever[123] = { /* ... */ };
a.h
extern const unsigned char whatever[123];
b.cpp
#include "a.h"
unsigned char x = whatever[0];
// error: undefined reference to 'whatever'
为什么我会收到未定义的参考错误?如果没有const
,错误消失。
如何在多个翻译单元之间共享常量数组?
这是人们遇到的怪癖之一,只需定义一个 a.h 头文件,该文件声明一个 123 个字符的 const 数组,并为其分配外部链接即可。当它包含在 b.cpp 文件中时,您基本上是在向编译器承诺它将在其他一些翻译单元中找到。
但是,每一个const
变量有一个黑暗的秘密 - 它被困在其定义的翻译单元内,因为它隐式地给出了静态链接。你答应你的编译器whatever
会在多个翻译单元之间共享,但实际上它只忠于一个翻译单元,不喜欢被共享。而且,剩下的你都知道了。
通过明确说明来解决extern
在实施文件中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)