※ 引述《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