可能是重复内容:
一道谜题(使用 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;
}
这里代码的输出并不像预期那样打印数组元素。但是当我在 ELEMENTS 的宏定义中添加一个 (int) 类型转换时,问题得到了解决。
#define TOTAL_ELEMENTS (int) (sizeof(array) / sizeof(array[0]))
它按预期显示了所有数组元素。
- 这种类型转换是如何工作的?
基于此,我有几个问题:
这是否意味着如果我有以下宏定义:
#define AA (-64)
默认情况下,在C语言中,所有定义为宏的常量都等同于 signed int。
如果是这样,那么
但是,如果我必须强制某个在宏定义中定义的常量行为类似于无符号整数,是否存在任何常数后缀可以使用(我尝试了UL,UD,但都不起作用)?
如何在宏定义中定义一个常量以行为无符号整数?