c语言中不存在“原始类型”(primitive types)这一正式概念——这不是术语缺失,而是根本性范式差异所致。java引入“primitive types”是为与面向对象的引用类型(如object、string)形成明确二分;而c是过程式、无对象模型的语言,所有类型本质上都是内存布局的直接描述,不存在“非原始”的对应物。
C标准(ISO/IEC 9899)并未使用“primitive”一词,而是定义了基本类型(basic types) 和派生类型(derived types)。其中,基本类型包括:
- 整型家族:_Bool(C99)、char、signed char、unsigned char、short int、unsigned short int、int、unsigned int、long int、unsigned long int、long long int、unsigned long long int(C99起);
- 浮点型:float、double、long double;
- 空类型:void(仅用于函数返回或指针泛型,不可实例化)。
值得注意的是,C对这些类型的最小取值范围有严格要求(如int ≥16位),但实际位宽由实现决定。例如:
#include
#include
int main() {
printf("sizeof(int) = %zu bytes\n", sizeof(int));
printf("INT_MIN = %d, INT_MAX = %d\n", INT_MIN, INT_MAX);
return 0;
}
在32位x86系统上通常输出 sizeof(int) = 4,而在某些嵌入式平台可能为2字节——这恰恰体现了C“贴近硬件”的设计哲学,与Java强制规定int恒为32位形成鲜明对比。