zoukankan      html  css  js  c++  java
  • c++ 预处理指令#define, #endif...

    常见的预处理指令有:

    # 空指令,无任何效果

    # include 包含一个源代码文件

    #define 定义宏

    #undef 取消已定义的宏

    #if 如果给定条件为真,则编译下面代码

    #ifdef 如果宏已经定义,则编译下面代码

    #ifndef 如果宏没有定义,则编译下面代码

    #elif 如果前面的#if给定条件不为真,当前条件为真,则编译下面代码

    #endif 结束一个#if......#else条件编译块

    #error 停止编译并显示错误信息

    什么是预处理指令?

    预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。预处理指令是在编译器进行编译之前进行的操作.预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。可见预处理过程先于编译器对源代码进行处理。预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。预处理过程还会删除程序中的注释和多余的空白字符。

    工作中经常这样使用宏:

    1. 常常使用宏来调试代码

    #if 0

    ///< 旧的代码(或函数) (旧的代码, 将会被预处理的时候,屏蔽掉, 不进行编译)

    #else

    ///< 新的代码(或函数)

    #endif

    #ifndef JOE_DEBUG

    ///< 新的代码(或函数)

    #else

    ///< 旧的代码(或函数) (旧的代码, 将会被预处理的时候,屏蔽掉, 不进行编译)

    #endif

    #ifdef Q_DEBUG

    ///< 新的代码(或函数)

    #else

    ///< 旧的代码(或函数) (旧的代码, 将会被预处理的时候,屏蔽掉, 不进行编译)

    #endif<br><br>

      通过以上类似的方法, 可以防止由于过多的修改代码, 而把代码修改的一塌糊涂. 建议修改代码的时候, 做到保护好以前的代码, 尽量不进行代码的删除操作. 要养成使用宏和注释代码的习惯. 

      2. 使用宏来根据不同的平台包含不同的文件. 很多时候, 我们的代码是需要跨系统平台编译和运行的. 比如: 一个小功能代码,

    需要既可以在Win下面运行,  还要可以在Max, linux上面运行. 可是, 因为系统的不一样, 有些时候, 头文件的包含的名字是不一样的.

    所以,这时候, 就是用到了宏. 因为我们使用编程工具分不同的系统平台, 编程工具自身的环境就会包含不同平台的系统宏, 假设OS_Win,

    OS_Mac, OS_Linux 分别代码三种系统不同的宏. 而且,Win版本的编程工具中已经定义了OS_Win, 类似的Mac下,

    编程工具定义的是OS_Mac, Linux...

    #ifdef OS_Win

    #include <windows.h>

    #endif

    #ifdef OS_Mac

    #include <mac.h>

    #endif

    #ifdef OS_Linux

    #include <linux.h>

    #endif

    /** 不仅使用在头文件的包含. 而且,对于不同的系统平台. 你也可以使用不同的代码结构. */

  • 相关阅读:
    java8 file转base64
    springboot下maven分环境打包
    maven加载src下的xml文件
    ue正则
    springboot 深坑
    解压版mysql 错误-mysql启动失败
    spring整合activeMQ
    maven分环境 打包
    logger日志配置
    hadoop安装
  • 原文地址:https://www.cnblogs.com/sssblog/p/9701088.html
Copyright © 2011-2022 走看看