2011-04-23 73 views
2

如何創建帶多個括號的宏?我不需要可變數量的參數,我只是想能夠像我一樣調用我的宏。帶多個括號的宏

MY_MACRO(arg0, arg1)(arg2) 

...而不是:

MY_MACRO(arg0, arg1, arg2) 

更新:

比方說,我有一個宏定義等; #define MY_MACRO(a, b, c) (a*b/c)並稱爲MY_MACRO(1,2,3)。我如何變換這個宏被稱爲像MY_MACRO(1, 2)(3)

即,我想要做的是像往常一樣寫我的宏,只需要在它自己的括號中的最後一個參數。

回答

4
#define MY_MACRO(a, b) a, b, MY_MACRO1 
#define MY_MACRO1(c) c 

現在做

MY_MACRO(arg0, arg1)(arg2) 

會做

MY_MACRO(arg0, arg1)(arg2) 
a, b, MY_MACRO1 (arg2) 
arg0, arg1, MY_MACRO1 (arg2) 
arg0, arg1, c 
arg0, arg1, arg2 
+0

嗯,所以,如果我原來的宏定義是'#定義MY_MACRO(A,B,C)(一* b/c)',我會在哪裏,但在第二個版本的實際代碼? – 2011-04-23 12:22:41

+0

@Viktor,我不明白。我以爲你想要一個兩個參數的宏。 – 2011-04-23 12:23:36

+0

對不起,如果我正在模糊,更新了問題 – 2011-04-23 12:26:54

1
#include <iostream> 
using namespace std; 

#define MY_MACRO(a, b) (a * b)/ MY_MACRO1 
#define MY_MACRO1(c) c 

int main() { 
    int n = MY_MACRO(5,6)(3); 
    cout << n << endl; 
} 
+0

如果代碼是(a + c + b),即我想在另一個地方使用c參數而不是結尾? – 2011-04-23 21:57:12