#if

作者: 黄卡卡 | 来源:发表于2017-07-27 22:15 被阅读0次

    #if

    #if和#endif是一组同时使用的,叫做条件编译指令。#if与#define、#include等指令一样是由预处理器这个强大的工具处理的,预处理器可以在编译前处理c程序。
    使用条件编译指令,如果满足#if后面的条件,就编译#if和#endif之间的程序段,否则不编译。
    例如

    #define LEN_MAX 3
    #define LenMax 6
    #if LEN_MAX <LenMax
    #undef LEN_MAX
    #define LEN_MAX LenMax
    #endif
    

    定义了LEN_MAX 和LenMax,如果LEN_MAX <LenMax成立为真,则取消LEN_MAX的定义,重新定义LEN_MAX,也就是说LEN_MAX等于6。这时预处理器会保留中间程序(#if与#endif行会消失),让编译器编译中间行。
    如果LEN_MAX <LenMax不成立,预处理器会将删除#if到#endif中的程序(包括#if与#endif行),则编译器会看不到中间的程序。
    这样的处理不会在目标代码中占用空间,减少程序运行时间。它可以用于程序调试使用。

    #if vs. if

    条件编译是C语言中预处理部分的内容,它是编译器编译代码时最先处理的部分,
    条件编译里面有判断语句,比如 #if 、#else 、#elif 及 #endif
    它的意思是如果宏条件符合,编译器就编译这段代码,否则,编译器就忽略这段代码而不编译,如

    #define  A 0  //把A定义为0
    
    #if (A > 1)
    
             printf("A > 1");  //编译器没有编译该语句,该语句不生成汇编代码
    
    #elif (A == 1)
    
             printf("A == 1"); //编译器没有编译该语句,该语句不生成汇编代码
    
    #else
    
             printf("A < 1");   //编译器编译了这段代码,且生成了汇编代码,执行该语句
    
    #endif
    

    而 if 语句则不然,if 是 C 语言中的关键字,它根据表达式的计算结果来觉定执行那个语句,它里面的每个分支都编译了的, 如

    #define A 0
    
    if (A > 1)
    
         printf("A > 1");   //编译器编译该语句,但因为A == 0 未执行
    
    else if(A == 1)
    
       printf("A == 1");  //编译器编译该语句,但因为A == 0 未执行
    
    else
    
       printf("A < 1");  //编译器编译该语句,因为A == 0 故执行
    

    #if作为一个编译“开关”,比如:

    #if(条件满足)
    执行代码1
    #else
    执行代码2
    #endif
    

    条件编译是根据 宏条件 选择性地编译语句,它是编译器在编译代码时完成的;
    条件语句是根据条件表达式选择性地执行语句,它是在程序运行时进行的。

    相关文章

      网友评论

          本文标题:#if

          本文链接:https://www.haomeiwen.com/subject/mtpzkxtx.html