【问题标题】:Error: no such file or directory - C错误:没有这样的文件或目录 - C
【发布时间】:2016-12-23 20:16:32
【问题描述】:

解释完这个comment

/***************** arrayImpl.c **************/

#include"list/list.h"

#if defined(ARRAY)
 ....
#endif

我在./Computing/list/arrayImpl.c 中写了#include"list/list.h",用于使用Computing/testList.c 程序测试Computing/list ADT,显示为here

但是list/list.h找不到list/arrayImpl.c,如下图,

PC ~/code_practice/Computing
$ gcc -Wall -g -DARRAY ./list/*.c testList.c -o testList
./list/arrayImpl.c:3:22: fatal error: list/list.h: No such file or directory
compilation terminated.
./list/linkedListImpl.c:3:22: fatal error: list/list.h: No such file or directory
compilation terminated.

在关注该评论后,我如何理解此错误?我是不是理解错了?

【问题讨论】:

  • @Jean-FrançoisFabre 我用arrayImpl.c 代码编辑了我的查询

标签: c c-preprocessor


【解决方案1】:

list.h 与包含它的 c 文件位于同一目录中。当你这样做时

#include "list/list.h"

编译器尝试在包含路径 + /list 中查找文件。例如,它会寻找不存在的list/list/list.h

那么,将工作改为#include "list.h"

使用-I. 将当前目录添加到命令行,因此list/list.h 在包含路径中。

gcc -Wall -g -I. -DARRAY ./list/*.c testList.c -o testList

来自gcc search path documentation

-我。 -I- 与没有 -I 选项完全不同,并且不会导致“”包括““”包括没有特殊选项的 get 的相同行为。 -我。在编译器的当前工作目录中搜索头文件。这可能与包含当前文件的目录相同,也可能不同。

在任何地方都没有提到包含路径包含当前目录,gcc 是从该目录启动的。

【讨论】:

  • 我做了很多测试,评论是错误的。检查我的编辑,文档没有谈论当前目录。
  • 当 gcc doc 说:这可能与包含当前文件的目录相同,也可能不同。 这意味着目录list 包含当前文件@987654331 @ 在这种情况下。对吗?
  • 是的,完全正确。当前编译的文件目录会自动添加到编译器搜索路径中,仅用于此编译,除非使用 <> 包含文件,这告诉不包含当前编译的文件目录。
【解决方案2】:

您需要添加包含文件目录“列表”。

https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html

gcc -Wall -g -DARRAY ./list/*.c testList.c -I list -o testList

你必须从“#include”list/list.h“中删除“list”。因为当你写的时候你告诉编译器在所有包含目录中搜索一个文件“list/list.h”。但是“ list.h”在“list”中。所以“list”不是必需的。

#include "list.h"

你可以这样做,但它很丑

#include "../list/list.h"

【讨论】:

  • $ gcc -Wall -g -DARRAY ./list/*.c testList.c -I list -o testList 给出同样的错误
  • @overexchange 解决了我的问题
猜你喜欢
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 2013-08-08
  • 2013-11-04
  • 2012-02-18
  • 2012-10-21
  • 2011-03-22
  • 2015-12-29
相关资源
最近更新 更多