这似乎在 GCC 和 Visual C 中有效,没有评论:
static const **unsigned** char foo[] = "bar";
这是在单元测试中使用的盐。还有其他方法可以做到这一点,但这是最简单的,并且涉及的成本最低。
这会给其他编译器带来麻烦吗?
这似乎在 GCC 和 Visual C 中有效,没有评论:
static const **unsigned** char foo[] = "bar";
这是在单元测试中使用的盐。还有其他方法可以做到这一点,但这是最简单的,并且涉及的成本最低。
这会给其他编译器带来麻烦吗?
这是安全的,至少如果您使用的是符合标准的 C 编译器。
N1570 6.7.9 第 14 段说:
字符类型的数组可以由字符串文字或 UTF-8 字符串文字初始化,可选地用大括号括起来。字符串文字的连续字节(如果有空间或数组大小未知,则包括终止的空字符)初始化数组的元素。
C90 标准的措辞基本相同,因此您无需担心较旧的编译器。
字符类型为、char
和signed char
。unsigned char
有趣的是,指针初始化没有相应的保证,所以:
const char *ptr = "hello";
是安全的,但是这个:
const unsigned char *uptr = "hello";
不是——而且似乎没有一个简单的解决方法。