2015-07-20 4 views
4

Как написать макрос, который получает два аргумента и (например, 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 введены раньше ...

+0

Я думаю, что вы ищете '#' работы препроцессора. См. Например, https://gcc.gnu.org/onlinedocs/cpp/Stringification.html (Не переписывать это как полный ответ прямо сейчас, а их описания - все равно. Кстати, Google нашел это довольно легко, хотя он помогает узнать, что вы ищете.) – keshlam

ответ

3

Вы можете использовать printf вместо puts и делать что-то вроде того.

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

Примечание %d принимает только целые значения, так что вы, возможно, потребуется еще один макрос для двойных/поплавков.

EDIT

Как 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); 
+0

или использовать sprintf, если целью является создание строки. – rcgldr

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

 Смежные вопросы

  • Нет связанных вопросов^_^