例:#define NELE(a) (sizeof(a) / sizeof(a[0]))
int main() {
char str[] = {'E', 'M', 'C'};
for (int d=-1; d<=(NELE(str)-2);d++)
printf("%c",str[d+1]);
return 0;
}
判断printf()输出的是什么,结果可能出乎意料,什么也没有输出,原因呢?原因在于sizeof()方法返回的是一个unsigned int类型,故NELE(a)返回的是一个无符号整数,由于C语言的语法规定:当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。故上述程序中的d将自动变为无符号的整数,d变为了unsigned int型的最大值。所以没有任何输出。