跳到主要内容
🔍

代码示例: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 = &reg;
        *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;
    }