2012-02-02 12 views
0

私の同僚はANSI Cのconstでちょっとしたナッツをしています。皆さんが考えていることを知りたいと思っていました。彼は、例えば、このようなものを書き込みます:
複数のconstを1つの変数宣言に入れてください

const uint8* const pt_data 

彼はこれで起こっている私にとって、それはどこでも、すべてのこれらのconstと読み取りと保守が難しくなりますどこ私は理解しています。

+3

質問がありますか?このサイトはあなたの意見を表明するためのものではなく、質問に対する客観的な回答を得るためのものです。 – interjay

+0

入力していただきありがとうございます... – Leo

+0

あなたの同僚はヘッダーファイルと実装でこれを行いますか? –

答えて

5

constを指すポインタconstです。

  • 最初const*pt_data = 10;
  • を防ぐ二constは、それはかなり合法的なことができように見えますpt_data = stuff;

を防ぐことができます。

+0

それはまた良いプログラミング実践です。最初に発生するバグをもっと安く抑えるためにコンパイラを入手してください。 –

+0

@EdHealさて、そうかもしれません。しかし、一定の基準を満たした後、私はすべての不安を抱えているだけで、あなたの人生を単純に難しくしています。しかし、一般的には有用で自己文書化しています。 – cnicutar

+0

それは私が感じていることです、私は有用性を理解することを意味しますが、男はどこにでもconstを置くので、コードを読むのが難しくなります – Leo

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)は、文字列内のデータが変更されないことを示します。char

1

変数名で開始し、反時計回りに行く場合は、pt_dataconstあるuint8からconstポインタです。

は以下の粗ASCIIの画像を参照してください:

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

私は何年も前の古いC帳にこのスキームを見て以来、それは私が複雑な宣言を理解し支援してきました。

+1

これはDavid Andersonの[時計回りまたは螺線形のルール](http://c-faq.com/decl/spiral.anderson.html)です。 –

+0

@Als私は方向が間違っているようだが、少なくとも今はそれを説明するときに指摘するところがある。ありがとう! :) –

関連する問題