【发布时间】:2015-08-31 14:36:15
【问题描述】:
unsigned char * numbers = {1,1,1};
unsigned short * ptr = (unsigned short*) numbers;
*(++ptr)=2;
printf("%d %d %d %d", numbers[0], numbers[1], numbers[2], numbers[3]);
以上可能导致未定义的行为,对吗?另外,屏幕上会打印什么?
结果是1 1 2 0,但是1 1 0 2 可以在某个时候打印吗?
【问题讨论】:
-
因为是未定义的行为,所以无法说会打印什么...
-
你试过运行它吗?
-
众所周知,旧版本的 GCC 会在遇到未定义行为时启动一个有趣的小电脑游戏。
-
@We'reAllMadHere 试图预测 UB 的结果通常是毫无意义的做法,而且很可能是所有反对票的来源。本质上,您是在问“未定义行为的行为是什么,这没有任何意义。最好将精力集中在理解为什么这段代码不好。
-
未定义行为的一个可能影响是网站上的意外投反对票。 C++ 标准允许这样做。
标签: c++