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

    C++ 预处理器

    预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。

    所有的预处理器指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前。预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾。

    我们已经看到,之前所有的实例中都有 #include 指令。这个宏用于把头文件包含到源文件中。

    C++ 还支持很多预处理指令,比如 #include、#define、#if、#else、#line 等,让我们一起看看这些重要指令。

    #define 预处理

    #define 预处理指令用于创建符号常量。该符号常量通常称为

    参数宏

    您可以使用 #define 来定义一个带有参数的宏

    #define MIN(a,b) (a<b ? a : b)

    条件编译

    有几个指令可以用来有选择地对部分程序源代码进行编译。这个过程被称为条件编译。

    条件预处理器的结构与 if 选择结构很像。

    #ifndef NULL
       #define NULL 0
    #endif


    如果在指令 #ifdef DEBUG 之前已经定义了符号常量 DEBUG,则会对程序中的 cerr 语句进行编译。您可以使用 #if 0 语句注释掉程序的一部分,如下所示:
    #if 0
       不进行编译的代码
    #endif


    # 和 ## 运算符

    # 和 ## 预处理运算符在 C++ 和 ANSI/ISO C 中都是可用的。# 运算符会把 replacement-text 令牌转换为用引号引起来的字符串。

    请看下面的宏定义:

    #include <iostream>

    using namespace std;

    #define MKSTR( x ) #x

    int main ()

    { cout << MKSTR(HELLO C++) << endl;

    return 0; }

    ## 运算符用于连接两个令牌。下面是一个实例:

    #define CONCAT( x, y )  x ## y


    当 CONCAT 出现在程序中时,它的参数会被连接起来,并用来取代宏。例如,程序中 CONCAT(HELLO, C++) 会被替换为 "HELLO C++",如下面实例所示。
    #include <iostream>
    using namespace std;
    #define concat(a, b) a ## b
    int main()
    { int xy = 100;
    cout << concat(x, y);
    return 0; }

    C++ 中的预定义宏

    C++ 提供了下表所示的一些预定义宏:

    __LINE__ 这会在程序编译时包含当前行号。
    __FILE__ 这会在程序编译时包含当前文件名。
    __DATE__ 这会包含一个形式为 month/day/year 的字符串,它表示把源文件转换为目标代码的日期。
    __TIME__ 这会包含一个形式为 hour:minute:second 的字符串,它表示程序被编译的时间。

    #include <iostream>

    using namespace std;

    int main ()

    { cout << "Value of __LINE__ :" << __LINE__ << endl;

    cout << "Value of __FILE__ : " << __FILE__ << endl;

    cout << "Value of __DATE__ : " << __DATE__ << endl;

    cout << "Value of __TIME__ : " << __TIME__ << endl;

    return 0; }

    Value of __LINE__ : 6
    Value of __FILE__ : test.cpp
    Value of __DATE__ : Feb 28 2011
    Value of __TIME__ : 18:52:48
    
    
    
  • 相关阅读:
    ZOJ Problem Set–2417 Lowest Bit
    ZOJ Problem Set–1402 Magnificent Meatballs
    ZOJ Problem Set–1292 Integer Inquiry
    ZOJ Problem Set–1109 Language of FatMouse
    ZOJ Problem Set–1295 Reverse Text
    ZOJ Problem Set–1712 Skew Binary
    ZOJ Problem Set–1151 Word Reversal
    ZOJ Problem Set–1494 Climbing Worm
    ZOJ Problem Set–1251 Box of Bricks
    ZOJ Problem Set–1205 Martian Addition
  • 原文地址:https://www.cnblogs.com/nku-wangfeng/p/7745453.html
Copyright © 2011-2022 走看看