C 語言中多文件編譯的問題

轉自百度知道

我的工程裏頭有兩個文件,main.c fun.c 一個頭文件tou.h
mian.c和fun.c中都用到了tou.h中聲明的函數

請問,我是不是該這樣做:
在main.c中#include <tou.h>
在fun.c中同樣#include <tou.h>(好像是必需的,請詳細解釋)

(我的觀點,如果這兩步都是必需的 那麼當有很多個比如10個.c程序每個裏頭都要#include <tou.h> 那麼文件是不是會特別大,當有100個.c程序都要包含一下的話,那麼不是非常重複麼?)

如果這兩步都是必需的,第二個問題,這樣會不會引起頭文件多次被包含的問題?怎麼解決。
解釋的過程中請說一下頭文件被多次包含是什麼情況引起的。

第三個問題:
當我在main.c中這樣
#define unchar unsigned char

那麼當我在fun.c中還需要重新創建替換宏unchar嗎 可以不在創建而直接使用嗎?

以上三個問題,請大蝦詳細解釋一下。非常感謝!
如果我定義的頭文件是 tou.h
那麼根據你們說的那個解決多次包含的方法
我是應該這樣寫
#ifndef  tou.h
#define  tou.h
還是這樣寫
#ifndef _tou_h
#define _tou_h
還是這樣寫
#ifndef _tou.h_
#define _tou.h_
*******************************************************************************************
第一個問題
請問,我是不是該這樣做: 
在main.c中#include <tou.h> 
在fun.c中同樣#include <tou.h>(好像是必需的,請詳細解釋) 
這是必需的。因爲編譯器只是把包含文件的代碼複製過來,既然你二個文件中都用到頭文件的內容,那當然要包含頭文件,否則就會出錯。
我的觀點,如果這兩步都是必需的 那麼當有很多個比如10個.c程序每個裏頭都要#include <tou.h> 那麼文件是不是會特別大,當有100個.c程序都要包含一下的話,那麼不是非常重複麼?) 那當然是會重複的。不過這個對程序的運行效率沒任何影響,只是在編譯過程中對文件的分析時間會稍長些,這也是沒有辦法的事,全看代碼編寫者如何組織結構了。
第二個問題:
會的。解決的方法就是在可能被多次包含的頭文件中開頭加上#pragma once,那樣就可以保證此頭文件代碼只被執行一次,而不會造成頭文件中函數多次重複定義至於引起這種情況的情況。當然你也可以自己用#ifdef等預編譯處理來解決。你問的問題不就是這種情況麼?main.c和fun.c中都包含頭文件tou.h

第三個問題: 
當我在main.c中這樣 
#define unchar unsigned char 

那麼當我在fun.c中還需要重新創建替換宏unchar嗎 可以不在創建而直接使用嗎? 

答案是需重新創建,不能直接使用。但你可以把一些在多個文件中使用的宏、全局變量等統一定義到一個頭文件中,那這樣就可以避免多次定義了。
2.有可能引起頭文件的重複包含,如果頭文件是你自己寫的話,一般要寫上:
#ifndef __XXXX_H
#define __XXXX_H
/*你的頭文件內容*/
#endif
所有C標準頭文件都有類似的結構。你可以自行查看編譯器附帶的include中的頭文件證實。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章