但不知怎的,我无法得到这个编译.我可能会在这里遗漏一些东西. (我觉得这是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.oerror: 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 1make[1]: *** [CMakefiles/main.dir/all] Error 2make: *** [all] Error 2
我真的想让这个记忆在预处理阶段起作用.有人可以帮忙吗?我认为1.49中的BOOST_PP_COUNTER也使用这种技术,但我无法弄清楚如何.
解决方法 您只使用一个VAR值(最后一个),因为它只能使用一个值.如果你想根据上下文用VAR表示不同的东西,你需要在每个include之后有源语句.#define xstr(a) str(a)#define str(a) #aint 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)总结
以上是内存溢出为你收集整理的带内存的C宏全部内容,希望文章能够帮你解决带内存的C宏所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)