以下代码打印没有类似的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- - 恐怖'。 –