signed,unsigned,const和volatile的默认类型

时间:2012-09-28 12:26:15

标签: c sizeof

运行以下代码:

int main()
{
    int a = sizeof(signed) + sizeof(unsigned);
    int b = sizeof(const) + sizeof(volatile);

    printf("%d",a+++b);

    return 0;
}

在visual c ++中,我得到的输出为16. signedunsignedconstvolatile的默认数据类型是int吗?

3 个答案:

答案 0 :(得分:4)

不仅仅是这些限定符,C语言的默认类型是 int 。因此,如果您未在某个位置指定数据类型,编译器将假定 int

例如,如果你没有声明一个函数并使用它,编译器会给你一个警告,并假设函数返回int。

答案 1 :(得分:4)

首先:sizeof不是一个函数,它是一个运算符。如果它是一个函数,你会如何实现它?你不能,这是重点。

是的,这些限定符的默认类型是int

答案 2 :(得分:1)

你的程序不是标准C:

int a = sizeof(signed) + sizeof(unsigned);

是的,好的,signedint实际上是unsignedunsigned int的同义词。

int b = sizeof(const) + sizeof(volatile);

这些在C中是不允许的。从历史上看,可能有一段时间将这些解释为int,但你不应该依赖它,你的编译器应该哭。

printf("%d",a+++b);

我甚至拒绝查看应该如何解析它以及结果应该是什么,因为这与问题无关。