作者ikjhyu (還沒想到)
看板CSSE
標題Re: 請問c++ include標頭檔的問題
時間Sun Jun 26 23:01:37 2005
※ 引述《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
1F:推 bxxl:linker會去指定的object files跟library 裡面找, 59.120.57.250 06/26
2F:→ bxxl:printf屬於標準函式庫,在library裡面 59.120.57.250 06/26
3F:→ bxxl:通常你看不到它的source code. 59.120.57.250 06/26
4F:推 bxxl:還有自己寫的程式一般也不會去include .c檔, 59.120.57.250 06/26
※ 編輯: ikjhyu 來自: 61.59.211.123 (06/27 01:10)
※ 編輯: ikjhyu 來自: 61.59.211.123 (06/27 20:48)