程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 高質量C++/C編程指南-第1章-文件結構

高質量C++/C編程指南-第1章-文件結構

編輯:關於C++

第1章 文件結構 每個C++/C程序通常分為兩個文件。一個文件用於保存程序的聲明( declaration ),稱為頭文件。另一個文件用於保存程序的實現( implementation ),稱為定義( definition )文件。

C++/C 程序的頭文件以“ .h ”為後綴, C 程序的定義文件以“ .c ”為後綴, C++ 程序的定義文件通常以“ .cpp ”為後綴(也有一些系統以“ .cc ”或“ .cxx ”為後綴)。

1.1 版權和版本的聲明 版權和版本的聲明位於頭文件和定義文件的開頭(參見示例 1-1 ),主要內容有:

( 1 )版權信息。

( 2 )文件名稱,標識符,摘要。

( 3 )當前版本號,作者 / 修改者,完成日期。

( 4 )版本歷史信息。

/*

* Copyright (c) 2001,上海貝爾有限公司網絡應用事業部

* All rights reserved.

*

* 文件名稱: filename.h

* 文件標識: 見配置管理計劃書

* 摘 要: 簡要描述本文件的內容

*

* 當前版本: 1.1

* 作 者: 輸入作者(或修改者)名字

* 完成日期: 2001年7月20日

*

* 取代版本 : 1.0

* 原作者 : 輸入原作者(或修改者)名字

* 完成日期: 2001年5月10日

*/

示例 1-1 版權和版本的聲明

1.2 頭文件的結構 頭文件由三部分內容組成:

( 1 )頭文件開頭處的版權和版本聲明(參見示例 1-1 )。

( 2 )預處理塊。

( 3 )函數和類結構聲明等。

假設頭文件名稱為 graphics.h,頭文件的結構參 見示例 1-2 。

l 【規則 1-2-1 】 為了防止頭文件被重復引用,應當用 ifndef/define/endif 結構產生預處理塊。

l 【規則 1-2-2 】 用 #include < filename.h> 格式來引用標准庫的頭文件(編譯器將從標准庫目錄開始搜索)。

l 【規則 1-2-3 】 用 #include “filename.h” 格式來引用非標准庫的頭文件(編譯器將從用戶的工作目錄開始搜索)。

2 【建議 1-2-1 】 頭文件中只存放“聲明”而不存放“定義”

在 C++ 語法中,類的成員函數可以在聲明的同時被定義,並且自動成為內聯函數。這雖然會帶來書寫上的方便,但卻造成了風格不一致,弊大於利。建議將成員函數的定義與聲明分開,不論該函數體有多麼小。

2 【建議 1-2-2 】 不提倡使用全局變量,盡量不要在頭文件中出現象 extern int value 這類聲明。

// 版權和版本聲明見示例 1-1 ,此處省略。

#ifndef GRAPHICS_H // 防止 graphics.h 被重復引用

#define GRAPHICS_H

#include <math.h> // 引用標准庫的頭文件

#include “myheader.h” // 引用非標准庫的頭文件

void Function1(…); // 全局函數聲明

class Box // 類結構聲明

{

};

#endif

示例 1-2 C++/C頭文件的結構

1.3 定義文件的結構 定義文件有三部分內容:

(1) 定義文件開頭處的版權和版本聲明(參見示例 1-1 )。

(2) 對一些頭文件的引用。

(3) 程序的實現體(包括數據和代碼)。

假設定義文件的名稱為 graphics.cpp, 定義 文件的結構參 見示例 1-3 。

// 版權和版本聲明見示例 1-1 ,此處省略。

#include “graphics.h” // 引用頭文件

// 全局函數的實現體

void Function1(…)

{

}

// 類成員函數的實現體

void Box::Draw(…)

{

}

示例 1-3 C++/C定義文件的結構

1.4 頭文件的作用 早期的編程語言如 Basic 、 Fortran 沒有頭文件的概念, C++/C 語言的初學者雖然會用使用頭文件,但常常不明其理。這裡對頭文件的作用略作解釋:

( 1 )通過頭文件來調用庫功能。在很多場合,源代碼不便(或不准)向用戶公布,只要向用戶提供頭文件和二進制的庫即可。用戶只需要按照頭文件中的接口聲明來調用庫功能,而不必關心接口怎麼實現的。編譯器會從庫中提取相應的代碼。

( 2 )頭文件能加強類型安全檢查。如果某個接口被實現或被使用時,其方式與頭文件中的聲明不一致,編譯器就會指出錯誤,這一簡單的規則能大大減輕程序員調試、改錯的負擔。

1.5 目錄結構 如果一個軟件的頭文件數目比較多(如超過十個),通常應將頭文件和定義文件分別保存於不同的目錄,以便於維護。

例如可將頭文件保存於 include 目錄,將定義文件保存於 source 目錄(可以是多級目錄)。

如果某些頭文件是私有的,它不會被用戶的程序直接引用,則沒有必要公開其“聲明”。為了加強信息隱藏,這些私有的頭文件可以和定義文件存放於同一個目錄。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved