2

这似乎在 GCC 和 Visual C 中有效,没有评论:

static const **unsigned** char foo[] = "bar";

这是在单元测试中使用的盐。还有其他方法可以做到这一点,但这是最简单的,并且涉及的成本最低。

这会给其他编译器带来麻烦吗?

4

1 回答 1

4

这是安全的,至少如果您使用的是符合标准的 C 编译器。

N1570 6.7.9 第 14 段说:

字符类型的数组可以由字符串文字或 UTF-8 字符串文字初始化,可选地用大括号括起来。字符串文字的连续字节(如果有空间或数组大小未知,则包括终止的空字符)初始化数组的元素。

C90 标准的措辞基本相同,因此您无需担心较旧的编译器。

字符类型为、charsigned charunsigned char

有趣的是,指针初始化没有相应的保证,所以:

const char *ptr = "hello";

是安全的,但是这个:

const unsigned char *uptr = "hello";

不是——而且似乎没有一个简单的解决方法。

于 2015-07-27T19:54:55.353 回答