以下代碼打印沒有類似的C程序:2與宏產生不同的輸出
#include<stdio.h>
#define TOTAL_SIZE ((sizeof(array))/(sizeof(array[0])))
int main()
{
int array[]={1,2,3}, d;
for(d=-1; d<=TOTAL_SIZE-2; ++d)
{
printf("%d\n", array[d+1]);
}
return 0;
}
d = -1 < = 3-2
打印陣列[-1 + 1],這是陣列[0]
d = 0 < = 3-2
打印陣列[0 + 1],這是陣列[1]
d = 1 < = 3-2
打印陣列[1 + 1],這是陣列[2]
但是甚至沒有打印單個元素!
但這個代碼產生打印數組中的所有元素的右輸出:
#include<stdio.h>
#define TOTAL_SIZE ((sizeof(array))/(sizeof(array[0])))
int main()
{
int array[]={1,2,3}, d;
for(d=0; d<=TOTAL_SIZE-1; ++d)
{
printf("%d\n", array[d]);
}
return 0;
}
然而無論是循環的淨效應似乎是相同的。
如果我們用數組中元素的個數替換宏TOTAL_SIZE
,它就可以工作。所以這個問題似乎與宏有關。
但是當我嘗試打印由TOTAL_SIZE
生成的值時,它會打印出正確的值。
第一個程序有什麼問題?
啓用所有警告並將它們視爲錯誤。這是保持理智的唯一方法。對於海灣合作委員會和鏗鏘,這是' - 牆 - 外部 - W- - 恐怖'。 –