Могу ли я использовать в макросах C и C ++ определения макросов, содержащие пробел? - PullRequest
3 голосов
/ 25 июня 2010

Мне интересно, могут ли определения макросов содержать пробел. Давайте возьмем для примера этот код:

#define MACRO_PARAM int param2

int function(int param1, MACRO_PARAM)
{
    return param1+param2;
}

Это нормально работает с Visual Studio 8 и gcc 3.4.5 (mingw). Для меня это достаточно хорошо на данный момент, но это стандарт? или я могу полагаться на это поведение в разных компиляторах?

Спасибо

Юлиан

PS: Чтобы ответить на вопрос why would you wanna do that?: я использую bison flex для проекта и пытаюсь сделать что-то реентерабельное (мне нужно объявить несколько макросов для параметров функции).

Ответы [ 4 ]

6 голосов
/ 25 июня 2010

Вам необходимо завершить каждую строку определения знаком \ (кроме последней).

3 голосов
/ 25 июня 2010

Да, вы можете, конечно, иметь несколько слов (в действительности, многострочных) расширений до макросов препроцессора в любом удаленно совместимом компиляторе.Макросы Си довольно неприятны, но если бы они даже не могли этого сделать, они были бы в основном бесполезны.

Синтаксис препроцессора может сделать довольно много (достаточно, чтобы его легко злоупотреблять).См. Раздел 6.10.3 стандарта ISO-9899 ( PDF ), если вы хотите или нуждаетесь в легалистической главе и стихе.

2 голосов
/ 25 июня 2010

Да, вы можете положиться на это поведение.

2 голосов
/ 25 июня 2010

Да, вы можете сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...