带内存的C宏

带内存的C宏,第1张

概述这最初是作为 c++ macros with memory?的答案发布的 但不知怎的,我无法得到这个编译.我可能会在这里遗漏一些东西. (我觉得这是C可以做的事情) main.cpp中 #include <iostream>using namespace std;const char * hello = "hello";const char * world = "world";#def 这最初是作为 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.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宏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1225859.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存