【发布时间】:2018-02-01 19:14:43
【问题描述】:
以下用于测试字节顺序的代码预计具有实现定义的行为:
int is_little_endian(void) {
int x = 1;
char *p = (char*)&x;
return *p == 1;
}
但它是否可能在故意设计的架构上具有未定义的行为?例如,int 表示的第一个字节,其值为 1(或另一个精心选择的值)是否可以是 char 类型的陷阱值?
如 cmets 中所述,unsigned char 类型不会有此问题,因为它不能有陷阱值,但此问题特别涉及 char 类型。
【问题讨论】:
-
你可以使用
unsigned char,我相信它不会有任何陷阱值吗? -
注意
unsigned char不能有陷阱值。
标签: c casting language-lawyer undefined-behavior