C语言学习笔记13——条件编译使用分析

在C语言中:

  1. 条件编译的行为类似于C语言中的 if…else…
  2. 条件编译是预编译指示命令,用于控制是否编译某段代码
/*测试代码*/
#include <stdio.h>

#define C 1

int main()
{
    #if(C == 1)
        printf("This is first printf...\n");
    #else
        printf("This is second printf...\n");
    #endif

    return 0;
}

运行结果

This is first printf...

条件编译的本质

  1. 预编译器根据条件编译指令按不同的条件编译不同的代码段, 因而可以产生不同的目标代码

  2. 编译器不知道代码分支的存在

  3. if…else…语句在运行期进行分支判断

  4. 条件编译指令在预编译期进行分支判断

  5. 实际工程中条件编译主要用于以下两种情况:

    • 不同的产品线共用一份代码
    • 区分编译产品的调试版和发布版
  6. 可以通过命令行定义宏

    gcc -D macro=value file.c 或 gcc -D macro file.c


#include的本质分析

  1. #include 的本质是将已经存在的文件内容嵌入到当前文件中
  2. #include 的间接包含同样会产生嵌入文件内容的操作
  3. 重复包含文件内容, 程序将产生编译错误

条件编译可以解决头文件重复包含的编译错误

/* header_file.h */

#ifndef _HEARDER_FILE_H_
#define _HEARDER_FILE_H_

// ..............

#endif

#error的用法

  1. #error是一种预编译器指示字

  2. #error可用于提示编译条件是否满足

  3. #error用于生成一个编译错误消息

    • 用法:
      #error message (message 不需要用双引号保围)
  4. 编译过程中的任意错误信息意味着程序无法生成最终的可执行程序

  5. 类似的, #warning用于生成编译警告

/* 测试代码 */
#include <stdio.h>

void f()
{
#if ( PRODUCT == 1 )
    printf("This is a low level product!\n");
#elif ( PRODUCT == 2 )
    printf("This is a middle level product!\n");
#elif ( PRODUCT == 3 )
    printf("This is a high level product!\n");

// 当 PRODUCT 未宏定义时,生成一条错误信息
#else
    #error The macro PRODUCT is NOT define
#endif
}

int main()
{
    f();

    printf("1. Query Information.\n");
    printf("2. Record Information.\n");
    printf("3. Delete Information.\n");

#if ( PRODUCT == 1 )
    printf("4. Exit.\n");
#elif ( PRODUCT == 2 )
    printf("4. High Level Query.\n");
    printf("5. Exit.\n");
#elif ( PRODUCT == 3 )
    printf("4. High Level Query.\n");
    printf("5. Mannul Service.\n");
    printf("6. Exit.\n");

// 当 PRODUCT 未宏定义时,生成一条错误信息
#else
    #error The macro PRODUCT is NOT define
#endif

    return 0;
}

#line的用法

  • #line用于强制指定新的行号和编译文件名,并对源程序的代码重新编号

    用法: #line number filename

#line编译器指示字的本质是重定义 __LINE____FILE__
/* 测试代码 */

#include < stdio.h >

int main()
{
    printf("%s, %d\n", __FILE__, __LINE__);

#line 1 "HSD.c"

    printf("%s, %d\n", __FILE__, __LINE__);

    return 0;
}

运行结果

..\C_Main\main.c, 5
HSD.c, 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值