Ошибка при определении простого макроса в C ++

0

Я новичок в использовании макросов в c++. Я написал короткий макрос, и я не знаю, что с ним не так. Пожалуйста помоги.

#include <iostream>
using namespace std;

#define start B(
#define end )
#define B(x) cout<<x; 


int main (int argc, char *argv[])
{
    start 2014 end
}
Показать ещё 2 комментария
Теги:
macros

1 ответ

7
Лучший ответ

Препроцессор C не работает так, как вы ожидаете. Макросы расширяются за один проход, это означает, что препроцессор заменит "start" на "B (" и "end" на ")" и даст результат компилятору.

Поскольку второй проход предварительной обработки отсутствует, промежуточный результат "B (2014)" не будет интерпретироваться как макрос препроцессора. Вместо этого компилятор C++ видит вызов функции, который вам не нужен.

  • 0
    Спасибо за объяснение. Но если это происходит за один проход, почему это работает: #define start B #define end; #define B (x) cout << x; int main (int argc, char * argv []) {начало (2014) конец
  • 0
    @ user3132631 start будет расширен до B , распознан как имя макроса и снова развернут за тот же проход . Кстати, end здесь не требуется, так как он будет расширен до лишней точки с запятой.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню