1. 程式人生 > >語言中.C文件和.H文件的概念和聯系

語言中.C文件和.H文件的概念和聯系

argv 這一 也看 浮雲 有意思 需要 一個 前行 數組

//a.h
void foo(); 
//a.c
#include "a.h"  //我的問題出來了:這句話是要,還是不要?
void foo()
{
    return;
}
//main.c
#include "a.h"
int main(int argc, char *argv[])
{
   foo(); 
 return 0;
}

今天看到這個問題,很有意思,記錄下來復習有些遺忘的知識點。

先說答案,這句話是必須要的!

如果 a.c 中不寫,那麽編譯器是不是會自動把 .h 文件裏面的東西跟同名的 .c 文件綁定在一起?A:不會。

從C編譯器角度看,.h和.c皆是浮雲,就是改名為.txt、.doc也沒有大的分別。換句話說,就是.h和.c沒啥必然聯系。.h中一般放的是同名.c文件中定義的變量、數組、函數的 聲明,需要讓.c外部使用的聲明。這個聲明有啥用?只是讓需要用這些聲明的地方方便引用。因為 #i nclude "xx.h" 這個宏其實際意思就是把當前這一行刪掉,把 xx.h 中的內容原封不動的插入在當前行的位置。由於想寫這些函數聲明的地方非常多(每一個調用 xx.c 中函數的地方,都要在使用前聲明一下子),所以用 #i nclude "xx.h" 這個宏就簡化了許多行代碼——讓預處理器自己替換好了。也就是說,xx.h 其實只是讓需要寫 xx.c 中函數聲明的地方調用(可以少寫幾行字),至於 include 這個 .h 文件是誰,是 .h 還是 .c,還是與這個 .h 同名的 .c,都沒有任何必然關系。
  這樣你可能會說:啊?那我平時只想調用 xx.c 中的某個函數,卻 include了 xx.h 文件,豈不是宏替換後出現了很多無用的聲明?沒錯,確實引入了很多垃圾 ,但是它卻省了你不少筆墨,並且整個版面也看起來清爽的多。魚與熊掌不可得兼,就是這個道理。

語言中.C文件和.H文件的概念和聯系