代码示例:1.2.2 数据类型与常量变量
全部示例均标注编译命令、适用环境与实测状态;完整验证记录见《03.5-代码编译运行验证记录》。
examples/ex1-type-sizes.c · 基本类型 sizeof 与 limits.h/float.h 边界实测
/* ex1-type-sizes.c —— 基本类型 sizeof 与边界值实测(1.2.2) * 适用环境:Linux / Windows(MinGW) 标准:C11(纯标准,无 GNU 扩展) * 编译:gcc ex1-type-sizes.c -o ex1 -std=c11 -Wall -Wextra -Wpedantic * 运行:./ex1(Windows: ex1.exe) * 说明:sizeof 与边界值随平台/实现不同(本输出为 gcc 15.2.0 / MinGW-w64 x86_64 实测); * 注意本机 long=4 字节(LLP64),Linux x86_64 为 8 字节。 */ #include <stdio.h> #include <limits.h> #include <float.h> int main(void) { printf("sizeof(char) = %zu\n", sizeof(char)); printf("sizeof(short) = %zu\n", sizeof(short)); printf("sizeof(int) = %zu\n", sizeof(int)); printf("sizeof(long) = %zu\n", sizeof(long)); printf("sizeof(long long) = %zu\n", sizeof(long long)); printf("sizeof(float) = %zu\n", sizeof(float)); printf("sizeof(double) = %zu\n", sizeof(double)); printf("sizeof(long double) = %zu\n", sizeof(long double)); printf("sizeof(void*) = %zu\n", sizeof(void *)); printf("sizeof(_Bool) = %zu\n", sizeof(_Bool)); printf("char 范围: %d ~ %d\n", CHAR_MIN, CHAR_MAX); printf("short 范围: %d ~ %d\n", SHRT_MIN, SHRT_MAX); printf("int 范围: %d ~ %d\n", INT_MIN, INT_MAX); printf("long long 范围: %lld ~ %lld\n", LLONG_MIN, LLONG_MAX); printf("unsigned int 最大值: %u\n", UINT_MAX); printf("float 范围: %g ~ %g\n", FLT_MIN, FLT_MAX); printf("double 范围: %g ~ %g\n", DBL_MIN, DBL_MAX); return 0; }examples/ex2-const-volatile.c · const 只读保护 / volatile 指针访问 / 函数内 static 计数
/* ex2-const-volatile.c —— const 保护、volatile 访问与 static 存储(1.2.2) * 适用环境:Linux / Windows(MinGW) 标准:C11(纯标准,无 GNU 扩展) * 编译:gcc ex2-const-volatile.c -o ex2 -std=c11 -Wall -Wextra -Wpedantic * 运行:./ex2(Windows: ex2.exe) */ #include <stdio.h> static int counter(void) /* 函数内 static:生命周期=整个程序运行期,作用域=本函数 */ { static int count = 0; return ++count; } int main(void) { const int N = 10; /* N = 20; // 编译错误:assignment of read-only variable 'N'(const 变量只读,注释演示) */ volatile int reg = 0; /* 每次访问都强制从内存读写(编译器不得优化掉/缓存) */ volatile int *p = ® *p = *p + 1; /* 模拟"硬件寄存器/共享内存"式访问 */ *p = *p + 1; printf("N = %d\n", N); printf("两次 volatile 访问后 reg = %d\n", reg); printf("第1次 counter() = %d\n", counter()); printf("第2次 counter() = %d\n", counter()); printf("第3次 counter() = %d\n", counter()); return 0; }examples/ex3-sizeof-void-diag.c · sizeof(void) 的 GCC 扩展警告(diagnostic:预期警告)
/* ex3-sizeof-void-diag.c —— sizeof(void) 诊断演示(1.2.2,预期警告) * 编译(预期出现警告,仍能编译):gcc ex3-sizeof-void-diag.c -o ex3 -std=c11 -Wall -Wextra -Wpedantic * 说明:sizeof(void)=1 是 GCC 扩展(err-7.3-9);C 标准不允许对 void 类型求 sizeof。 * 本示例为 diagnostic 示例:观察警告文本,不作为普通运行示例。 */ #include <stdio.h> int main(void) { printf("%zu\n", sizeof(void)); /* GCC 扩展;C 标准不允许对 void 求 sizeof */ return 0; }