C語言、C++:關於多文件編程
50
關於C、C++的多文件編程,額有很多不解(或者說完全不會),希望能得到熱心網友指點,
回答幾個問題都行,有能全答的再追加50分:
1、頭文件只能添加.h的文件嗎?.c行不行?
2、為什麼只在.h中添加聲明、宏,而不編寫實現?這是必須的,還是約定?
3、編譯器是怎麼找到函數的實現在哪的?在主文件中我們只用#include添加頭文件,而頭文件中只有函數的聲明、卻沒有實現,那麼編譯器要怎麼知道函數的具體定義(即實現)呢?
總而言之,就是想知道“怎麼進行多文件編程”,若能提供相關資料來幫我解決上述問題也可。
補充:大家的回答很詳細,十分感謝,50分已追加。但關於第三個問題,我仍然不明白,編譯器是怎麼找到含有實現的.cpp文件呢?編譯器不可能把整個計算機裡的文件都遍歷一遍吧?
我用DEV-CPP做了幾個測試,發現並不是僅僅將.h對應的.cpp鏈接,貌似是把一定范圍內的.cpp都鏈接上。測試如下(共三個文件,代碼稍長,但內容很簡單,請耐心讀完):
//main.cpp
#include<stdlib.h>
#include"print.h"
int main()
{
print();
system("PAUSE");
return 0;
}
//comply.cpp
#include<iostream.h>
void print()
{
cout<<"Printed!"<<endl;
}
//print.h
void print();
最佳回答:
你如果是用編譯器自動生成的文件,編譯器自動加到項目裡,自己寫的,你要手動在項目中添加文件,編譯器才會檢索,編譯器只檢索屬於項目的文件
1,.c或者.cpp不需要包含,如果你是用VS系列,.h和.cpp是一對的,你包含了X.h就是能使用X.cpp的資源、你自己想包含的話那也無所謂,一般是編譯器做的
2 .h可以添加實現,一切都可以添加。但是為了代碼的隱藏和符合編程的機制,一般都放到對應的.cpp。簡短的函數可以直接放在.h,你自己找起來也方便
3.包含了.h就能直接使用對應的.C。項目中這種事情一般讓編譯器去實現。其實編譯的時候,編譯器會自動檢索所有文件,只要你有聲明,實現不管你寫在哪,編譯器都會找到的,寫在對應的.h和.cpp是為了方便和規范的需要