【发布时间】:2010-10-31 07:21:08
【问题描述】:
可能重复:
A riddle (in C)
我有几个关于以下 sn-p 的问题:
#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;
}
这里的代码输出没有按预期打印数组元素。但是当我添加 (int) 的类型转换时,ELEMENTS 的宏定义为
#define TOTAL_ELEMENTS (int) (sizeof(array) / sizeof(array[0]))
它按预期显示所有数组元素。
- 这种类型转换是如何工作的?
基于此,我有几个问题:
-
这是否意味着如果我有一些宏定义为:
#define AA (-64)
在 C 中默认情况下,所有定义为宏的常量都等价于 signed int。
如果是,那么
但是,如果我必须强制使宏中定义的某些常量表现为 unsigned int,是否有任何常量后缀无法使用(我试过 UL,UD 都不起作用)?
如何在宏定义中定义一个常量,使其表现为 unsigned int?
【问题讨论】:
标签: c macros c-preprocessor