如何編寫一個接收兩個參數的宏(例如,給出3
和2
)會返回以下輸出?如何在預處理器宏中對運算結果進行串化處理
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);
與a
和b
出臺之前調用它...
如何編寫一個接收兩個參數的宏(例如,給出3
和2
)會返回以下輸出?如何在預處理器宏中對運算結果進行串化處理
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);
與a
和b
出臺之前調用它...
您可以使用printf
而不是puts
類似的東西。
#define SOMMA(x, y) printf("sum of %d and %d is %d\n", x, y, (x + y));
注意%d
只接受整數值,所以你可能需要另一個宏的雙/浮動。
編輯
由於rcgdlr指出,你也可以,如果你想創建一個包含結果的字符串中使用sprintf
或snprintf
。
#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);
或者如果目標是產生一個字符串,可以使用sprintf。 – rcgldr
#define SOMMA(x, y) printf("The Sum Of A = %d and B= %d is %d",a,b,(a+b))
我認爲你正在尋找的預處理 '#' 操作。看到,例如,https://gcc.gnu.org/onlinedocs/cpp/Stringification.html(不要重寫,作爲一個完整的答案現在,他們的描述是一個很好的BTW,谷歌發現這很容易,儘管它有助於知道你在找什麼。) – keshlam