1. ホーム
  2. c

C言語で文字列定数はどのように宣言するのですか?

2023-09-21 02:24:47

質問

私は、C 言語では数値定数を enum の代わりに #define の代わりに

/* bad style */
#define MAXLINE 1024

/* good/better style */
enum {
    MAX_LINE = 1024
};

文字列定数の定義に同等のルールはありますか?

/* is this good style? */
#define HELLO "Hello World"

/* or is this better? */
const char *HELLO2 = "Howdy";

あなたはどちらを選びますか?可能であれば、どちらの方法の欠点も示してください。

どのように解決するのですか?

ローマへの道はもう一つ(少なくとも)ある。

static const char HELLO3[] = "Howdy";

( static - オプション - は他のファイルと衝突するのを防ぐため)。私はこの方が const char* を使用する方が良いと思います。 sizeof(HELLO3) が使えるようになるので、コンパイル時にできることを実行時に先送りする必要がなくなるからです。

defineにはコンパイル時の連結という利点がありますが(例えば HELLO ", World!" を考えてみてください)、また sizeof(HELLO) も同様に

でも、それならいっそのこと const char* を選択し、複数のファイルにわたってそれを使用することで、メモリの一片を節約することができます。

要するに、それは依存するのです。