【问题标题】:GCC fatal error: quit.h no such file or directoryGCC 致命错误:quit.h 没有这样的文件或目录
【发布时间】:2017-09-08 12:35:13
【问题描述】:

我正在为操作系统课程学习 C,并且刚刚按照教科书的说明编写了这个程序:

#include <dirent.h>
#include <stdio.h>
#include "quit.h"

int main(int argc, char **argv) {

        DIR *dir;
        struct dirent *direntry;

        arg_check(2, argc, "Specify a directory\n", 1);

        if ( (dir = opendir(argv[1])) == NULL)
                quit("opendir", 1);

        while ((direntry = readdir(dir)) != NULL)
           printf("%10d %s\n", direntry->d_ino, direntry->d_name);

        closedir(dir);
        exit(0);
}

这段代码完全是从教科书中复制的,但quit.h 似乎导致编译文件。我曾尝试将“quit.h”切换为 和“quit”,但这些都不起作用,而且我找不到有关此特定问题的其他问题。

【问题讨论】:

  • 文件quit.h是否与你的C源文件在同一目录下?
  • 或者换个说法——文件quit.h在哪里
  • 哪本书?
  • “这段代码完全是从教科书中复制过来的”——quit.h 的内容和相对位置是否具有类似的启示?
  • 如果 quit.h 文件位于与您的源目录不同的目录中,您可以使用 -I compile 选项对其进行编译。

标签: c gcc c-standard-library


【解决方案1】:

包括“quit.h”

单词#include(带有哈希#前缀)意味着必须读入一个文件;该文件的内容(在这种情况下为quit.h)的处理方式与在程序中输入的内容完全相同。假设您有一个包含单行的文件名“test.h”

// this is a test

如果你有这样的程序:

#include "test.h"
int main(int argc, char **argv)
...

编译器处理(看到)这些行:

// this is a test
int main(int argc, char **argv)
...

#include 之后指定的文件名可以用角或引号括起来。按照惯例,如果使用角度,例如

#include <stdio.h>

这意味着文件(在这种情况下为 stdio.h)是一些 systemstandard 文件等等 - 换句话说,其他人已经为您编写了该文件。相反,如果使用引号,则指定的文件被认为是您正在编译的程序的一部分。 您的 quit.h 看起来像这样。所以你必须有一个名为quit.h 的文件。如果您将“quit.h”更改为“quit”,则名为quit 的文件必须存在于您正在编译的文件的同一目录中。 (实际上事情更复杂,但暂时不要介意)。阅读你的书,它应该解释什么是文件“quit.h”。

【讨论】:

    猜你喜欢
    • 2013-11-04
    • 1970-01-01
    • 2019-10-10
    • 2015-08-23
    • 2021-10-31
    • 2014-05-25
    • 2017-05-09
    • 2021-05-15
    • 2014-10-31
    相关资源
    最近更新 更多