Макросы препроцессора с несколькими линиями
Как сделать многострочный макрос препроцессора? Я знаю, как сделать одну строку:
#define sqr(X) (X*X)
но мне нужно что-то вроде этого:
#define someMacro(X) class X : public otherClass { int foo; void doFoo(); };
Как я могу заставить это работать?
- Сначала препроцессор C комментирует или расширяет macros?
- Когда macros C ++ полезны?
- Выход препроцессора Xcode
- Для чего нужны macros C?
- Препроцессор C ++ идентичен препроцессору C?
Это всего лишь пример, реальный макрос может быть очень длинным.
- C #define макрос для отладочной печати
- Какова ценность неопределенной константы, используемой в #if?
- Просмотр расширенных макросов C
- Как использовать #if внутри #define в препроцессоре C?
- Что означает «#define STR (a) #a»?
- Каковы допустимые символы для имен макросов?
- Изменение макроса во время выполнения в C
- C ++ concat два строковых литерала `const char`
Вы используете символ escape-символа продолжения строки.
#define swap(a, b) { \ (a) ^= (b); \ (b) ^= (a); \ (a) ^= (b); \ }
EDIT: Как отметил @abelenky в комментариях, символ \
должен быть последним символом на линии . Если это не так (даже если это просто пробел после этого), вы получите путаные сообщения об ошибках в каждой строке после него.
Вы можете сделать несколько строк макроса, поместив обратную косую черту ( \
) в конце каждой строки:
#define F(x) (x) \ * \ (x)
ПОЖАЛУЙСТА, ОБРАТИТЕСЬ, как указано в заявлении Kerrek SB и coaddict, о котором должно было быть указано в принятом ответе, ВСЕГДА размещайте фигурные скобки вокруг ваших аргументов. Пример sqr – это простой пример, преподаваемый на курсах CompSci.
Вот проблема: если вы определяете ее так, как вы делали то, что происходит, когда вы говорите «sqr (1 + 5)»? Вы получаете «1 + 5 * 1 + 5» или 11
Если вы правильно разместите фигурные скобки вокруг него, #define sqr(x) ((x)*(x))
вы получаете ((1 + 5) * (1 + 5)) или то, что нам нужно 36 … красиво.
У Ed S. будет такая же проблема с «swap»,
Вам нужно уйти от новой строки в конце строки, экранируя ее с помощью \
:
#define sqr(X) \ ((X)*(X))