该程序应该打印出来的元素array,但是当它运行时,没有显示输出.
#include <stdio.h>
#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = { 23, 34, 12, 17, 204, 99, 16 };
int main() {
int d;
for (d = -1; d <= (TOTAL_ELEMENTS - 2); d++)
printf("%d\n", array[d + 1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么这个程序没有显示任何输出?
一位朋友给了我一个谜语:
#include<stdio.h>
#define TOTAL_ELEMENTS ((sizeof(array) / sizeof(array[0])))
int array[] = {23,34,12,17,204,99,16};
int main()
{
int d;
for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
printf("%d\n",array[d+1]);
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码应该打印所有的数组元素,代码中的问题是什么(输出什么都没有)?我认为循环不会迭代一次?
我发现以下代码确实有效:
#include<stdio.h>
#define TOTAL_ELEMENTS ((sizeof(array) / sizeof(array[0])))
int array[] = {23,34,12,17,204,99,16};
int main()
{
int d;
int x = (TOTAL_ELEMENTS-2);
for(d=-1;d <= x;d++)
printf("%d\n",array[d+1]);
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我有一个理论认为它与宏有关,但我不能指责问题.
可能重复:
一个谜语(在C中)
关于以下代码段,我有几个问题:
#include<stdio.h>
#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = {23,34,12,17,204,99,16};
int main()
{
int d;
for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
printf("%d\n",array[d+1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里代码的输出不会按预期打印数组元素.但是当我添加一个(int)的类型转换时,ELEMENTS的宏定义为
#define TOTAL_ELEMENTS (int) (sizeof(array) / sizeof(array[0]))
Run Code Online (Sandbox Code Playgroud)
它按预期显示所有数组元素.
基于此,我有几个问题:
如果我有一些宏定义,这是否意味着:
#define AA (-64)
默认情况下,在C中,所有定义为宏的常量都等同于signed int.
如果是,那么
但是,如果我必须强制在宏中定义一些常量,因为unsigned int是否有任何常量后缀而不是我可以使用(我试过UL,UD既不起作用)?
如何在宏定义中定义常量以表现为unsigned int?