重複の可能性:
C の「static const」と「#define」
const
私の最初の考えは、これは暗示されているということですが、代わりに使用する理由はあり#define
ますか?
グローバル変数を設定する場合、なぜそれを変更したいのですか? また、グローバルに保護したくないのですか?
重複の可能性:
C の「static const」と「#define」
const
私の最初の考えは、これは暗示されているということですが、代わりに使用する理由はあり#define
ますか?
グローバル変数を設定する場合、なぜそれを変更したいのですか? また、グローバルに保護したくないのですか?
Const は通常置き換えます#define
#define
テキストの置換を行うことができるプリプロセッサ マクロです。これを使用して、定数やマクロを定義したり、その他のあらゆることを行うことができます。
const は、コンパイル時の定数を定義するタイプセーフな方法です
これら 2 つのメカニズムは、コンパイル プロセスの異なる時点で発生しますが、一般に、const は の問題を修正するために作成されました#define
。
私はめったに人々がそのようなことをしているのを見たことがありません
#define CONSTINT const int
しかし、それは合法です。
const
サブルーチンがそれらを変更できないことを保証する、実行時に渡される変数にのみ関連します。#define
は、定義したものを定義したものに置き換えるプリプロセッサのコンパイル時ディレクティブです。したがって、それらは異なる目的のためのものです。
編集これは、元の質問に対する回答です。使用するかどうかconst
...define
別の質問をするように質問を編集したので、意味がありません。
A#define
は変数を定義していないため、とにかく変更できないため、質問は意味がありません。
これは不可能です:
#define FOO 99
int main()
{
FOO = 98;
}
プリプロセッサFOO
が replacement99
をマクロに置き換えるため、コンパイラには次のコードが表示されます。
int main()
{
99 = 98;
}
そして明らかにそれはナンセンスです。リテラルに代入することはできません。それは変数ではなく (const であろうとなかろうと)、単なる値です。