由於標頭檔案是為了重用,所以在乙個複雜的程式中,標頭檔案可能會被間接地重複包含。如果標頭檔案裡面都是函式宣告,那問題還不大。如果標頭檔案裡面有函式定義(如程式11.2),那麼就會出現函式被重複定義的錯誤,程式將無法執行。我們可以採用函式宣告和定義分離的方式:把所有的宣告都放在shape.h中,把所有的定義放在shape.cpp中。注意必須在shape.cpp中包含shape.h,否則在編譯連線時會發生錯誤。我們在使用時仍然包含shape.h,但由於函式的定義並不在該標頭檔案中,所以就不會被重複定義了。
我們幾乎每次編寫程式的時候都要用到#include命令,那麼這條命令到底是什麼意思呢?
#include是一條編譯預處理命令。什麼叫編譯預處理命令呢?我們知道,程式中的每一句語句會在執行的時候能得到體現。比如變數或函式的宣告會建立乙個變數或者函式,輸出語句會在螢幕上輸出字元。然而編譯預處理命令卻不會在執行時體現出來,因為它是寫給編譯器的資訊,而不是程式中需要執行的語句。編譯預處理命令不僅僅只有#include一條,在c++中,所有以#開頭的命令都是編譯預處理命令,比如#if、#else、#endif、#ifdef、#ifndef、#undef和#define等等。
當編譯器遇到了#include命令後,就把該命令中的檔案插入到當前的檔案中。不難想象,程式11.2的main.cpp檔案實質上包含了shape.**件中的所有語句。所以它能夠順利呼叫shape.**件中的各個函式。
問題:h標頭檔案還有c檔案中該放些什麼東西?
描述:
以前我都是在.h標頭檔案中定義函式,然後把.**件include到main()所在的.c檔案,在mian()函式中呼叫.h中的函式。
最近有朋友告訴我不能這麼做,應該把函式宣告寫在.h中,另外建個.c檔案定義具體的函式操作,再把.**件include到main()所在的.c檔案,呼叫即可。
不知這個問題怎麼處理才好?
解決方案1:
函式宣告寫在.h中,另外建個.c檔案定義具體的函式操作,再把.**件include到main()所在的.c檔案
解決方案2:
最近有朋友告訴我不能這麼做,應該把函式宣告寫在.h中,另外建個.c檔案定義具體的函式操作,再把.**件include到main()所在的.c檔案,呼叫即可。
一般是在.h裡宣告,在對應名字的.cpp裡寫介面跟功能,(模板除外),然後其他.cppx需要呼叫就包含標頭檔案就可以了.
解決方案3:
乙個好習慣,除了static,inline,extern函式,正常的函式不要在.h裡實現,只是把申明放在h裡,實現放在。c裡。
解決方案4:
一般推薦標頭檔案用於放宣告,原始檔用於定義和實現,但是有些定義也可以放在標頭檔案中。
引用樓主 zhouzb889 的帖子:
以前我都是在.h標頭檔案中定義函式,然後把.**件include到main()所在的.c檔案,在mian()函式中呼叫.h中的函式。最近有朋友告訴我不能這麼做,應該把函式宣告寫在.h中,另外建個.c檔案定義具體的函式操作,再把.**件include到main()所在的.c檔案,呼叫即可。
不知這個問題怎麼處理才好?
解決方案5:
你的朋友是對的。
這個問題的關鍵在於你的方法是適合在小的工程中,不會有多次包含標頭檔案的情況,或者很容易避免這樣的情況,如果專案的**比較多的時候,
你的方法就會有比較大的問題。
會出現多個檔案同時包含乙個。**件,然後編譯的過程就出現重定義,然後你只好吭哧吭哧該**吧。。。
解決方案6:
可以包含巨集定義、類定義、結構體定義、模板定義、全域性變數宣告,函式宣告、內聯函式定義等。
不要包含全域性變數定義,函式定義。
以上的例子可能列舉得還不全。
其實從本質上講,只需要明白一件事:標頭檔案是用來被別人包含的,因此同乙個標頭檔案極有可能被兩個以上的cpp檔案所包含(比如就常被多個cpp檔案包含)。因此凡是在兩個編譯單元重複出現兩次會出錯的東西都不要放在.h中。
C語言中標頭檔案是如何包含的?也說重定義
隨著 越寫越長,乙個原始檔的體制越來越臃腫。於是提倡將 寫到不同的多個原始檔中去。將 寫到多個原始檔中去就會遇到各個原始檔中函式與變數的呼叫規則問題。通常人們習慣性的把巨集定義 結構體 聯合體 列舉 外部變數和外部函式宣告等寫入到頭檔案.h中去,而把函式的宣告 變數定義等寫入到.c檔案中去。當某一....
乙個包含所有c 的標頭檔案的標頭檔案
include 使用和平常的標頭檔案一樣,如下 includeusing namespace std int main int a,b cin a b cout include這個標頭檔案包含以下等等c 中包含的所有標頭檔案 include include include include inclu...
寫乙個標準的c程式需要包含的標頭檔案
寫乙個標準的c程式需要包含的標頭檔案 這裡說的寫乙個標準的c程式,真的就是乙個標準的c程式,不能包含一點c 程式設計的習慣,這樣為了以後程式設計的規範。之前一直不注意這個問題,今天做華為的機試的時候,就吃到了苦頭。一 包含 include stdio standard input output 標準...