带内存的C宏
发布时间:2020-12-16 06:59:03 所属栏目:百科 来源:网络整理
导读:这最初是作为 c++ macros with memory?的答案发布的 但不知怎的,我无法得到这个编译.我可能会在这里遗漏一些东西. (我觉得这是C可以做的事情) main.cpp中 #include iostreamusing namespace std;const char * hello = "hello";const char * world = "world";
这最初是作为
c++ macros with memory?的答案发布的
但不知怎的,我无法得到这个编译.我可能会在这里遗漏一些东西. (我觉得这是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 我真的想让这个记忆在预处理阶段起作用.有人可以帮忙吗?我认为1.49中的BOOST_PP_COUNTER也使用这种技术,但我无法弄清楚如何. 解决方法
您只使用一个VAR值(最后一个),因为它只能使用一个值.如果你想根据上下文用VAR表示不同的东西,你需要在每个include之后有源语句.
#define xstr(a) str(a) #define str(a) #a int main() { #define MEMORIZE world #include "memorize.h" cout << VAR << endl; #undef MEMORIZE #define MEMORIZE hello #include "memorize.h" cout << VAR << endl; return 0; } memorize.h: #undef VAR #ifndef MEMORIZE # error "No Argument to memorize.h" #endif #define VAR xstr(MEMORIZE) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |