【发布时间】:2016-04-10 02:13:12
【问题描述】:
#include <stdio.h>
#define all_mem (sizeof(x) /sizeof(x[0]))
int x[] ={1,2,3,4,5,6,7,8,9,10};
int main(void) {
// printf("The condition is %d",(all_mem-2));
int i;
for(i=-1;i<=(all_mem-2);i++)
{
printf("The number is %d",i);
}
return 0;
}
在上面的代码中 for 循环甚至没有执行一次,我尝试了打印条件并且它满足循环条件。任何见解如何将 for 循环条件中的宏表达式评估为小于 -1 的值?
【问题讨论】:
-
在有符号/无符号比较中,
i被转换为0xffffffff,比all_mem - 2大得多。至少我认为这就是正在发生的事情。你为什么从-1开始i?我认为我从未见过这样做的代码。 -
屏幕上什么都没有?
-
@ShahrozShaikh:由于循环条件立即失败,您不会期待任何事情。该程序可以简化为
int main(void) { return 0; },这将产生任何输出。