Re: [問題]C
※ 引述《twisters121 (...)》之銘言:
: 標題: [問題]C
: 時間: Wed Dec 27 11:12:15 2006
:
: 一個程式 a.exe,
:
: 程式如何知道print() function的實作在哪個library?
:
: 程式碼如下
:
: #include <stdio.h>
:
: void main(void)
: {
: print("this is c language");
: }
:
: → final01:不是有include 140.134.35.48 12/27 14:33
: → newdominic:把第一行刪掉然後compile看錯誤訊息= = 203.68.127.1 12/27 17:17
因為 ptt 這邊轉信掛了 (不能轉出也沒轉入),
外面寄信進來也不見得會成功,
所以直接過來板上回。
1. 你在信中提到你用 Dev-C++ 的部分,
因為我沒有裝 Dev-C++,
所以沒有辦法幫你 try。
IDE 環境沒有 linker 選項的話,
那就得翻 IDE 手冊或 linker 手冊得知預設值。
要不就是 windows 上要有類似 UNIX 的 ldd 和 nm 工具,
但我從不在 windows 寫程式所以不知道。
如果是 UNIX / UNIX-like 上的 GCC,
你沒特別下 -static 指定靜態連結的話,
一般來說就是 libc.so (用 ldd 可以追到路徑),
libc.so 通常是從 glibc 造出來的,
去抓 glibc 的 source code 就可以看到 source code。
2. 關於你這篇文,其實光看 C code 根本看不出來。
而且標準 C 沒有 print() 只有 printf(),
假設你說的是 printf() 好了,
推文裡面給你的答案也不會有任何幫助。
因為被實作在哪個 library 裡,
跟 compiler 完全無關,
compiler 也不知道這件事,
這些全部都是 linker 的責任。
通常 linker 的預設值,
或是 compiler 預設會 pass 給 linker 的參數,
裡面就會有這些資訊,
就我所知 Dev-C++ 後端用的是 MingW32 (GCC 的一種),
所以這些預設值很可能跟 GCC 一樣直接編死在執行檔裡,
沒有類似 UNIX 的 strings 這種工具去剝出執行檔裡的字串的話,
也沒有類似 ldd 的東西的話,
那還是看不出來的。
3. 回推文的部分。
原 po 想知道的可能是 printf() 實際上放在哪個 .LIB 或 .DLL,
因為他用 mail 回文的時候是這個意思,
所以跟 include 或第一行沒有任何關係。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.216.58
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章