2012-02-02 88 views
0

我的一位同事在ANSI C中與const有點相似,我想知道你們對它的想法。他寫這樣的東西,例如:
在一個變量聲明中有多個常量

const uint8* const pt_data 

我明白,他與這是怎麼回事,但對我來說它使閱讀和可維護性很難與所有這些常量無處不在。

+3

對此有疑問?本網站不是爲了表達您的意見,而是爲了獲得客觀的問題答案。 – interjay 2012-02-02 09:04:46

+0

感謝您的輸入...在 – Leo 2012-02-02 09:10:41

+0

下回答的問題您的同事是否在頭文件和實現中都這樣做? – 2012-02-02 09:28:55

回答

5

這是一個const指向const數據的指針。

  • 第一const防止*pt_data = 10;
  • 第二const防止pt_data = stuff;

看起來它可以是相當合理的。

+0

這樣做也是很好的編程習慣。獲得編譯器來防止首先發生的任何錯誤要便宜很多。 – 2012-02-02 09:10:13

+0

@EdHeal好吧,它可以。但是,經過一定的門檻後,我發現所有的常量都會讓你的生活更加艱難。但是,是的,這通常是有用的和自我記錄。 – cnicutar 2012-02-02 09:11:20

+0

這就是我也覺得,我的意思是我理解的用處,但是那傢伙把常量無所不在,所以它使代碼難以閱讀 – Leo 2012-02-02 09:13:11

5

它是一個常量指針,指向一個常量數據。
這意味着你不能改變數據(其地址爲pt_data存儲),也不能改變指針(pt_data)指向其他地址(其他地址)。

他可能需要這種方式。

4

const總是指其右邊的字,除非它是在該行,它指的是項目本身的結束(在高級語言)

const char* str; //This is a pointer to read-only char data 
       //Read as to (const char)* str; 
       //Thus : 
       // *str = 'a'; 
       //Is forbidden 

char* const str; //This is a read-only pointer to a char data 
       //Read as char* (const str); 
       //Thus : 
       // str = &a; 
       //Is forbidden 

const char* const str; //This is a read-only pointer to read-only char data 
         //Read as (const char)* (const str); 
         //Thus : 
         // str = &a 
         // and 
         // *str = 'a'; 
         //Is forbidden 

你應該總是初始化這些指示它們時的指針(除非它們是參數)

const關鍵字非常適合確保某些內容不會被修改,並且還會告訴它不應該被修改的開發者。例如int strlen(const char* str)告訴你在你的字符串中的數據不會被修改。

1

如果從變量名開始,逆時針轉動,pt_dataconst指向uint8的指針,它是const

請參見下面的原油ASCII圖片:

 
    ,--------------------------------. 
    |        | 
    |  ,------------------------. | 
    |  |      | | 
    |  | ,------------------. | | 
    |  | |     | | | 
    |  | | ,-----------. | | | 
    |  | | |   | | | | 
const uint8 * const pt_data; | | | | 
     | | |  |  | | | | 
     | | |  `-----' | | | 
     | | |    | | | 
     | | `-------------' | | 
     | |     | | 
     | `--------------------' | 
     |       | 
     `--------------------------' 

自從我在一箇舊的C的書很多年前看到這個方案,它幫助我理解複雜的聲明。

+1

這是大衛·安德森[順時針或螺旋規則(http://c-faq.com/decl/spiral.anderson.html)。 – 2012-02-02 11:05:38

+0

@Als看來我的方向錯了,但至少現在我有地方點描述它時。謝謝! :) – 2012-02-02 11:17:06