2016-12-23 49 views
1

解釋本comment後,錯誤:沒有這樣的文件或目錄 - Visual C

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

#include"list/list.h" 

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

./Computing/list/arrayImpl.c#include"list/list.h"使用Computing/testList.c程序,here所示測試Computing/list ADT。

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. 

我如何理解這個錯誤,以下是評論後?我誤解了嗎?

+0

@ Jean-FrançoisFabre我用'arrayImpl.c'編輯了我的查詢代碼 – overexchange

回答

4

list.h與包含它的c文件位於同一目錄中。當你做

#include "list/list.h" 

編譯器試圖找到包含路徑+ /list中的文件。例如,它會查找不會退出的list/list/list.h

那麼什麼工作將被更改爲#include "list.h"

OR

添加當前目錄使用-I.所以list/list.h是包括路徑的命令行。

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

gcc search path documentation

-I. -I- is not the same as no -I options at all, and does not cause the same behavior for ‘<>’ includes that ‘""’ includes get with no special options. -I. searches the compiler's current working directory for header files. That may or may not be the same as the directory containing the current file.

它沒有在任何地方提到,包括路徑包含當前目錄,從海灣合作委員會已啓動。

+0

我做了很多測試,評論是錯誤的。檢查我的編輯,文檔不會談論當前目錄。 –

+0

當gcc doc說:*可能與包含當前文件的目錄相同或不同*它表示包含當前文件'arrayImpl.c'的目錄'list'在這種情況下。那是對的嗎? – overexchange

+0

是的,確切地說。當前編譯的文件目錄只會自動添加到編譯器搜索路徑中,除非使用包含當前編譯文件目錄的<<>來包含文件。 –

1

您需要添加包含文件目錄「list」。

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

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

而且你必須從「的#include‘列表/ list.h「名單」’。因爲當你寫你告訴編譯器在所有搜索包含目錄中的文件」列表/ list.h」,但 「list.h」 是 「清單」。因此, 「清單」 是沒有必要的。

#include "list.h" 

你能做到這一點,但它的醜陋

#include "../list/list.h" 
+0

'$ gcc -Wall -g -DARRAY ./list/*.c testList.c -I list -o testList'給出同樣的錯誤 – overexchange

+0

@過度交易固定我的不好 – Stargateur

相關問題