作者ja77 (LaTex)
看板EE_DSnP
標題Re: [問題]#include的error:No such file or direc …
時間Wed Oct 22 22:58:09 2008
※ 引述《ja77 (LaTex)》之銘言:
Somethings about the "include" command which is one
of the preprocessor directives:
1. Two formats of the #include
#include 指令可以讀入你所指定的檔案內容,通常有兩種形式
#include <somefile> (C++) or #include <somefile.h> (C)
#include "myfile.h"
如果檔名以(< >)括起來,表示要讀入的檔案是個專案表頭or標準表頭檔,
那麼搜尋路徑會是一個預先特定的目錄;如果檔名以(" ")括起來,表示要
讀入的檔案是程式員提供的表頭檔,那個搜尋路徑應該會從工作目錄or目
前所在的目錄開始搜尋。
2. The difference between including .h and including .cpp
其實問題應該要問include header file(表頭檔)和include source file
(程式原始碼檔)的不同,因為表頭檔的副檔名會隨著C++ compiler的不同
而有所不同(這也就是為什麼C++標準表頭檔決定不使用副檔名的原因之一)
,通常會放在表頭檔的東西有extern object宣告、函式宣告和inline函式
定義,凡是必須使用或定義object或函式的程式原始碼檔,都應該含入這個
表頭檔,所以程式原始碼檔通常是用來定義object或函式,當你include程
式原始碼檔就有可能會發生重複定義相同的object或函式的錯誤,但是如果
你include表頭檔只有一些宣告,重複宣告是沒有關係的。
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.171.138
1F:推 wintercobra:謝啦~ 不過,重覆宣告沒有關係? 不是要用#ifndef嗎? 10/22 08:46
我這裡的宣告(而非定義)是指不會導致記憶體空間的配置,它只是聲明有此變數或函式
存在程式的某處,所以non-extern object宣告像"int i;"是個定義。所以當你重複
include相當的標準表頭檔、重複宣告兩個相同的extern objects或者兩個相同函式的
prototypes,不會出現任何的compiler error,但是它會造成compiler effort(compile
比較久)。
而#ifndef(條件式指令)是用來避免nested including(就是一個表頭檔可能被多次
include於同一個程式本文檔中),如果這個表頭檔只有我所謂的宣告時,是可以
compile過只是比較久,但是如果你的表頭檔裡存在一些定義的話,就會出現
redefinition error。
--
應該是這樣吧@@" 歡迎大家一起來討論!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.171.138