测试代码如下:
unsigned char _ctype[] = {
_C,_C,_C,_C,_C,_C,_C,_C, /* 0-7 */
_C,_C|_S,_C|_S,_C|_S,_C|_S,_C|_S,_C,_C, /* 8-15 */
_C,_C,_C,_C,_C,_C,_C,_C, /* 16-23 */
_C,_C,_C,_C,_C,_C,_C,_C, /* 24-31 */
_S|_SP,_P,_P,_P,_P,_P,_P,_P, /* 32-39 */
_P,_P,_P,_P,_P,_P,_P,_P, /* 40-47 */
_D,_D,_D,_D,_D,_D,_D,_D, /* 48-55 */
_D,_D,_P,_P,_P,_P,_P,_P, /* 56-63 */
_P,_U|_X,_U|_X,_U|_X,_U|_X,_U|_X,_U|_X,_U, /* 64-71 */
_U,_U,_U,_U,_U,_U,_U,_U, /* 72-79 */
_U,_U,_U,_U,_U,_U,_U,_U, /* 80-87 */
_U,_U,_U,_P,_P,_P,_P,_P, /* 88-95 */
_P,_L|_X,_L|_X,_L|_X,_L|_X,_L|_X,_L|_X,_L, /* 96-103 */
_L,_L,_L,_L,_L,_L,_L,_L, /* 104-111 */
_L,_L,_L,_L,_L,_L,_L,_L, /* 112-119 */
_L,_L,_L,_P,_P,_P,_P,_C, /* 120-127 */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 128-143 */
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 144-159 */
_S|_SP,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P, /* 160-175 */
_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P,_P, /* 176-191 */
_U,_U,_U,_U,_U,_U,_U,_U,_U,_U,_U,_U,_U,_U,_U,_U, /* 192-207 */
_U,_U,_U,_U,_U,_U,_U,_P,_U,_U,_U,_U,_U,_U,_U,_L, /* 208-223 */
_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L,_L, /* 224-239 */
_L,_L,_L,_L,_L,_L,_L,_P,_L,_L,_L,_L,_L,_L,_L,_L}; /* 240-255 */
static int format_decode(const char *fmt, struct printf_spec *spec)
{
......
unsigned int index;
unsigned char uch;
......
test:
prom_putstr("format_decode=>");
prom_putstr(fmt);
prom_putstr("\n");
if (isdigit('1')) {
prom_putstr("format_decode=>1 is digit\n");
}
uch = _ctype[115];
if (uch == 0x02) {
prom_putstr("format_decode=>115 is 0x02\n");
}
index = (unsigned int)(unsigned char)(*fmt);
if (index == 115)
prom_putstr("format_decode=>index is 115\n");
uch = _ctype[index];
if (uch == 0x02) {
prom_putstr("format_decode=>index is 0x02\n");
}
goto test;
......
}
上面的代码用gcc-4.3.3编译时,运行是没有问题的;
当用gcc-4.8.8编译时,运行的结果为:
format_decode=>s
format_decode=>1 is digit
format_decode=>115 is 0x02
format_decode=>index is 115
也就是说执行“uch = _ctype[index];”这行代码时挂死了;
请教一下各位高手,上面的问题可能是什么原因引起的?谢谢。
|