看看这一行:
for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
在第一次迭代中,您正在检查是否
-1 <= (TOTAL_ELEMENTS-2)
运算符size_of返回无符号值,检查失败(在32位机器上签名为-1 signed = 0xFFFFFFFF).
循环中的一个简单更改可以解决问题:
for(d=0;d <= (TOTAL_ELEMENTS-1);d++) printf("%d\n",array[d]);
回答你的其他问题:C宏是按文本扩展的,没有类型的概念.C编译器将您的循环视为:
for(d=-1;d <= ((sizeof(array) / sizeof(array[0]))-2);d++)
如果要在宏中定义无符号常量,请使用通常的后缀(u
for unsigned
,ul
for unsigned long
).
看看这一行:
for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
在第一次迭代中,您正在检查是否
-1 <= (TOTAL_ELEMENTS-2)
运算符size_of返回无符号值,检查失败(在32位机器上签名为-1 signed = 0xFFFFFFFF).
循环中的一个简单更改可以解决问题:
for(d=0;d <= (TOTAL_ELEMENTS-1);d++) printf("%d\n",array[d]);
回答你的其他问题:C宏是按文本扩展的,没有类型的概念.C编译器将您的循环视为:
for(d=-1;d <= ((sizeof(array) / sizeof(array[0]))-2);d++)
如果要在宏中定义无符号常量,请使用通常的后缀(u
for unsigned
,ul
for unsigned long
).
sizeof
以无符号格式返回字节数.这就是你需要演员的原因.
在这里查看更多.