看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《snobbery (egoist)》之銘言: : 感謝上篇推文中的回答, : 我大概 到preprocessor的用法, : 但是我仍有疑問, : 我在用gcc -E看的時候, : 可以發現有 : struct timeval : {__time_t tv_sec; : __suseconds_t tv_usec;}; : 的structure宣告, : 但是在sys/time.h則完全沒有這樣的宣告. : 據我的了解, preprocessor如#ifdef, : 頂多是把"已經寫在header裡面的某些東西"不compile而已 : 不會自動產生出code來, : 所以應該我要能在header的.h檔當中直接找到如上的structure宣告才對吧? 你要先了解,當你 #include <sys/time.h> 的時候 實際上被 #include 進來的檔案,不會只有 sys/time.h 那麼一個 因為 sys/time.h 裡面也會有 #include 的句子,它還會包含其他的檔案進來 真的要追的話,要這樣: james732:~$ gcc -M test.c (test.c的內容就是#1Cgfd1SH (C_and_CPP)的程式) test.o: test.c /usr/include/sys/time.h /usr/include/features.h \ /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ /usr/include/gnu/stubs-32.h /usr/include/bits/types.h \ /usr/include/bits/typesizes.h /usr/include/time.h \ /usr/include/bits/time.h /usr/include/sys/select.h \ /usr/include/bits/select.h /usr/include/bits/sigset.h gcc -M 可以抓出該檔案真的 #include 進來的其他檔案 你可以看到一個 sys/time.h 實際上牽扯了十多個檔案...XDD 接下來,整理一下,再用 grep 搜尋這些檔案的內容 james732@lab:~$ gcc -M test.c | tr " \\" " " | xargs grep 'struct timeval' 跑出來的結果像這樣:http://nopaste.csie.org/837d3 注意到這行:/usr/include/bits/time.h:struct timeval struct timeval 的定義就是在這個檔案裡面 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.171.46 ※ 編輯: james732 來自: 140.117.171.46 (10/06 11:53) ※ 編輯: james732 來自: 140.117.171.46 (10/06 11:54)
snobbery:太謝謝了, 現在我完全清楚了. :) 10/06 11:55
purpose:超神 10/06 12:05
james732:哪裡神了 XDD 10/06 12:06
loveme00835:推 :) 10/06 12:39
xatier:推好人超 10/06 17:11