以下代码不打印任何内容:
#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
打印 array[-1+1] 即 array[0]
d=0 <=3-2
打印 array[0+1] 即 array[1]
d=1 <=3-2
打印 array[1+1] 即 array[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
生成的值时,它打印了正确的值。
第一个程序有什么问题?
最佳答案
您的宏的问题是 sizeof
返回一个 size_t
,它是您正在与 比较的无符号整数类型已签名 int
。解决方案是将您的大小转换为 int
。
#define TOTAL_SIZE (int)( (sizeof(array))/(sizeof(array[0])) )
关于c - 2 个类似的 C 程序,宏产生不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42318293/