2015-07-20 79 views
4

如何編寫一個接收兩個參數的宏(例如,給出32)會返回以下輸出?如何在預處理器宏中對運算結果進行串化處理

The sum of 3 and 2 is 5 

這是我寫的,但它並不編譯:

#define SOMMA(x, y) puts("La somma di " #x " e " #y " e' " #(x+y)); 

SOMMA (a, b); 

ab出臺之前調用它...

+0

我認爲你正在尋找的預處理 '#' 操作。看到,例如,https://gcc.gnu.org/onlinedocs/cpp/Stringification.html(不要重寫,作爲一個完整的答案現在,他們的描述是一個很好的BTW,谷歌發現這很容易,儘管它有助於知道你在找什麼。) – keshlam

回答

3

您可以使用printf而不是puts類似的東西。

#define SOMMA(x, y) printf("sum of %d and %d is %d\n", x, y, (x + y)); 

注意%d只接受整數值,所以你可能需要另一個宏的雙/浮動。

編輯

由於rcgdlr指出,你也可以,如果你想創建一個包含結果的字符串中使用sprintfsnprintf

#define MAXLEN 256 
#define SOMMA(x, y, res) snprintf(res, MAXLEN, "sum of %d and %d is %d\n", x, y, (x + y)); 

使用它這樣的:

char buffer[MAXLEN]; 
SOMMA(4, 6, buffer); 
printf("%s\n", buffer); 
+0

或者如果目標是產生一個字符串,可以使用sprintf。 – rcgldr

0
#define SOMMA(x, y) printf("The Sum Of A = %d and B= %d is %d",a,b,(a+b))