zoukankan      html  css  js  c++  java
  • 宏指令

    #define已经在前面介绍过了,这里就不再讨论。#error可以强迫编译程序停止编译,用来在编译期检查环境是否符合要求或者与约束的条件发生了冲突。其使用格式是:
    #error token-string
    当程序在编译过程当中遇到这个关键字,就会停止编译,产生一个错误信息,并且输出后面的token-string。例如:
    #if !defined(__cplusplus)
    #error C++ compiler required.
    #endif
    上面这段代码的意思是在预编译期检查当前的程序是否是C++编程环境,如果不是,就定义#error,让编译器停止编译。#if和#endif会在后面介绍,这里只需要将#if视为普通的if判断语句,将#endif看成是if判断的结束。
    #include使编译程序将#include所指向的源文件导入进当前的源文件,被包含的文件必须被尖括号或者引号包围起来。#if,#else,#elif,#endif,#ifdef和#ifndef属于条件编译命令,可以对程序的各个部分有选择地进行编译。#undef命令用来取消前面定义过的宏名。例如:
    #define NUMBER 10
    int _tmain(int argc, _TCHAR* argv[])
    {
    #ifdef NUMBER
        cout << NUMBER << endl;                     // 输出10
    #endif
    #undef NUMBER
    #ifdef NUMBER
        cout << NUMBER << endl;
    #else
        cout << "找不到NUMBER定义" << endl;         // 输出“找不到NUMBER定义”
    #endif
        return 0;
    }
    在程序的第1行定义了NUMBER宏,在第6行输出10。在第8行取消NUBMER宏的定义,所以后面会输出“找不到NUMBER定义”。
    11.5.2利用预定义的宏指令进行有条件编译
    预定义宏#if,#else,#elif,#endif,#ifdef和#ifndef都是条件编译命令。所谓条件编译,就是可以将源文件中的代码分成几个部分,有选择地编译各个部分。对于前三个宏#if,#else和#elif,可以理解为if,else和else if,#endif表示这个条件编译选择的结束。看下面的程序:
    #define NUMBER 5
    int main(int argc, _TCHAR* argv[])
    {
    #if NUMBER == 10
        cout << "Number is equal to 10." << endl;
    #elif NUMBER == 5
     cout << "Number is equal to 5." << endl;
    #else
        cout << "Others." << endl;
    #endif
        return 0;
    }
    程序的第1行定义NUMBER宏,令其等于5。后面的代码判断是否等于相应的值,选择性地编译后面的语句,由于定义NUMBER等于5,编译器输出“Number is equal to 5”。
    另一种条件编译的方式就是使用#ifdef和#ifndef。同样,这两个命令也用#endif作为作用域的结束。#ifdef判断后面的标识符是否被定义,通常都是指预定义的宏,#ifndef就是#ifdef的取反。看下面的程序:
    #define DEBUG
    int main(int argc, _TCHAR* argv[])
    {
    #ifdef DEBUG
        cout << "Debug version." << endl;
    #endif
        return 0;
    }
    第4行判断是否定义DEBUG标识符(在第1行定义),然后编译后面的语句。
  • 相关阅读:
    gc的real时间比user时间长
    java 反射: 当Timestamp类型的属性值为null时,设置默认值
    多线程注意点
    多线程socket编程示例
    一个类有两个方法,其中一个是同步的,另一个是非同步的; 现在又两个线程A和B,请问:当线程A访问此类的同步方法时,线程B是否能访问此类的非同步方法?
    含有Date和Timestamp的Java和Json互相转化
    java bean、List、数组、map和Json的相互转化
    并发抢购
    SQL 性能调优日常积累【转】
    String和包装类IntegerDoubleLongFloatCharacter 都是final类型
  • 原文地址:https://www.cnblogs.com/tangjunjun/p/11676501.html
Copyright © 2011-2022 走看看