-4

重複の可能性:
C の「static const」と「#define」

const私の最初の考えは、これは暗示されているということですが、代わりに使用する理由はあり#defineますか?

グローバル変数を設定する場合、なぜそれを変更したいのですか? また、グローバルに保護したくないのですか?

4

3 に答える 3

5

Const は通常置き換えます#define

#defineテキストの置換を行うことができるプリプロセッサ マクロです。これを使用して、定数やマクロを定義したり、その他のあらゆることを行うことができます。

const は、コンパイル時の定数を定義するタイプセーフな方法です

これら 2 つのメカニズムは、コンパイル プロセスの異なる時点で発生しますが、一般に、const は の問題を修正するために作成されました#define

私はめったに人々がそのようなことをしているのを見たことがありません

#define CONSTINT  const int

しかし、それは合法です。

于 2013-01-16T23:55:42.800 に答える
4

constサブルーチンがそれらを変更できないことを保証する、実行時に渡される変数にのみ関連します。#defineは、定義したものを定義したものに置き換えるプリプロセッサのコンパイル時ディレクティブです。したがって、それらは異なる目的のためのものです。

于 2013-01-16T23:59:56.427 に答える
2

編集これは、元の質問に対する回答です。使用するかどうかconst...define別の質問をするように質問を編集したので、意味がありません。

A#defineは変数を定義していないため、とにかく変更できないため、質問は意味がありません。

これは不可能です:

#define FOO 99

int main()
{
    FOO = 98;
}

プリプロセッサFOOが replacement99をマクロに置き換えるため、コンパイラには次のコードが表示されます。

int main()
{
    99 = 98;
}

そして明らかにそれはナンセンスです。リテラルに代入することはできません。それは変数ではなく (const であろうとなかろうと)、単なる値です。

于 2013-01-17T00:04:25.383 に答える