Macro and function with same name

前端 未结 5 875
我在风中等你
我在风中等你 2020-12-01 15:00

I have the following code

#define myfunc(a,b) myfunc(do_a(a), do_b(b))

void myfunc(int a, int b)
{
  do_blah(a,b);
}
int main()
{
    int x = 6, y = 7;
             


        
5条回答
  •  庸人自扰
    2020-12-01 15:37

    Use () to stop the preprocessor from expanding the function definition:

    #include 
    
    #define myfunc(a, b) myfunc(do_a(a), do_b(b))
    /* if you have a preprocessor that may be non-standard
     * and enter a loop for the previous definition, define
     * myfunc with an extra set of parenthesis:
    #define myfunc(a, b) (myfunc)(do_a(a), do_b(b))
     ******** */
    
    int (myfunc)(int a, int b) /* myfunc does not get expanded here */
    {
        printf("a=%d; b=%d\n", a, b);
        return 0;
    }
    
    int do_a(int a)
    {
        return a * 2;
    }
    
    int do_b(int b)
    {
        return b - 5;
    }
    
    int main(void)
    {
        myfunc(4, 0);
        return 0;
    }
    

提交回复
热议问题