c 公共常量定義方式的比較

2021-06-07 12:13:17 字數 1439 閱讀 4462

我們常在公共標頭檔案中定義一些常量,定義常量方法如下:

方法1commdef.h(公共標頭檔案):

const int constname = ***;

在使用該變數的地方加入 #include "commdef.h"

方法2commdef.h(公共標頭檔案):

extern const int constname;

commdef.cpp檔案:

const int constname = ***;

在使用該變數的地方加入#include "commdef.h"

由於這兩種方式都編譯執行沒問題,所以程式設計師很少留意它們的區別。兩種方法的比較:

若新增刪除常量常量,用方法1更方便,只需在.h檔案中修改;若改變常量值,使用方法2的程式因不需要改標頭檔案,則更節省編譯時間。

若從記憶體使用上看,哪種更好?接下來測試看看。

測試程式定義了兩個模組,test1和test2,test1.cpp和test2.cpp都引用了commdef.h標頭檔案,使用了全域性常量,我們通過檢視各個模組的常量位址來確定是否另分配了記憶體。

環境:windows + vs2005

// commdef.h檔案

#ifndef lx_commdef_h

#define lx_commdef_h

const int max_length = 1024;

extern const int min_length;

#endif

// commdef.cpp檔案

#include "commdef.h"

const int min_length = 10;

// test1.cpp檔案(注:標頭檔案內容由於簡單所以省略掉了)

#include "commdef.h"

#include "test1.h"

#include

using namespace std;

void functest1()

// test2.cpp檔案(注:標頭檔案內容由於簡單所以省略掉了)

#include "commdef.h"

#include "test1.h"

#include

using namespace std;

void functest2()

輸出:max_length = 1024, address: 00437ae4

min_length = 10, address: 00437b54

max_length = 1024, address: 00437b1c

min_length = 10, address: 00437b54

可見,用方法1定義的常量在多個模組中是分別儲存的,用方法2定義的常量是在一處儲存的,所以,在儲存上,方法2要優於方法1。

特別是當常量多,標頭檔案被引用多的情況下尤其注意,定義不當會帶來不必要的記憶體浪費。

定義常量的方式

開發中往往需要定義一些常量。單個的很簡單,如果是多個一組的話,1.使用列舉定義 public enum sv question type public integer getvalue 2.使用靜態常量map定義 推薦 在頁面存入的時候比較方便 收集資料列型別 public final static...

採用巨集定義常量的表示方式為 C 常量

常量是固定值,在程式執行期間不會改變。這些固定的值,又叫做字面量。常量可以是任何的基本資料型別,可分為整型數字 浮點數字 字元 字串和布林值。常量就像是常規的變數,只不過常量的值在定義後不能進行修改。整數常量可以是十進位制 八進位制或十六進製制的常量。字首指定基數 0x 或 0x 表示十六進製制,0...

C 常量的定義

1 巨集定義 define demo 10 這種方式定義的常量,在編譯時,編譯器看不到demo這個名稱,在預處理的時候都被替換了。於是demo沒有進入符號表內,這樣,在運用此常量的地方出現編譯錯誤時,錯誤資訊不會提到demo,會導致難以定位錯誤資訊。另外在進行除錯時,也看不到demo名稱。2 con...