[英]C: enum VS #define for mathematical constants?
我想知道存儲整個程序中使用的數學常量的最佳方法是什么?
#define PI 3.14159265
#define SPEEDOFLIGHT 2.99792458e8
要么
enum constants { PI = 3.14159265; SPEEDOFLIGHT = 2.99792458e8; }
謝謝
不要為此使用const
變量! 在C語言中, const
限定變量在常量表達式意義上不是常量,因此它不能用於初始化靜態/全局變量。 這具有重大的實際后果; 例如,以下內容不起作用:
static const double powers_of_pi[] = { 1, PI, PI*PI, PI*PI*PI, PI*PI*PI*PI, };
正確的解決方案是#define
。 最好使用l
后綴,以便它們具有long double
類型,並包含足夠多的小數位,這些值對於long double
128位的long double
類型來說是正確的。 然后,您可以在任何預期浮點類型的地方使用它們; C會根據需要靜默地將它們轉換為更低的精度。
它們都不使用常量值來保留編譯器的類型檢查:
static const double PI = 3.14159265;
static const double SPEEDOFLIGHT = 2.99792458e8;
#define
只是文本替換,並且不知道類型。 double
值。 編輯:謝謝aaa
。 我忘記了static
關鍵字,當在c頭文件中聲明常量時特別有用。 (在C ++中不需要靜態)
我個人更喜歡只做pi和c = 1,讓宇宙處理問題
由於枚舉是整數常量,我會使用#define
。
我同意jdehaan的觀點,即全局const
對象更好。
同意jdehaan,更喜歡常量進行更明確的類型檢查/轉換。
另外,使用你所描述的枚舉並不是枚舉的真正目的。 這些常數只是在數學上相關(如果宇宙學家hocus-pocus最終是正確的)。 枚舉的目的是組合相似的值,例如:
enum color
{
red = 0xFF0000;
yellow = 0xFFFF00;
baby_puke_green = 0x9ACD32;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.