有人問:C語言為什麼只需要include<stdio.h>就能使用裡面聲明的函數?這是一個看起來非常簡單的問題,但是很多初學者,甚至學了很久的人都可能沒有搞明白。為什麼包含即可用?要明白包含即可用的原因,就必須講到C語言代碼是如何變成可執行文件的了,這裡可以參考《hello程序是如何變成可執行文件的》。這裡使用#include指令,在預編譯之後,相當於把文件裡面的內容都放到.c中了。//hello.c
#include<stdio.h>
int main(void)
{
printf("hello,編程珠璣\n");
return 0;
}
$ gcc -E -o hello.i hello.c
//pow.c
//來源:公眾號【編程珠璣】
//作者:守望先生
#include<stdio.h>
#include<math.h>
int main(void)
{
double pow(double x, double y);
double a = 2;
double c = pow(a,4);
printf("%f ^ 4 = %f\n",a,c);
return 0;
}
$ gcc -o pow pow.c
/tmp/ccnou5WK.o: In function `main':
pow.c:(.text+0x2f): undefined reference to `pow'
collect2: error: ld returned 1 exit status
//hello.c,沒有包含stdio.h
int printf (const char *__restrict __format, ...);
//extern int printf (const char *__restrict __format, ...);
int main(void)
{
printf("hello,編程珠璣\n");
return 0 ;
}
關注公眾號【編程珠璣】,獲取更多Linux/C/C++/數據結構與算法/計算機基礎/工具等原創技術文章。後臺免費獲取經典電子書和視頻資源
堅持原創