0
我想以某种自动方式打印标题层次结构。目标是保持包含头文件的顺序。打印标题层次结构
我曾尝试做以下的标题 “tmp1.h”:
#ifndef HIERARCHY_PRINTING
#define HIERARCHY_PRINTING "start: "
#endif
#undef PREVIOUS_PRINTING
#define PREVIOUS_PRINTING HIERARCHY_PRINTING "->"
#undef HIERARCHY_PRINTING
#define HIERARCHY_PRINTING PREVIOUS_PRINTING "tmp1.h"
#ifndef _TMP1_
#define _TMP1_
// Some stuff
#endif
#undef PREVIOUS_PRINTING
#define PREVIOUS_PRINTING HIERARCHY_PRINTING ";"
#undef HIERARCHY_PRINTING
#define HIERARCHY_PRINTING PREVIOUS_PRINTING
而在 “tmp.c”:
#include <stdio.h>
#include "tmp1.h"
const char *str = HIERARCHY_PRINTING;
int main() {
printf("Headers hierarchy:\n");
printf("%s\n", str);
return 0;
}
但是,这并不编译:
tmp.c:7:19: error: ‘HIERARCHY_PRINTING’ undeclared here (not in a function)
tmp.c:7:19: error: expected ‘,’ or ‘;’ before string constant
我希望看到这样的:
start: ->tmp1.h;
我哪里错了?
你在你编写的宏中有一个循环引用:'HIERARCHY_PRINTING'扩展为'PREVIOUS_PRINTING',然后扩展为'HIERARCHY_PRINTING“;''等等等等。也就是说,编译时产生的编译器错误代码有点不同,所以当您简化示例时,翻译可能会丢失一些内容。 –
@HaldeanBrown你得到了什么错误?其实我没有简化任何东西,因为它只是一个实验。 – Link42
如果您发布展示您所问的行为的示例,您将获得更好的帮助!这里是我编译的代码和编译器的输出:http://lpaste.net/345138 –