【发布时间】:2019-01-08 08:53:23
【问题描述】:
希望你一切顺利。 当我在阅读 Allen I. Holub 的《Compiler Design In C》一书时,遇到了在示例程序中实现的这些头文件:
#include <tools/debug.h>
#include <tools.h> /* Needed only for prototype
我的编译器说不存在这样的文件或目录(Dev-C++)。我已经将编译器设置为ANSI-C,看看作者如何使用ANSI-C编写代码,但无济于事。
该程序还包含一个PRIVATE关键字,从C99改为ANSI-C后,编译器仍报告为未知关键字。
谁能帮我解决这个问题?抱歉,如果以前有人问过这个问题,但我在任何地方都找不到对此的参考。我还在这里包含了代码的图片。
如果我应该弃权,或者我无法访问这些文件,我还有哪些其他选择?我真的很想完成这个项目。
提前感谢您花时间和耐心阅读所有内容。
【问题讨论】:
-
这些标题很可能在本书的某处介绍过。可能在随书附送的 CD 上(如果有的话),或者在附录或介绍章节的某个地方。
-
显然没有。我检查了附录,但找不到头文件。如果他们是作者,他为什么要使用作为头文件而不是简单的“”样式的头文件,这似乎是显而易见的选择。
-
Ruslan 的答案是正确的。关于使用
PRIVATE的第二个问题在这里得到解答:https://stackoverflow.com/questions/623219/is-private-a-c-keyword。如果您查看本书的附加材料(例如compiler.design.in.c/compiler/INCLUDE/TOOLS/DEBUG.H,l. 11),您会看到链接中已接受问题的答案中提到的#define。 -
@SaifUlIslam 使用
<...>包含用户创建的头文件是一种常见的方法,方法是指定一个额外的包含路径,例如,通过在clang 或gcc 中使用-I标志。另见https://docs.microsoft.com/cpp/build/reference/i-additional-include-directories?view=vs-2017。 -
所有那些讨厌的宏都不是很好的编程习惯。此外,使用像
#define PRIVATE static这样的东西是很值得怀疑的,这不是你在C 中进行适当私有封装的方式。对于小型微控制器应用程序来说很好,但对于托管系统编程来说几乎没有。关于“Microsoft 的 C 编译器 memcpy 不支持重叠字符串”的评论被延迟 - no compiler 支持带有重叠字符串的 memcpy,这是 C 标准未定义的行为。我不认为这是一本你应该学习的书。
标签: c private ansi-c compiler-construction