簡體   English   中英

C:enum VS #define用於數學常數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM