【发布时间】:2011-11-14 13:47:19
【问题描述】:
我正在使用许多字节编译一个低级代码。在某些情况下,我可以很方便地使用双引号括起来的旧 C 字符串来定义。
但是当使用 gcc 或 g++ 编译时(不知道其他编译器的行为),它一直困扰着我的尖字符串符号。
基本上在我写这个的时候
const unsigned char & refok = *"ABCDEFGHI";
编辑:好的,上面的代码实际上并不能正常工作,因为理论上它只是保留对字符串第一个字符的副本的引用。由于优化,它实际上允许使用某些编译器访问所有字符串,但可能随时中断。
或者这个
const unsigned char oktoo[10] =
{'A','B','C','D','E','F','G','H','I',0};
编译器什么也没说。
但它肯定拒绝这个:
const unsigned char * bad = "ABCDEFGHI";
有消息
error: invalid conversion from
‘const char*’ to ‘const unsigned char*’
[-fpermissive]
这甚至不是警告,而是错误。
我想知道为什么这个问题比使用引用或将单个字符从有符号字符转换为无符号字符时更成问题?还是我错过了什么?
【问题讨论】:
-
您的问题被标记为 C 和 C++ 的主题,C 和 C++ 差异很大。请删除您不使用的语言的标签。
-
@Complicatedseebio - 因为看起来他并不急于这样做,所以您可以添加一个 C 答案,并说明它是针对 C 而不是 C++(就像接受的答案是,我相信)。
-
@Complicatedseebio:是的,C 答案会很好。任何人都可以看到上面的虚假参考资料,我的建议是使用 C++ 编写的。我的部分问题是,完全相同的代码在使用 C 编译时有效,而在使用 C++ 时出现编译错误。