0
プリプロセッサでインクリメントできる「グローバル変数」を作成しようとしています。マクロの再定義
たとえば、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;
}
あなたはこれと正確に何をしようとしていますか?おそらく、マクロ虐待よりも良い方法があります。 – Mysticial
私はabcの番号を追跡しようとしています。そして、それをコンパイル時に使用します。 –
@NegativeZero、cog:http://nedbatchelder.com/code/cog/ lot cleanerを使用して、そのマクロ混乱を処理してください。この回答をチェックすると、関連する可能性のある例が表示されます。http://stackoverflow.com/questions/2506167/c-macros-with-memory/9455483#9455483 – lurscher