如何将 char 数组定义为常量?

2024-02-14

这里是 C/C++ 菜鸟。我已经在头文件中定义了它......

typedef unsigned char BitChar[9]; // 8 data bytes (chars) and one width byte (char)

extern BitChar BitFont[];

我把它放在一个 cpp 文件中......

BitChar BitFont[] = {
    B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,2, // 32 - Space
    B10000000,B10000000,B10000000,B10000000,B10000000,B00000000,B10000000,B00000000,1, // 33 - !
    ...
    B00000000,B00000000,B11100000,B11100000,B11100000,B00000000,B00000000,B00000000,3, // 127 - Unknown
};

它编译并且看起来运行得很好。然而,由于它永远不会改变,我认为应该将其标记为常量。我如何将其标记为这样?我所期望的,添加“const”,会引发编译错误,所以我很困惑。这是错误...

error: invalid initialization of reference of type 'unsigned char (&)[9]' from expression of type 'const unsigned char [9]' 

只需添加const. This

extern const BitChar BitFont[];
...
const BitChar BitFont[] = {
    B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,2, // 32 - Space
    B10000000,B10000000,B10000000,B10000000,B10000000,B00000000,B10000000,B00000000,1, // 33 - !
    ...
    B00000000,B00000000,B11100000,B11100000,B11100000,B00000000,B00000000,B00000000,3, // 127 - Unknown
};

在 C 中应该工作得很好。(假设你的编译器知道这些是什么B00000000标识符的意思。)

这在 C++ 中也能完美地工作。 C++ 版本中唯一可能出现错误的地方是基于 C++ 特定的属性const。如果定义没有看到声明,那么您必须显式指定extern定义中也有

extern const BitChar BitFont[] = {
    B00000000
    ...

因为在C++中const物体有internal默认链接。但是,如果声明中已经包含extern并且定义可以看到声明,那么extern定义中是可选的。

您引用的错误消息表明您正在代码中的某个位置尝试初始化类型的引用BitChar & (aka unsigned char (&)[9]) 带有 const 限定BitChar大批。这是行不通的,因为它违反了常量正确性的基本规则。该引用也必须成为 const 限定的,即它必须更改为const BitChar & (aka const unsigned char (&)[9]).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 char 数组定义为常量? 的相关文章

随机推荐