Переопределение макроса - PullRequest
0 голосов
/ 02 марта 2012

Я пытаюсь создать «глобальную переменную» в препроцессоре, которую можно увеличить.

Например, я определил abc как 1.Могу ли я переопределить его в 2 в следующий раз (я получаю ошибку переопределения при этом)?Нужно ли сначала использовать undef?Но я получил ошибку компиляции при использовании undef.

Как правильно сделать что-то подобное?

[100%] Building CXX object CMakeFiles/main.dir/main.cpp.o

error: use of undeclared identifier 'BOOST_PP_INC_abc'

    std::cout << temp << endl;

note: instantiated from:

    #define temp BOOST_PP_INC(abc)

note: instantiated from:

    #define BOOST_PP_INC(x) BOOST_PP_INC_I(x)
note: instantiated from:

    #define BOOST_PP_INC_I(x) BOOST_PP_INC_ ## x

<scratch space>:150:1: note: instantiated from: BOOST_PP_INC_abc

1 error generated.
make[2]: *** [CMakeFiles/main.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/main.dir/all] Error 2
make: *** [all] Error 2

Вот код

#include <iostream>
#include <boost/preprocessor/slot/counter.hpp>
#include <boost/preprocessor/arithmetic/add.hpp>
using namespace std;

int main() {
    std::cout << "Hello" << std::endl;

    #define abc 1
    #define temp BOOST_PP_INC(abc)
    #undef abc

    std::cout << temp << endl;
    return 0;
}

1 Ответ

2 голосов
/ 02 марта 2012

Боюсь, вы не можете изменить значение макросов препроцессора внутри препроцессора.Возможно, вам следует переосмыслить это с точки зрения основной цели, которую вы пытаетесь достичь?Вы не указали, какой будет основная цель приращения значения препроцессора.

...