1

在运行以下代码时:

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

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

    return 0;
}

在 Visual c++ 中,我得到的输出为 16。默认数据类型是signed、和 ,unsigned是否考虑过?constvolatileint

4

3 回答 3

4

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

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

于 2012-09-28T12:27:31.177 回答
4

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

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

于 2012-09-28T12:27:58.093 回答
1

你的程序不是标准C:

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

is, ok, signedandint实际上是 a areunsigned和的同义词unsigned int

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

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

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

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

于 2012-09-28T13:02:02.967 回答