zoukankan      html  css  js  c++  java
  • C:预编译指令

    预编译

    关于编译 参考

    关于宏定义 参考

    预编译又称为预处理,是做些代码文本的替换工作
    处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等,就是为编译做的预备工作的阶段,主要处理#开始的预编译指令
    预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。常见的预编译指令有:#include 指令 ;#define指令 ;#if、#else和#endif指令

    (1)#include 指令
    该指令指示编译器将xxx.xxx文件的全部内容插入此处。若用<>括起文件则在系统的INCLUDE目录中寻找文件,若用" "括起文件则在当前目录中寻找文件。一般来说,该文件是后缀名为"h"或"cpp"的头文件。
    注意:<>不会在当前目录下搜索头文件,如果我们不用<>而用""把头文件名扩起,其意义为先在当前目录下搜索头文件,再在系统默认目录下搜索。

    (2)#define指令
    该指令有三种用法:
    第一种是定义标识,标识有效范围为整个程序,形如#define XXX,常与#if配合使用;
    第二种是定义常数,如#define max 100,则max代表100(这种情况下使用const定义常数更好,原因见注1);
    第三种是定义"函数",如#define get_max(a, b) ((a)>(b)?(a):(b)) 则以后使用get_max(x,y)就可以得到x和y中较大的数(这种方法存在一些弊病,见注2)。
    第四种是定义"宏函数",如#define GEN_FUN(type) type max_##type(type a,type b){return a>b?a:b;} ,使用时,用GEN_FUN(int),则此处预编译后就变成了 max_int(int a,int b){return a>b?a:b;},以后就可以使用max_int(x,y)就可以得到x和y中较大的数.比第三种,增加了类型的说明。

    (3)#if、#else和#endif指令
    这些指令一般这样配合使用:
    #if defined(标识) //如果定义了标识
    要执行的指令
    #else
    要执行的指令
    #endif
    在头文件中为了避免重复调用(比如说两个头文件互相包含对方),常采用这样的结构:
    #if !(defined XXX) //XXX为一个在你的程序中唯一的标识符,
    //每个头文件的标识符都不应相同。
    //起标识符的常见方法是若头文件名为"abc.h"
    //则标识为"abc_h"
    #define XXX
    真正的内容,如函数声明之类
    #endif

    //预编译的 条件编译
    //条件编译 根据不同的版本信息去编译不同的代码
    #ifdef COUNT
    // 代码段 1
    #define COUNT 100
    #else
    // 代码段 2
    #define COUNT 50
    #endif
    
    //第二种形式
    #ifndef 标示符
    //代码 一
    #else
    //代码 二
    #endif
    
    //第三种结构
    #if 常量
    //代码 一
    #else
    //代码二
    #endif
    //宏定义
    #define COUNT 10
    #define PI 3.1415926
    //宏定义,只有一个功能,就是替换
    //在定义的时候需要注意的地方  一般规律:宏名的每个字母是大写  或者是使用驼峰命名法
    //对于有参的宏,我们注意 1. 参数要大写,每一个参数要加括号  2.宏名与参数之间不能有空格
    #define SQR(X) X*X 
    //定义了一个宏,
    ////对于宏中每一个参数都要加 括号 的理解
    //main()     只是文本替换,不像公式计算
    //{int a = 16,k=2,m=1;
    //    a/=SQR(k+m)/SQR(k+m);
    //    printf("%d
    ",a);
    //}
  • 相关阅读:
    wpf 命令
    wpf 事件
    wpf 依赖属性介绍
    wpf binging (六)多绑定
    ISI的晶圆级MRAM测试仪
    常见存储器分类
    存储器SDRAM简要历史
    当前MRAM市场以及专用MRAM设备测试的重要性
    IPUS SQPI PSRAM为STM32单片机提供RAM扩展方案
    单端口SRAM与双端口SRAM电路结构
  • 原文地址:https://www.cnblogs.com/benpaobadaniu/p/4695834.html
Copyright © 2011-2022 走看看