C++中頭文件一般包含哪些東西?


頭文件和源文件

由於頭文件是為了重用,所以在一個復雜的程序中,頭文件可能會被間接地重復包含。如果頭文件里面都是函數聲明,那問題還不大。如果頭文件里面有函數定義(如程序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


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM