Я новичок в использовании макросов в 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
}
Препроцессор C не работает так, как вы ожидаете. Макросы расширяются за один проход, это означает, что препроцессор заменит "start" на "B (" и "end" на ")" и даст результат компилятору.
Поскольку второй проход предварительной обработки отсутствует, промежуточный результат "B (2014)" не будет интерпретироваться как макрос препроцессора. Вместо этого компилятор C++ видит вызов функции, который вам не нужен.
start
будет расширен до B
, распознан как имя макроса и снова развернут за тот же проход . Кстати, end
здесь не требуется, так как он будет расширен до лишней точки с запятой.