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
  • 相关阅读:
    [bzoj1263]整数划分
    [bzoj3171]循环格
    [bzoj3551]Peaks加强版
    [bzoj3307]雨天的尾巴
    [bzoj2756]奇怪的游戏
    [bzoj4025]二分图
    人比人该死啊
    数据挖掘十大经典算法[0]-K-Means算法
    ISODATA算法
    CodeForces Round 197 Div2
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/4490115.html
Copyright © 2011-2022 走看看