作者james732 (好人超)
看板C_and_CPP
標題Re: [問題] select()用到的timeval
時間Wed Oct 6 11:52:05 2010
※ 引述《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