Re: [問題] 為何include <XXX.h> 就能 work ?

看板C_and_CPP作者 (1597463007)時間11年前 (2014/08/07 20:22), 編輯推噓6(605)
留言11則, 9人參與, 最新討論串2/2 (看更多)
※ 引述《qas612820704 (Lego)》之銘言: : 舉一個例就是 當我 : #include <stdio.h> 時 : 就能使用printf 為什麼? : 這個問題疑惑我很久 : 如果是使用一些已經寫好檔案 : 那麼那些檔案是在哪裡? : 而它又是在哪一個compiler階段時work的? : 我搜尋板上 /include 的內容 沒有找到類似的內容 : 希望板上的朋友能幫我解惑 <(_ _)> : → bleed1979:http://gcc.gnu.org/onlinedocs/gcc-3.0.1/cpp_2.html 08/08 02:53 這連結只有回答到前半段 引入標頭檔就能使用沒錯, 但那只是編譯階段的事情 在連結階段才會真正把 printf 的程式碼給加進你的程式裡 以我以前在版上用過的一個比喻來說 標頭檔內容就是電路元件說明書 你必須照著說明書所記載的在電路中留下接頭 (即是函式宣告) 編譯器會幫你檢查接頭留的對不對 (檢查函式呼叫) 而連結器才會真正把元件給接上去 (把程式連結起來) 延伸講下去, printf 的內容其實是放在一大包最常用的元件庫裡的 這個元件庫叫做 C standard library, C 標準函式庫 http://zh.wikipedia.org/wiki/C%E6%A8%99%E6%BA%96%E5%87%BD%E5%BC%8F%E5%BA%AB C 語言規定所有它的實作都必須提供這個函式庫給使用者連結 也因為如此, 在連結時不必額外指定什麼東西 預設就會自動的把標準函式庫裡的東西給連結進去 於是接頭有了 (標頭檔),接上去的元件有了 (自動連結的標準函式庫) 你就可以使用 printf 印字了 這些檔案通常會放在編譯器程式的附近 以你問的 gcc 來說它叫做 libc.a / libc.so 如上所言這個函式庫即使不下 -lc 也會自動連結進來 VC 裡的也叫差不多的名字, 有一些細項參數在檔名裡 不過大致上還是叫做 libcxxx.lib -- いああオレたちには見えてるモノがあるbきっと誰にも奪われないモノがあるはずさ開口一番一虚一実跳梁跋扈形影相弔yL羊頭狗肉東奔西走国士無双南柯之夢 歪も ぶ  意味がないと思えるコトがあるPきっとでも意図はそこに必ずある んの く 依依恋恋空前絶後疾風怒濤有無相生H急転直下物情騷然愚者一得相思相愛 だが ろ 無意味じゃない6あの意図 恋た で 有為転変死生有命蒼天已死黄天當立 !!6五里霧中解散宣言千錯万綜則天去私 のり -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.39.85 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1407442935.A.ABC.html

08/08 08:29, , 1F
推!
08/08 08:29, 1F

08/08 08:43, , 2F
推,簡單易懂
08/08 08:43, 2F

08/08 12:36, , 3F
我想請問一下關於load libarary有相關的load path嗎
08/08 12:36, 3F

08/08 12:36, , 4F
?如果有我要怎麼得知這個path?
08/08 12:36, 4F

08/08 13:43, , 5F
如果是 GCC 的話, 用 gcc -v [filename] -Wl,-v 來編譯
08/08 13:43, 5F

08/08 13:43, , 6F
就會吐預設的 include 和 linker search paths
08/08 13:43, 6F

08/08 13:55, , 7F
太神啦OAO
08/08 13:55, 7F

08/09 01:44, , 8F
08/09 01:44, 8F

08/09 19:03, , 9F
08/09 19:03, 9F

08/09 21:54, , 10F
推程式設計師的自我修養這本書
08/09 21:54, 10F

08/11 09:24, , 11F
很適合當睡前讀物 可以當小故事來看 不過需要點功力
08/11 09:24, 11F
文章代碼(AID): #1Juz_tgy (C_and_CPP)
文章代碼(AID): #1Juz_tgy (C_and_CPP)