我們常在公共標頭檔案中定義一些常量,定義常量方法如下:
方法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...