2012-03-01 19 views
0

プリプロセッサでインクリメントできる「グローバル変数」を作成しようとしています。マクロの再定義

たとえば、abc1と定義しました。私は次回に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; 
} 
+0

あなたはこれと正確に何をしようとしていますか?おそらく、マクロ虐待よりも良い方法があります。 – Mysticial

+0

私はabcの番号を追跡しようとしています。そして、それをコンパイル時に使用します。 –

+0

@NegativeZero、cog:http://nedbatchelder.com/code/cog/ lot cleanerを使用して、そのマクロ混乱を処理してください。この回答をチェックすると、関連する可能性のある例が表示されます。http://stackoverflow.com/questions/2506167/c-macros-with-memory/9455483#9455483 – lurscher

答えて

2

です。おそらく、達成しようとしている根本的な目標についてこれを再考する必要がありますか?プリプロセッサの値を増やすことの根本的な目的が何であるかは述べていません。

関連する問題