Первоначально опубликовано как ответ на макросы c ++ с памятью?
Но почему-то я не могу это скомпилировать. Я мог бы что-то здесь упустить. (У меня есть ощущение, что это то, что может сделать C ++)
main.cpp
#include <iostream>
using namespace std;
const char * hello = "hello";
const char * world = "world";
#define VAR
#define MEMORIZE world
#include "memorize.h"
#define MEMORIZE hello
#include "memorize.h"
int main() {
cout << VAR << endl;
return 0;
}
memorize.h
#undef VAR
#ifndef MEMORIZE
# error "No Argument to memorize.h"
#endif
#define VAR MEMORIZE
#undef MEMORIZE
Я получаю сообщение об ошибке компиляции:
[100%] Building CXX object CMakeFiles/main.dir/main.cpp.o
error: use of undeclared identifier 'MEMORIZE'
cout << VAR << endl;
^
note: instantiated from:
#define VAR MEMORIZE
^
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
Я действительно хочу, чтобы эта память работала на этапе предварительной обработки. Может кто-нибудь помочь? Я думаю, BOOST_PP_COUNTER
в 1.49
также использует эту технику, но я не мог понять, как.