宏重新定义

时间:2012-03-01 20:58:32

标签: c++ macros c-preprocessor

我正在尝试在预处理器中创建一个可以递增的“全局变量”。

例如,我已将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 个答案:

答案 0 :(得分:2)

您不能更改预处理器内的预处理器宏的值。也许您应该根据您要完成的基本目标重新考虑这一点?您还没有说明增加预处理器值的基本目的是什么。