对常量数组的未定义引用

2024-05-09

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(使用前将#替换为@)

对常量数组的未定义引用 的相关文章

随机推荐