zoukankan      html  css  js  c++  java
  • C/C++ 中的宏

    预定义 的 宏

    标准C中定义了一些对象宏, 这些宏的名称以"__"开头和结尾, 并且都是大写字符. 这些预定义宏可以被#undef, 也可以被重定义.

    下面列出一些标准C中常见的预定义对象宏

    __LINE__           当前语句所在的行号, 以10进制整数标注.
    __FILE__           当前源文件的文件名, 以字符串常量标注.
    __DATE__           程序被编译的日期, 以"Mmm dd yyyy"格式的字符串标注.
    __TIME__           程序被编译的时间, 以"hh:mm:ss"格式的字符串标注, 该时间由asctime返回.
    
    __STDC__           如果当前编译器符合ISO标准, 那么该宏的值为1
    __STDC_VERSION__   如果当前编译器符合C89, 那么它被定义为199409L, 如果符合C99, 那么被定义为199901L. 
                       我用gcc, 如果不指定-std=c99, 其他情况都给出__STDC_VERSION__未定义的错误信息, 咋回事呢?
    __STDC_HOSTED__    如果当前系统是"本地系统(hosted)", 那么它被定义为1. 本地系统表示当前系统拥有完整的标准C库.
    

    常用的预处理命令

    预处理命令由#(hash字符)开头, 它独占一行, #之前只能是空白符. 以#开头的语句就是预处理命令,不以#开头的语句为C中的代码行。

    常用的预处理命令如下:

    #define              定义一个预处理宏
    #undef               取消宏的定义
    
    #include             包含文件命令
    #include_next        与#include相似, 但它有着特殊的用途
    
    #if                  编译预处理中的条件命令, 相当于C语法中的if语句
    #ifdef               判断某个宏是否被定义, 若已定义, 执行随后的语句
    #ifndef              与#ifdef相反, 判断某个宏是否未被定义
    #elif                若#if, #ifdef, #ifndef或前面的#elif条件不满足, 则执行#elif之后的语句, 相当于C语法中的else-if
    #else                与#if, #ifdef, #ifndef对应, 若这些条件不满足, 则执行#else之后的语句, 相当于C语法中的else
    #endif               #if, #ifdef, #ifndef这些条件命令的结束标志.
    defined              与#if, #elif配合使用, 判断某个宏是否被定义
    
    #line                标志该语句所在的行号
    #                    将宏参数替代为以参数值为内容的字符窜常量
    ##                   将两个相邻的标记(token)连接为一个单独的标记
    #pragma              说明编译器信息
    
    #warning             显示编译警告信息
    #error               显示编译错误信息
    
  • 相关阅读:
    poj 1007:DNA Sorting(水题,字符串逆序数排序)
    蓝桥杯北京之旅【第二篇·2014.5.31】
    poj 1006:Biorhythms(水题,经典题,中国剩余定理)
    蓝桥杯北京之旅【第一篇·2014.5.30】
    【2014年6月份日常记录表(2014.6.1—6.30,30天)】
    poj 1002:487-3279(水题,提高题 / hash)
    ThreadPoolExecutor机制探索-我们到底能走多远系列(41)
    ibatis批量操作补充
    Maven管理 划分模块
    顺序队列实现任务以此执行-任务调度系列2
  • 原文地址:https://www.cnblogs.com/yangyuqing/p/10528642.html
Copyright © 2011-2022 走看看