簡體   English   中英

由於我的代碼中不應包含幻數,因此我應該#define零0

[英]Since I'm not supposed to have magic numbers in my code, should I #define ZERO 0

我想優化代碼的可讀性。 我不希望看到我的代碼的人在看到0時感到困惑。 0含義可能非常模棱兩可。 例如,如果我有一條類似if (myVector.size() > 0)的語句,那可能會造成混淆,因為畢竟在這種情況下,零意味着什么? 我想知道我是否應該放

#define ZERO 0

在我的代碼的頂部。

您錯過這里的重點。 魔術是不是使用了許多 - 這是關於能夠理解為什么用這個特殊號碼。 當您將size()與0比較時,您的意圖非常明顯。 您是否將它與其他任何數字(例如42 )進行了比較,您必須解釋為什么選擇了此特定數字。

至於這個特定的更改( 0 => ZERO ),它將在您的代碼中引入重言式。

這樣,在比較,初始化計數器,索引,累加器,算術表達式...中使用0是完全可以理解的。

在確切值無關緊要且可以更改而不會造成任何損害的情況下創建標識符是有意義的,並且具有針對上下文的特定解釋,例如FREE_CLUSTER或NO_ERROR。

我想知道我是否應該放
#define ZERO 0
在我的代碼的頂部。

只要您要的是0 幻數不,不要這樣做! 你應該簡單地使用

if (myVector.size()) // ...

等效地復制您的語句的行為。

確保使用語言,對於條件表達式的評估, 0評估為false ,其他任何值評估為true

不,不要那樣做。 這是一個錯誤的選擇,完全沒有必要。 在這種情況下,您的代碼非常明顯:

if (myVector.size() > 0)

沒有人會對此感到困惑。 但是如果是這樣的話:

if (myVector.size() > 23*66)

那樣的話會令人困惑,因為有人會讀你的代碼,想知道23*66是什么意思。 這是一個魔術數字。 在這樣的上下文中,# #define可能會有所幫助,並附帶注釋,例如:

/* We have at most 23 files with 66 records each */
#define MAX_RECORDS_NO 23*66

然后您將擁有:

if (myVector.size() > MAX_RECORDS_NO)

在這種情況下,您可以並且肯定希望避免使用幻數。 請注意,# #define是該數字含義的描述 ,如果我按照您的邏輯,我會改為選擇此數字:

#define TWENTY_THREE_TIMES_SIXTY_SIX 23*66

現在,這不是很有幫助,是嗎? #define ZERO 0完全錯了這一點:它不會給閱讀代碼的人增加任何東西,它太冗長,而且它沒有用,因為0的值不太可能改變。 如果突然之間您想將myVector.size()與另一個數字進行比較怎么辦? 您必須替換常量名稱,因為將ZERO定義為0以外的其他值會帶來麻煩。 所以,畢竟,您一無所獲。

您不需要這樣做。

如您所見,原始代碼已經很簡單了。

另外,考慮一下。 如果將零定義為0,是否要將零更改為0以外的其他值? 當然,答案是否定的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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