long int
和int
表示相同,它们严格相同吗? 根据C标准,这些类型在平台上是否以任何方式表现出不同行为?例如,这样做总是有效的:int int_var;
long long_var;
void long_bar(long *l);
void int_bar(int *i);
void foo()
{
long_bar(&int_var); /* Always OK? */
int_bar(&long_var);
}
如果short和int恰好具有相同的表示方式,那么同样的问题也适用于它们。
在讨论如何为嵌入式C89编译器定义类似于int32_t
的typedef时,问题就出现了,即使用int
或long
,它是否重要。
gcc -Wall -Wextra
。 - Basile Starynkevitchint
可以将0x80000000作为陷阱,但long
可以正常存储它。或者,int
可以有2个填充位,而long
只有1个。 - phuclvchar
、signed char
和unsigned char
是 3 种不同的类型,它们的大小相同,但其范围也不同于_Bool
,后者通常也具有相同的大小。 - phuclv