Re: 請問c++ include標頭檔的問題

看板CSSE作者 (還沒想到)時間19年前 (2005/06/26 22:51), 編輯推噓2(202)
留言4則, 1人參與, 最新討論串3/7 (看更多)
※ 引述《kaikaii (kai)》之銘言: : ※ 引述《ikjhyu (還沒想到)》之銘言: : : 最近在試一些c++的東西 : : 發現一個奇怪的東西 : : 如下面程式 : : #include <stdio.h> : : void main() : : { : : printf("abc\n"); : : } : : 程式要使用printf() 所以必須include stdio.h檔 : : 而他會去呼叫printf.c : : 但是打開 stdio.h檔 : : 卻到處找不到他有include的敘述 : : 裡面都是一些函式原型的宣告 : : 而沒有真正的函式內容檔 : : 請問有人知道為什麼這樣程式可以執行嗎? : 我剛剛看過了stdio.h stdlib.h 裡都沒有include 其他.h檔 : 又看了VRC那個資料夾中 printf.c的實作 : 我想他應該透過某個方法去連結到VRC中的 .c檔 (stdio.h只是個介面 ?) : 因為VRC 這個資料夾的名字不能被變動 : : 而且把stdio.h檔的內容貼到 : : 程式裡面可以執行再把include敘述拿掉 : : 也可以正常執行... : #include <x.h> 不就是將x.h裡的內容 copy 到目前的程式裡 : 所以既然將x.h的內容都copy 到了程式中 : 那將#include<x.h> 去掉 當然還是能執行 (不拿掉當然可以執行) : 以上是個人拙見 ^^" 本來是覺得 是不是include 了某些檔(如stdio.h) 在編譯的時候, linker會自動的知道要去呼叫哪些檔案 特別是被include檔 (ex:stdio.h)裡面定義的 一些原型函式的具體程式檔案 (ex: printf.c) 所以就把他改成是把stdio.h的內容貼到程式裡面 再把include<stdio.h>敘述拿掉 然後執行看看 結果也可以執行 所以應該不是linker 自己會去找什麼檔案來連結 而是在stdio.h裡面的一些程式碼會告訴linker 該去連結什麼檔案 問題是裡面的程式碼怎麼都看不出有什麼連結的訊息 而且好像沒有"include"之類的敘述... 有點怪.. 如果一般使用者只寫函式原型檔(.h) 而沒有include 函式具體程式檔(.c) 應該是不能執行的吧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.59.211.123

59.120.57.250 06/26, , 1F
linker會去指定的object files跟library 裡面找,
59.120.57.250 06/26, 1F

59.120.57.250 06/26, , 2F
printf屬於標準函式庫,在library裡面
59.120.57.250 06/26, 2F

59.120.57.250 06/26, , 3F
通常你看不到它的source code.
59.120.57.250 06/26, 3F

59.120.57.250 06/26, , 4F
還有自己寫的程式一般也不會去include .c檔,
59.120.57.250 06/26, 4F
※ 編輯: ikjhyu 來自: 61.59.211.123 (06/27 01:10) ※ 編輯: ikjhyu 來自: 61.59.211.123 (06/27 20:48)
文章代碼(AID): #12li3yIl (CSSE)
討論串 (同標題文章)
文章代碼(AID): #12li3yIl (CSSE)