2015-09-29 2 views
1

Рассматривая следующую строку:Строка в макрос с аргументами в C

Page 1 of 100 

Где 1 и 100 не фиксированные значения.

Как я могу определить макрос C, чтобы отобразить эту строку, передав два значения в качестве аргументов?

Чтобы быть ясно, формат должен быть следующим:

#define PAGE_IDX_MACRO(x,y) 
+0

И так как вы сказали «строка», даже если вы не использовали кавычки: Посмотрите оператор stringize. –

ответ

8

Оператор # преобразует маркер препроцессора в строку буквального.

Строковые литералы объединены в C, просто добавив промежуток между ними, т.е. "hello" "world" эквивалентен "helloworld".

Так макрос должен быть:

#define PAGE_IDX_MACRO(x, n) ("Page " #x " of " #n) 

Если предположить, что это называется так:

PAGE_IDX_MACRO(1, 100); 

Где 1 и 100 являются константы времени компиляции.

0

Вы можете объединять строки с помощью двойной хэш тег:

## обеспечивает способ [сцепить фактические аргументы] [1] во время макрообъем.

[1]: http://publib.boulder.ibm.com/infocenter/comphelp/v7v91/index.jsp?topic=/com.ibm.vacpp7a.doc/language/ref/clrc09numnum.htm

от этого вопроса:

What do two adjacent pound signs mean in a C macro?

+0

Хотя я не уверен, что это действительно необходимо здесь - '#define PAGE_IDX_MACRO (x, y) Страница x of y' должна делать, возможно, стробировать, возможно, используя другую препроцессорную косвенность. Я думаю, что здесь нет ничего общего. –