GCC Built-in Functions
最近上課的時候鬧了一個大笑話(而且那門課還是組合語言不是程式設計...)。我寫了下面這隻程式: int main() { printf( "Hello\n" ); return 0; } 很明顯,這程式沒有 include 任何 header file,理論上應該是要包含 stdio.h。在編譯的過程中,compiler 吐出了下面的 警告信息 ( 不是錯誤信息唷 ): test.c: In function ‘main’: test.c:3:5: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration] printf( "Hello\n" ); ^ test.c:3:5: warning: incompatible implicit declaration of built-in function ‘printf’ test.c:3:5: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’ 但是程式會動,還是可以印出 Hello 的字樣。為什麽?我這時候信誓旦旦的跟大家說,因為 printf 在 libc.so 裡面有,因此就算編譯的時候找不到,gcc 在連結 libc.so 的時候還是會看的到 printf ,所以這時候還是可以執行的。為了證明這件事情,我用 nm 去看一下編出來的 test.o 0000000000000000 T main U puts 等一下, where is my printf ?? ...在學生面前要保持鎮定,大概 printf 在系統裡被改成 puts ... 然後再做實驗給同學看,這次換成利用 libm.so 的 pow 函式。 int main() { printf( "2^3 = %f\n", pow( 2.0,3.0 ) ); return 0; } 然後說,這...