C宏具有灵活的参数

时间:2015-07-11 06:52:49

标签: c gcc macros

我需要做类似的事情:

<div class="container">
    @include('errors.list')

    {!! Form::open(['url' => '/admin/products', 'autocomplete' => 'off', 'files' => true]) !!}
        @include('admin.products.product_general_form', ['submitButtonText' => 'Add Product'])
    {!! Form::close() !!}
</div>

我收到以下错误:

    sh-4.3$ gcc -o main*.c                                                                                                                                              
    main.c: In function 'main':                                                                                                                                          
    main.c:6:8: error: expected expression before ')' token                                                                                                              
     if(ARGS) \                                                                                                                                                          
            ^                                                                                                                                                            
    main.c:15:5: note: in expansion of macro 'INCR'                                                                                                                      
         INCR(count);                                                                                                                                                    
         ^                                                                                                                                                               
    sh-4.3$

这里计数器只有在标志存在时才会增加。我需要一个具有灵活参数数量的宏。请帮帮我

1 个答案:

答案 0 :(得分:0)

根据https://stackoverflow.com/a/11763277/5085250中的示例,您可以执行以下操作:

#define GET_MACRO(_1,_2,NAME,...) NAME
#define INCR(...) GET_MACRO(__VA_ARGS__, INCR2, INCR1)(__VA_ARGS__)

#define INCR1(count)\
count++;

#define INCR2(count,flag)\
if(flag)count++;

这里我假设你想在没有给出标志的情况下增加。如果你不想在这种情况下增加,你需要修改INCR1部分......