zoukankan      html  css  js  c++  java
  • 预处理指令--C语言

    ANSI标准C还定义了如下几个宏:

    __LINE__ 表示正在编译的文件的行号

    __FILE__ 表示正在编译的文件的名字

    __DATE__ 表示编译时刻的日期字符串,例如:“25 Dec 2014”

    __TIME__ 表示编译时刻的时间字符串,例如:“12:30:55”

    __STDC__ 判断该文件是不是定义成标准C程序

        如果编译器不是标准的,则可能仅支持以上宏的一部分,或根本不支持。当然编译器也有可能还提供其它预定义的宏名。注意:宏名的书写由标识符与两边各二条下划线构成。

    • #运算符

        #也是预处理?是的,先看下面例子:
    #define SQR(x) printf("The square of x is %d.
    ",((x)*(x)) );
        如果这样使用宏:
    SQR(8);
        则输出为:
     The square of x is 64.
    注意到没有,引号中的字符x被当作普通文本来处理,而不是被当作一个可以被替换的语言符号。
        假如你确实希望在字符串中包含宏参数,那我们就可以使用“#”,它可以把语言符号转化为字符串。上面的例子改一改:
    #define SQR(x) printf("The square of "#x" is %d.
    ",((x)*(x));
    再使用:
    SQR(8);
    则输出的是:
    The square of 8 is 64

    • ##预算符
        和#运算符一样,##运算符可以用于宏函数的替代部分。这个运算符把两个语言符号组合成单个语言符号。看例子:
    #define XNAME(n) x##n
        如果这样使用宏:
    XNAME(8)
        则会被展示成这样:
    x8
        看明白了没?##就是个粘合剂,将前后两部分粘合起来。

    • #pragma pack
        使用指令#pragma pack (n),编译器将按照n个字节对齐。
        使用指令#pragma pack (),编译器将取消自定义字节对齐方式。
    在#pragma pack (n)和#pragma pack ()之间的代码按n个字节对齐。


  • 相关阅读:
    Leetcode 121. Best Time to Buy and Sell Stock
    Leetcode 120. Triangle
    Leetcode 26. Remove Duplicates from Sorted Array
    Leetcode 767. Reorganize String
    Leetcode 6. ZigZag Conversion
    KMP HDU 1686 Oulipo
    多重背包 HDU 2844 Coins
    Line belt 三分嵌套
    三分板子 zoj 3203
    二分板子 poj 3122 pie
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6332283.html
Copyright © 2011-2022 走看看