1、儘量用const和inline而不用#define這個條款最好稱為:“儘量用編譯器而不用預處理”,因為#define經常被認為好象不是語言本身的一部分。這是問題之一。2、再看下面的語句:#defineASPECT_RATIO1.653編譯器會永遠也看不到ASPECT_RATIO這個符號名,因為在原始碼進入編譯器之前,它會被預處理程式去掉,於是ASPECT_RATIO不會加入到符號列表中。如果涉及到這個常量的程式碼在編譯時報錯,就會很令人費解,因為報錯資訊指的是1.653,而不是ASPECT_RATIO。如果ASPECT_RATIO不是在你自己寫的標頭檔案中定義的,就會奇怪1.653是從哪裡來的,甚至會花時間跟蹤下去。這個問題也會出現在符號偵錯程式中,因為同樣所寫的符號名不會出現在符號列表中。解決這個問題的方案很簡單:不用預處理宏,定義一個常量:constdoubleASPECT_RATIO=1.653;這種方法很有效。但有兩個特殊情況要注意。首先,定義指標常量時會有點不同。因為常量定義一般是放在標頭檔案中(許多原始檔會包含它),除了指標所指的型別要定義成const外,重要的是指標也經常要定義成const。例如,要在標頭檔案中定義一個基於char*的字串常量,要寫兩次const:constchar*constauthorName="ScottMeyers";
1、儘量用const和inline而不用#define這個條款最好稱為:“儘量用編譯器而不用預處理”,因為#define經常被認為好象不是語言本身的一部分。這是問題之一。2、再看下面的語句:#defineASPECT_RATIO1.653編譯器會永遠也看不到ASPECT_RATIO這個符號名,因為在原始碼進入編譯器之前,它會被預處理程式去掉,於是ASPECT_RATIO不會加入到符號列表中。如果涉及到這個常量的程式碼在編譯時報錯,就會很令人費解,因為報錯資訊指的是1.653,而不是ASPECT_RATIO。如果ASPECT_RATIO不是在你自己寫的標頭檔案中定義的,就會奇怪1.653是從哪裡來的,甚至會花時間跟蹤下去。這個問題也會出現在符號偵錯程式中,因為同樣所寫的符號名不會出現在符號列表中。解決這個問題的方案很簡單:不用預處理宏,定義一個常量:constdoubleASPECT_RATIO=1.653;這種方法很有效。但有兩個特殊情況要注意。首先,定義指標常量時會有點不同。因為常量定義一般是放在標頭檔案中(許多原始檔會包含它),除了指標所指的型別要定義成const外,重要的是指標也經常要定義成const。例如,要在標頭檔案中定義一個基於char*的字串常量,要寫兩次const:constchar*constauthorName="ScottMeyers";