【发布时间】:2013-10-24 03:49:39
【问题描述】:
我正在使用预处理器#define 宏来计算头文件中的函数数量:
#define __INDEX -1
//First group of functions
void func1(void);
#define __FUNC1_INDEX __INDEX + 1
void func2(void);
#define __FUNC2_INDEX __FUNC1_INDEX + 1
#undef __INDEX
#define __INDEX __FUNC2_INDEX
//Second group of functions
void func3(void);
#define __FUNC3_INDEX __INDEX + 1
void func4(void);
#define __FUNC4_INDEX __FUNC3_INDEX + 1
#undef __INDEX
#define __INDEX __FUNC4_INDEX
//Third group of functions
void func5(void);
#define __FUNC5_INDEX __INDEX + 1
void func6(void);
#define __FUNC6_INDEX __FUNC5_INDEX + 1
#undef __INDEX
#define __INDEX __FUNC6_INDEX
#define __NUM_FUNCTIONS __INDEX + 1
预处理器通过前两组函数很好,但是当它到达行时:
#define __FUNC5_INDEX __INDEX + 1
我收到 __INDEX 的“未在此范围内定义”错误。真正令人困惑的是,在第二组函数中[成功地]完成了同样的事情。 __FUNC3_INDEX 取 __INDEX + 1 的值。据我所知,任何地方都没有错别字……有什么问题?
我使用的是 g++ 4.8。
【问题讨论】:
-
啊,我明白了。我使用双下划线来隐藏我只需要使用一次的符号。
-
我注意到我的其他带有双下划线的宏没有这个问题,我应该停止这样做吗?
-
嗯...我也在那里测试了我的代码,它运行良好。编译器错误?
-
当您尝试使用
__INDEX时发生错误。这是您在问题中遗漏的重要部分。
标签: c++ c macros g++ c-preprocessor