zoukankan      html  css  js  c++  java
  • c++11 : Variadic Macros(变长参宏)

    Variadic macros are function-like macros that contain a variable number of arguments.

    Remarks

     

    To use variadic macros, the ellipsis may be specified as the final formal argument in a macro definition, and the replacement identifier __VA_ARGS__ may be used in the definition to insert the extra arguments. __VA_ARGS__ is replaced by all of the arguments that match the ellipsis, including commas between them.

    The C Standard specifies that at least one argument must be passed to the ellipsis, to ensure that the macro does not resolve to an expression with a trailing comma. The Visual C++ implementation will suppress a trailing comma if no arguments are passed to the ellipsis.

    Example

     
     
    // variadic_macros.cpp
    #include <stdio.h>
    #define EMPTY
    
    #define CHECK1(x, ...) if (!(x)) { printf(__VA_ARGS__); }
    #define CHECK2(x, ...) if ((x)) { printf(__VA_ARGS__); }
    #define CHECK3(...) { printf(__VA_ARGS__); }
    #define MACRO(s, ...) printf(s, __VA_ARGS__)
    
    int main() {
        CHECK1(0, "here %s %s %s", "are", "some", "varargs1(1)
    ");
        CHECK1(1, "here %s %s %s", "are", "some", "varargs1(2)
    ");   // won't print
    
        CHECK2(0, "here %s %s %s", "are", "some", "varargs2(3)
    ");   // won't print
        CHECK2(1, "here %s %s %s", "are", "some", "varargs2(4)
    ");
    
        // always invokes printf in the macro
        CHECK3("here %s %s %s", "are", "some", "varargs3(5)
    ");
    
        MACRO("hello, world
    ");
    
        MACRO("error
    ", EMPTY); // would cause error C2059, except VC++ 
                                 // suppresses the trailing comma
    }
    

    Output

     
     
     
    here are some varargs1(1)
    here are some varargs2(4)
    here are some varargs3(5)
    hello, world
    error
  • 相关阅读:
    poj 3613(经过N条边的最短路)
    poj 3328(多起点多终点的最短路)
    poj 3311(floyd+状态压缩)
    新CCIE笔记-IP网络基础
    新CCIE笔记-IP网络基础
    算法之【冒泡排序法】
    算法之【冒泡排序法】
    算法之【冒泡排序法】
    算法之【辗转相除法】
    算法之【辗转相除法】
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/4490115.html
Copyright © 2011-2022 走看看