给你一个任务,编写一个过程int_size_is_32 (),当在一个int是32位的机器上运行时,该程 序产生1,而其他情况则产生0。不允许使用sizeof运算符。下面是开始时的尝试:
1 /* The following code does not run properly on some machines */ 2 int bad_int_size_is_32() { 3 /* Set most significant bit (msb) of 32-bit machine*/ 4 int set_msb = 1<<31; 5 /* Shift past msb of 32-bit word*/ 6 int beyond_msb = 1 << 32; 7 7 /* set_msb is nonzero when word size >= 32 8 beyond_msb is zero when word size <= 32 */ 9 return set_msb && !beyond_msb; 10 }
当在SUN SPARC这样的32位机器上编译并运行时,这个过程返回的却是0。下面的编译器 信息给了我们一个问题的指示:warning:left shift count >=width of type
A. 我们的代码在哪个方面没有遵守C语言标准?
B. 修改代码,使得它在int至少为32位的任何机器上都能正确地运行。
C. 修改代码,使得它在int至少为16位的任何机器上都能正确地运行。