我不得不处理遗留代码,这些遗留代码在20多年前被模糊的C天才所使用,而这些宏却被模糊的宏所填充:它主要是#define用于仿真RTTI,生成虚拟,非虚拟方法,数据成员,自由函数,代码的代码它描述了多种继承关系,类型转换,不常见的循环语句等。 #define是嵌套的。我不知道这与口味或习惯有关,但我不想阅读,理解,但主要是支持和维护该代码。有关C ++的书籍说,应该像goto运算符那样很少和谨慎地使用宏。而且我想知道是否有某种工具(或编译器选项可重定向预处理器输出等),是否可以扩展这些#define宏,而无需扩展#includes,也许不触摸用户提供的过滤器/列表,在源代码中。 例如(如果只是示例,我可以使用通用宏),如果我将此工具提供给包含以下代码的源文件:
#define MAX( a, b ) ( ( a ) > ( b ) ? ( a ) : ( b ) )
int main()
{
int x = -1;
int y = 100;
int max = MAX( x, y );
return 0;
}
它将输出带有以下内容的源文件
:#define MAX( a, b ) ( ( a ) > ( b ) ? ( a ) : ( b ) )
int main()
{
int x = -1;
int y = 100;
int max = ( ( a ) > ( b ) ? ( a ) : ( b ) );
return 0;
}
或者比以前的多余括号示例更漂亮:
int max = a > b ? a : b;
谢谢。