重複の可能性:
「staticconst」とCの「#define」
私はCを学び始めましたが、マクロと定数変数の違いをはっきりと理解できませんでした。
私が書くと何が変わるか、
#define A 8
そして
const int A = 8
?
マクロはプリプロセッサによって処理されます。プリプロセッサはソースファイル内のテキストを置換し、出現するすべての「A」をリテラル8に置き換えます。
定数はコンパイラーによって処理されます。それらには、型安全性という追加の利点があります。
実際にコンパイルされたコードの場合、最新のコンパイラでは、2つの間にパフォーマンスの違いはありません。
マクロ定義の定数は、プリプロセッサに置き換えられます。定数「変数」は、通常の変数と同じように管理されます。
たとえば、次のコード:
#define A 8
int b = A + 10;
実際のコンパイラには次のように表示されます
int b = 8 + 10;
ただし、このコード:
const int A = 8;
int b = A + 10;
次のように表示されます:
const int A = 8;
int b = A + 10;
:)
実際には、変更される主なものはスコープです。定数変数は、Cの標準変数と同じスコープ規則に従います。つまり、特定のブロック内で、リークすることなく制限したり、場合によっては再定義したりできます。これは、ローカル変数に似ています。対グローバル変数の状況。
Cでは、あなたは書くことができます
#define A 8
int arr[A];
だがしかし:
const int A = 8;
int arr[A];
ルールを正しく思い出せば。 C++では、両方が機能することに注意してください。
一つには、前者はコンパイラが何かをする前にプリプロセッサにAのすべての出現を8に置き換えさせますが、後者はプリプロセッサを含みません