Re: [問題] 為何include <XXX.h> 就能 work ?
※ 引述《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デ きっと誰にも奪われないモノがあるはずさ
け 開口一番一虚一実跳梁跋扈形影相弔yュL羊頭狗肉東奔西走国士無双南柯之夢 歪も
ぶ 意味がないと思えるコトがある ラ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
08/08 12:36, 3F
→
08/08 12:36, , 4F
08/08 12:36, 4F
→
08/08 13:43, , 5F
08/08 13:43, 5F
→
08/08 13:43, , 6F
08/08 13:43, 6F
推
08/08 13:55, , 7F
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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):