
c 语言作为一门面向过程的系统编程语言,并未定义“原始类型”(primitive types)这一术语;它只有标准规定的基本数据类型(fundamental types),其大小和行为依具体实现而定,以兼顾效率与硬件适配性。
在 Java 等面向对象语言中,“primitive types”是相对于“reference types”(如类、数组、接口)提出的概念,用于强调其非对象性、栈上存储、值传递等特性。但 C 语言既无对象模型,也无运行时类型系统或自动内存管理机制,因此根本不存在“原始 vs 引用”的二元分类基础——所有 C 类型本质上都是“值类型”,且直接映射到底层内存布局。
C 标准(ISO/IEC 9899)将数据类型分为几大类,其中最核心的是基本类型(basic types),包括:
整数类型(integer types):
char、signed char、unsigned char
short int(或 short)、unsigned short int(或 unsigned short)
int、unsigned int
long int(或 long)、unsigned long int(或 unsigned long)
long long int(C99 起)、unsigned long long int实浮点类型(real floating types):
float、double、long double空类型(void):用于表示无类型,常见于函数返回值或指针泛化。
值得注意的是,C 标准不规定这些类型的精确位宽,仅给出最小范围要求(如 int 至少 16 位,long 至少 32 位)。这与 Java 的严格定义(如 int 恒为 32 位有符号补码)形成鲜明对比。例如,在 8 位单片机上,int 可能仅为 16 位;而在现代 x86-64 Linux 系统中,int 通常为 32 位,long 为 64 位(LP64 模型)。
✅ 正确表述应为:
“C 提供一组由标准定义的基本数据类型(basic data types),它们是语言内置、不可再分解的底层类型,由编译器直接支持,无需用户定义。”
❌ 避免误用术语:
- 不称其为“primitive types”(该词在 C 社区无标准依据,易引发概念混淆);
- 不假设其跨平台尺寸一致(需用
中的 int32_t、uint8_t 等固定宽度类型保障可移植性)。
示例:安全地声明跨平台整数
#include#include int main(void) { int32_t counter = 0; // 明确为 32 位有符号整数 uint8_t flags = 0xFF; // 明确为 8 位无符号整数 printf("counter: %d, flags: 0x%02X\n", counter, flags); return 0; }
总结:理解 C 的类型体系,关键在于把握其设计哲学——贴近硬件、信任程序员、最小化抽象开销。与其寻找“原始类型”的对应列表,不如深入掌握








