将目录上下文传递给编译器

Pass Directory Context to Compiler

我正在用 C 编写一个 Java 编译器,只是作为一个娱乐项目。但是,我注意到当我们在命令行中编译文件时,例如 "gcc example.c",编译器能够在终端的工作目录中找到 example.c 而不会出错。编译器如何知道要搜索 example.c 的目录? OS 是否在编译器的目录中找到 example.c?此外,我如何在我的 C 程序中模拟此操作,以便用户可以通过调用我的编译器从任何工作目录编译他们的 java 程序,例如:"compiler example.java"?

如果我没理解错,你需要获取当前工作目录的完整路径。有一个 POSIX 函数 getcwd (在 Windows _getcwd 上)可用于检索您的当前工​​作目录程序。

然后搜索此目录并找到您的源(如果存在)应该很简单。

fopen 会将相对路径视为相对于当前目录,而不是可执行文件所在的目录。这与大多数其他语言中的大多数(甚至所有)文件处理功能相同。

因此,要模拟 Java 编译器的行为,您需要做的就是遍历 argvfopen(the_file_name) 中的文件名,为该文件生成代码,然后 fopen(class_file_name, "wb")(其中 class_file_namefile_name.java 替换为 .class)并将生成的字节码写入其中。

获取当前目录的完整路径既没有必要也没有帮助。请注意,如果您只是将每个参数附加到当前目录名称,代码将中断绝对路径,而什​​么都不做将对相对路径和绝对路径都做正确的事情。