私の同僚はANSI Cのconstでちょっとしたナッツをしています。皆さんが考えていることを知りたいと思っていました。彼は、例えば、このようなものを書き込みます:
複数のconstを1つの変数宣言に入れてください
const uint8* const pt_data
彼はこれで起こっている私にとって、それはどこでも、すべてのこれらのconstと読み取りと保守が難しくなりますどこ私は理解しています。
私の同僚はANSI Cのconstでちょっとしたナッツをしています。皆さんが考えていることを知りたいと思っていました。彼は、例えば、このようなものを書き込みます:
複数のconstを1つの変数宣言に入れてください
const uint8* const pt_data
彼はこれで起こっている私にとって、それはどこでも、すべてのこれらのconstと読み取りと保守が難しくなりますどこ私は理解しています。
const
を指すポインタconst
です。
const
が*pt_data = 10;
const
は、それはかなり合法的なことができように見えますpt_data = stuff;
を防ぐことができます。
定数データへの定数ポインタです。
これは、データ(アドレスpt_data
が格納されています)を変更することはできず、ポインタ(pt_data
)を他のもの(別のアドレス)に変更することもできないことを意味します。
彼はおそらくそれを必要とします。
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
変数名で開始し、反時計回りに行く場合は、pt_data
はconst
あるuint8
からconst
ポインタです。
は以下の粗ASCIIの画像を参照してください:
,--------------------------------. | | | ,------------------------. | | | | | | | ,------------------. | | | | | | | | | | | ,-----------. | | | | | | | | | | | const uint8 * const pt_data; | | | | | | | | | | | | | | | `-----' | | | | | | | | | | | `-------------' | | | | | | | `--------------------' | | | `--------------------------'
私は何年も前の古いC帳にこのスキームを見て以来、それは私が複雑な宣言を理解し支援してきました。
これはDavid Andersonの[時計回りまたは螺線形のルール](http://c-faq.com/decl/spiral.anderson.html)です。 –
@Als私は方向が間違っているようだが、少なくとも今はそれを説明するときに指摘するところがある。ありがとう! :) –
質問がありますか?このサイトはあなたの意見を表明するためのものではなく、質問に対する客観的な回答を得るためのものです。 – interjay
入力していただきありがとうございます... – Leo
あなたの同僚はヘッダーファイルと実装でこれを行いますか? –