zoukankan      html  css  js  c++  java
  • C++:预处理指令

    Preprocessor directives 预处理器指令

    预处理器指令是指那些包含在我们代码中的预处理器语句行,这些预处理器语句不是真正的代码语句,但是他们指导程序如何进行编译.这些语句总是以 ‘#’ 开头.预处理器指令在代码真正编译开始之前执行,因此在任何语句生成代码之前预处理器移除所有的预处理指令。
    一条预处理指令仅占一行.只要发现新行的存在就认为预处理语句结束了.预处理语句后面不能加“; . 将一条预处理指令扩展为多行的唯一方法是在每行语句后面加上 反斜杠 “.
    macro definitions (#define, #undef)

    我们可以使用 #define定义预处理宏. 格式如下:
    #define identifier replacement


    #undef 取消宏定义指令  格式如下:

    #undef macro

     

     ##  作用是 黏贴俩符号:

    1
    2

    #define glue(a,b) a ## b

    glue(c,out) << "test";


    上述的代码会被处理成:

     

    cout << "test";

     

    条件包含指令(#ifdef, #ifndef, #if, #endif, #else and #elif)


    行控制指令 (#line)

    当我们编译一个程序,编译过程中由错误发生的时候,编译器会显示错误信息支出哪个文件哪一行发生错误,以便我们更方便找到并处理错误


     #line 指令允许我们对这种方式进行控制,当错误发生的时候,错误所在行号和文件名都会被显示. 使用格式如下: 
    #line number "filename"

    1
    2

    #line 20 "assigning variable"

    int a?;




    错误指令 (#error)

    当发现该指令的时候终止编译进程, 产生一个编译错误,并且将错误作为参数:

    1
    2
    3

    #ifndef __cplusplus

    #error A C++ compiler is required!

    #endif



    Source file inclusion (#include)

    Pragma  指令(#pragma)

    该指令通常用于指定编译器的不同选项.这些选项与你所用的平台和编译器相关. 请查阅你的编译器手册或指南来获取更多关于#pragma指令参数的信息。

    如果你的编译器不支持 #pragma指令 , 预处理器就会忽略该指令,而不会产生任何错误。

    预定义的宏名

    一下的几个宏在任何时候都被定义:

    macro

    value

    __LINE__

    代表当前被编译文件所处的行的行号

    __FILE__

    当前被编译文件的文件名

    __DATE__

    当前编译开始时的日期 形式为 “月//年”

    __TIME__

    编译进程开始时的时间 , 形式为 “时:分:秒”

    __cplusplus

    一个整型值. 所有的C++编译器都将这个宏定义为某个整型值.如果编译器完全符合C++标准的话,根据其遵循的C++标准版本,这个值应该大于等于1997 11L


    例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    // standard macro names

    #include <iostream>

    using namespace std;

     

    int main()

    {

      cout << "This is the line number " << __LINE__;

      cout << " of file " << __FILE__ << ". ";

      cout << "Its compilation began " << __DATE__;

      cout << " at " << __TIME__ << ". ";

      cout << "The compiler gives a __cplusplus value of " <<

              __cplusplus;

      return 0;

    }

    This is the line number 7 of file /home/jay/stdmacronames.cpp.

    Its compilation began Nov  1 2005 at 10:12:29.

    The compiler gives a __cplusplus value of 1

     

  • 相关阅读:
    何时使用Hibernate (Gavin King的回答)
    Transaction in ADO.net 2.0
    CollectionClosureMethod in .Net
    如何实现真正的随机数
    如何测试私有方法?(TDD)
    try catch 块的使用原则
    多态小quiz
    A simple way to roll back DB pollution in Test
    一个画图程序的演变
    当前软件开发的反思
  • 原文地址:https://www.cnblogs.com/wowk/p/3219913.html
Copyright © 2011-2022 走看看