读书人

用宏会实现类似这样的效果么

发布时间: 2012-09-10 11:02:32 作者: rapoo

用宏能实现类似这样的效果么?
写了一段代码

C/C++ code
#include <stdio.h>#ifdef READ#define CONFIG(xx)  { printf("READ: %s\n", xx); }#elif defined(WRITE)#define CONFIG(xx)  { printf("WRITE: %s\n", xx); }#endif#define DO()  CONFIG("aa"); CONFIG("bb");int main(){  #define READ  DO()  #undef READ  #define WRITE  DO();  return 0;}

希望在main中先以READ模式展开DO 再以WRITE的模式展开DO ,
但以上的代码是达不到这样的目的的.
有简单的办法么?


[解决办法]
分一个文件出来 xxx.h

#ifdef READ
#define CONFIG(xx) { printf("READ: %s\n", xx); }
#elif defined(WRITE)
#define CONFIG(xx) { printf("WRITE: %s\n", xx); }
#endif
#define DO() CONFIG("aa"); CONFIG("bb");

然后:

int main(){
#define READ
#include "xxx.h"
DO()
#undef READ
#define WRITE
#include "xxx.h"
DO();
return 0;
}
[解决办法]
inlcude 拼写错误, 是 include
[解决办法]
探讨

谢谢.我也想到了这种方法,在linux下可以.
但是改到vs2010下似乎不让这么用

#undef CONFIG_WRITE
#define CONFIG_READ
#inlcude "Config.MACRO.cpp"
CONFIG_OPTION;
提示:
fatal error C1021: 无效的预处理器命令“inlcude”

读书人网 >C++

热点推荐