• C Primer Plus(6) 中文版 第4章 字符串和格式化输入/输出 4.3 常量和C预处理器


    4.3 常量和C预处理器
    circumference = 3.14159 * diameter;
    输入实际值并可使用这个常量。然而,这种情况使用符号常量(symbolic constant)会更好。例如:
    circumference = pi * diameter;
    符号常量比字面值常量更好:
    *常量名比数字表达的信息更多;
    *假如程序中多处使用一个常量,有时需要改变它的值。使用符号常量,则只需改动符号常量的定义,不用在程序中查找使用常量的地方,然后逐一修改。
    创建符号常量:
    C预处理用来定义常量。例如:
    #define pi 3.14159
    编译程序时,程序中所有的pi都将替换成3.14159。这一过程称为编译时替换(compile-time substitution)。在运行程序时,程序中所有的替换均已完成。通常,这样定义的常量也称为明示常量(manifest constant)。
    明示常量格式:
    #define 符号常量名 符号常量值 
    其通用格式如下:
    #define NAME value
    注意,末尾不用加分号,因为这是一种预处理器的替换机制。
    用大写表示符号常量是C语言一贯的传统。这样,在程序中看到全大写的名称就立刻明白这是一个符号常量,而非变量。大写常量可以提供程序的可读性。
    另外,还有一个不常用的命名约定,即在名称前面带c_或k_前缀来表示常量。
    符号常量的命名规则与变量相同。
    /* pizza.c -- uses defined constants in a pizza context */
    #include
    #define PI 3.14159
    int main(void)
    {
        float area, circum, radius;
        
        printf("What is the radius of your pizza?\n");
        scanf("%f", &radius);
        area = PI * radius * radius;
        circum = 2.0 * PI *radius;
        printf("Your basic pizza parameters are as follows:\n");
        printf("circumference = %1.2f, area = %1.2f\n", circum,
               area);
        return 0;

    /* 输出:

    */

    %1.2f表明,结果被四舍五入为两位小数输出。
    #define指令还可定义字符和字符串常量。前者使用单引号,后者使用双引号。
    记住,符号常量名后面的内容被用来替换符号常量。
    4.3.1 const限定符
    C90标准新增了const关键字,用于限定一个变量为只读。用const类型限定符声明的是变量,不是常量。
    const用起来比#define更灵活。
    4.3.2 明示常量
    C头文件limits.h和float.h分别提供了与整数类型和浮点类型大小限制相关的详细信息。每个头文件都定义了一系列供实现使用的明示常量。(编译器要完全支持C99标准才能识别LLONG_MIN标识符) 
    float.h中的一些明示常量
    FLT_MANT_DIG               float类型的尾数位数
    FLT_DIG                           float类型的最少有效数字尾数(十进制)
    FLT_MIN_10_EXP            带全部有效数字的float类型的最小负指数(以10为底)
    FLT_EPSILON                  1.00和1.00大的最小float类型值之间的差值。 
    // defines.c -- uses defined constants from limit.h and float.
    #include
    #include    // integer limits
    #include     // floating-point limits
    int main(void)
    {
        printf("Some number limits for this system:\n");
        printf("Biggest int: %d\n", INT_MAX);
        printf("Smallest long long: %lld\n", LLONG_MIN);
        printf("One byte = %d bits on this system.\n", CHAR_BIT);
        printf("Largest double: %e\n", DBL_MAX);
        printf("Smallest normal float: %e\n", FLT_MIN);
        printf("float precision = %d digits\n", FLT_DIG);
        printf("float epsilon = %e\n", FLT_EPSILON);
        
        return 0;
    }

    /* 输出:

     */ 

  • 相关阅读:
    不开窗求每个人当日累计的答题数
    二叉树相关知识
    软件测试 -- 进阶 5 软件测试用例
    【前端Vue3】——JQuery知识点总结(超详细)
    一台电脑生成两个ssh,绑定两个GitHub账号
    java List截取
    安装Mysql报错:Could not create or access the registry key needed for the...
    springcloud
    《算法图解》阅读笔记
    软件机器人助力企业产地证自动化申报,提高竞争力,降低成本
  • 原文地址:https://blog.csdn.net/weixin_40186813/article/details/126159337