Re: 請問c++ include標頭檔的問題
※ 引述《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
59.120.57.250 06/26, 1F
→
59.120.57.250 06/26, , 2F
59.120.57.250 06/26, 2F
→
59.120.57.250 06/26, , 3F
59.120.57.250 06/26, 3F
推
59.120.57.250 06/26, , 4F
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)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 7 篇):