C++中標頭檔一般包含哪些東西?

來源:互聯網
上載者:User

標籤:ios   運行時   輸出   shape   重複包含   源檔案   重定義   .net   .com   

標頭檔和源檔案

由於標頭檔是為了重用,所以在一個複雜的程式中,標頭檔可能會被間接地重複包含。如果標頭檔裡面都是函式宣告,那問題還不大。如果標頭檔裡面有函數定義(如程式11.2),那麼就會出現函數被重複定義的錯誤,程式將無法運行。我們可以採用函式宣告和定義分離的方式:把所有的聲明都放在shape.h中,把所有的定義放在shape.cpp中。注意必須在shape.cpp中包含shape.h,否則在編譯串連時會發生錯誤。我們在使用時仍然包含shape.h,但由於函數的定義並不在該標頭檔中,所以就不會被重複定義了。

細說#include

我們幾乎每次編寫程式的時候都要用到#include命令,那麼這條命令到底是什麼意思呢?

#include是一條編譯預先處理命令。什麼叫編譯預先處理命令呢?我們知道,程式中的每一句語句會在啟動並執行時候能得到體現。比如變數或函數的聲明會建立一個變數或者函數,輸出語句會在螢幕上輸出字元。然而編譯預先處理命令卻不會在運行時體現出來,因為它是寫給編譯器的資訊,而不是程式中需要執行的語句。編譯預先處理命令不僅僅只有#include一條,在C++中,所有以#開頭的命令都是編譯預先處理命令,比如#if、#else、#endif、#ifdef、#ifndef、#undef和#define等等。

當編譯器遇到了#include命令後,就把該命令中的檔案插入到當前的檔案中。不難想象,程式11.2的main.cpp檔案實質上包含了shape.h檔案中的所有語句。所以它能夠順利調用shape.h檔案中的各個函數。

來源:http://c.biancheng.net/cpp/biancheng/view/65.html

 

問題: h標頭檔還有c檔案中該放些什麼東西?
描述:

以前我都是在.h標頭檔中定義函數,然後把.h檔案include到main()所在的.c檔案,在mian()函數中調用.h中的函數。
最近有朋友告訴我不能這麼做,應該把函式宣告寫在.h中,另外建個.c檔案定義具體的函數操作,再把.h檔案include到main()所在的.c檔案,調用即可。
不知這個問題怎麼處理才好?

解決方案1:

函式宣告寫在.h中,另外建個.c檔案定義具體的函數操作,再把.h檔案include到main()所在的.c檔案

解決方案2:

最近有朋友告訴我不能這麼做,應該把函式宣告寫在.h中,另外建個.c檔案定義具體的函數操作,再把.h檔案include到main()所在的.c檔案,調用即可。 
一般是在.h裡聲明,在對應名字的.cpp裡寫介面跟功能,(模板除外),然後其他.cppx需要調用就包含標頭檔就可以了.

解決方案3:

一個好習慣,除了static,inline,extern函數,正常的函數不要在.h裡實現,只是把申明放在h裡,實現放在。c裡。

解決方案4:

一般推薦標頭檔用於放聲明,源檔案用於定義和實現,但是有些定義也可以放在標頭檔中。

引用樓主 zhouzb889 的文章:
以前我都是在.h標頭檔中定義函數,然後把.h檔案include到main()所在的.c檔案,在mian()函數中調用.h中的函數。 
最近有朋友告訴我不能這麼做,應該把函式宣告寫在.h中,另外建個.c檔案定義具體的函數操作,再把.h檔案include到main()所在的.c檔案,調用即可。 
不知這個問題怎麼處理才好?

 

解決方案5:

你的朋友是對的。
這個問題的關鍵在於你的方法是適合在小的工程中,不會有多次包含標頭檔的情況,或者很容易避免這樣的情況,如果項目的代碼比較多的時候,
你的方法就會有比較大的問題。
會出現多個檔案同時包含一個。h檔案,然後編譯的過程就出現重定義,然後你只好吭哧吭哧該代碼吧。。。

解決方案6:

可以包含宏定義、類定義、結構體定義、模板定義、全域變數聲明,函式宣告、內嵌函式定義等。
不要包含全域變數定義,函數定義。
以上的例子可能列舉得還不全。
其實從本質上講,只需要明白一件事:標頭檔是用來被別人包含的,因此同一個標頭檔極有可能被兩個以上的cpp檔案所包含(比如<iostream>就常被多個cpp檔案包含)。因此凡是在兩個編譯單元重複出現兩次會出錯的東西都不要放在.h中。  

 

連結:http://www.codes51.com/itwd/2908358.html

 

C++中標頭檔一般包含哪些東西?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.