C言語のconstキーワードを使用して

 

まず、従来の使用法

 

constキーワードは、読み取り専用の変数を定義するために使用される変数は、constのが定義され、その値が同じ値を割り当てることができない場合でも、それは再割り当てすることはできません。これは、変更することはできません。だから、それが読み取り専用になり、それは定義の時に初期値を与えなければならないことを意味定義された変数を、。

 

修正形式でのconst変数は、通常、

 

const型名=値;

 

コード例(実施例)

 

const int型マックス。

 

これはまた、以下の(第二の方法)を書き込むことができます

 

int型のconstマックス。

 

それらが変更されたら、CONST変数が作成され、その値を変更できない、それは同時に定義された定数(初期化)を割り当てる必要があり、通常の状況(CONST変数は最初の文字大文字の推奨される変形であろう)の下で使用する最初の方法、割り当ての背後にある任意の動作は、エラーがスローされます。

 

エラーコード例:

 

二、のconstポインタ

 

ポインタでCONST組み合わせは2つの機能、ある限界ポインタ変数、データポイントを制限するための2つのポインタ変数を有します

 

変数自体ポインタの制限事項

 

int型*のconst P2; // constのポインタ変数が変更されました

 

ポインタ変数の制限は、それ自体を意味するポインタ変数がポインタCONSTが定義されたときにのみ、次のエラーコードは、割り当てを定義することができないこの後、初期化を改変するように、ポインタ変数自体の値は、修正することができません

 

ポインタ変数のデータポイントを制限

 

const int型* p1の。
int型のconst * p1の。

 

両方のスペルは一般に、第1、変数限定的な意味ポインタが別の変数(それ自体を修正することができるポインタの値)を指してデータポインタを指して使用することができるが、ポインタ値がポインタデータを修正することができず、エラーコードは以下の通りです

 

constポインタ変数の区別が限られているか、データ値を指すポインタ変数:過去からのconst変数名は、変数名はデータポインタを変更するために使用されて離れてから、ポインタ変数を変更するために使用され、もし近くと遠く、持っていますそして、それが指すと同時に、ポインタ変数やデータを変更します。

 

もちろん、また、ポインタ変数とポインタ変数のデータポイントの値を制限するように書か同時にこと

 

const int型*のconst P2;

 

データ変数とポインタ変数の値へのポインタポイントが変更することはできません上記文言

 

三、CONSTとファンクションのパラメータ

 

多くの場合、修飾された変数CONSTはなく、CONSTは一般に関数パラメータで使用の#defineコマンドを使用することができ、C標準ライブラリのCONSTパラメータ制限を使用する関数ポインタ内の変更を防止するためにされている多くの機能がありますデータ、例えばfopen_s

 

四、CONST及び変換の非const型

 

ポインタ変数STR1のCONSTが制限され、同様にCONSTチャー* 0009この形式は、データポインタは変更できない場合、別の変形のconstポインタ変数STR2に割り当てられていない場合STR1、危険が存在してもよいです。

 

データは、データがSTR1によって変更することはできません後に変更、とstr2で割り当てることができますので、意味がずれているので、コンパイラは、以下に示すように、それは、エラーまたは警告を与えるような行動を提唱しません。

 

言い換えれば、のconstのchar *とchar型の*は、さまざまな種類のものであり、あなたは* char型の変数へのconstのchar *データ型を割り当てることはできません。逆が可能である。しかし、コンパイラはchar *型の割り当ては、変数のCHAR *データ型をCONSTすることができます。この制限は、理解しやすい、CHAR *データの読み出しと書き込み権限は、データのみを指さ* constのcharは何の問題が発生することはありませんデータを削減するためのアクセス権限を読みますが、データは権限が上昇しているしていると指摘しました危険かもしれません。

 

この場合は、コンパイラが許可されていることです

 

五、の#defineとのconst

 

図1に示すように、プリコンパイラディレクティブを定義し、CONST変数の一般的な定義です。マクロが展開前段階で定義されている定義、および読み取り専用の変数のconst定義は、運用段階のコンパイルに使用されています。

 

2、CONST変数が定義され、そして定義された定数を定義しています。それは変数ではないので、それは、メモリを占有しない存在しないコンパイラで定義されたマクロを定義し、システムが変数にメモリを割り当てます。しかし、一定の変数の自然のconst定義は変数のまま、

 

入力された変数の基本的な性質を有する、ストレージユニットを占めています。当社は、一定の変数名が名前のない変数が、一定ではないがされていると言うことができます。観点から使用するように、アレイはできないの長さに加えて、プログラムで参照名前が容易に

 

マクロを使用する利点を持っているだけでなく、より便利に定義された定数の変数を使用してのconst。プログラミングCONSTを使用する場合したがって、代わりに、一定のマクロ変数を利用する場合と可能の両方を定義するが、可変定数constがマクロを定義する一例以下のいくつかの場合には交換することができません。

 

。3、CONST変数が定義され、オブジェクトCONSTは、データ型を定義し、オブジェクトがマクロ定義データ型ではないので、マクロ定義は、一定です。後者は機械的にのみ、文字の置き換えている間ので、コンパイラは、元のセキュリティチェックを入力することができ、

 

セキュリティチェックの型なし。これは間違って行くが容易になり、それが「限界の問題」または「括弧の問題。」

 

第六に、サプリメント

 

アレイの最大長さを定義するために、この時間は、CONST、CONST正常に定義された変数を使用することができない、すべての後、変数ではなく、配列の長さは、次のサンプルコードであります

 

あなた(配列の最大の長さを定義するだけでここでは、この問題が発生したピットの比較はVS2017のコンパイラは文句を言うだろうが、VC2010コンパイラは文句はありませんですが、VC2010はそうではないと推定されて定義するために、このケースを使用することができます厳しいです)

おすすめ

転載: www.linuxidc.com/Linux/2019-08/159742.htm