なぜ「const T」と「T const」は両方とも有効なのですか?
C 言語では、アスタリスクの両側に const を指定できます。ポインタを宣言するとき。この柔軟性は、C 文法の左から右の解析アプローチから生まれます。
左から右の解析
C コンパイラは、入力トークンを左から右に解析します。ポインター宣言を解析するときに、 トークンが検出され、ポインター型が定義されていると想定されます。 の前にある const 修飾子は、指すデータのタイプに適用されます。ただし、const 修飾子が * の後にある場合は、ポインター自体に適用されます。
意味上の同等性
ポインター宣言の意味上の意味は、次の条件に関係なく同じままです。 constの位置。 const が型指定子の左側にあるか右側にあるかに関係なく、コンパイラはそれを同じように解釈します。 " も同様に有効ですが、一部のプログラマは、データ自体の定数を明示的に指定するために左側に const を配置することを好みます。ただし、どちらの構文を選択するかは個人の好みの問題です。
関数ポインター
関数ポインターを宣言するときにも同様の状況が発生します。構文 "void
function1(void)" は voidを返す関数を宣言し、"void (* function2)(void)" は void を返す関数への関数ポインターを宣言します。
結論ポインタのアスタリスクの両側に const を指定できる機能宣言は、C コンパイラの左から右への解析メカニズムの結果です。意味的には、const の位置は宣言の意味には影響しません。プログラマは、読みやすさや一貫性を重視して、好きな構文を自由に使用できます。
以上がC では「const T*」と「T const*」の両方が有効なポインタ宣言であるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。