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*
を選択し、複数のファイルにわたってそれを使用することで、メモリの一片を節約することができます。
要するに、それは依存するのです。
関連
-
[解決済み] C - Setデータ構造を実装するには?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] バイトを文字列に変換する
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
_CRT_SECURE_NO_WARNINGS エラーメッセージ、解決方法
-
g++が内部・外部コマンドソリューションとして認識されない、MinGWを初めて使うときの落とし穴
-
libc++abi.dylib: NSException タイプの捕捉されない例外で終了するエラー
-
関数 'malloc' の暗黙の宣言に対する解決策
-
C: 1を求める! + 2! + 3! + ... + n! (ループ)
-
[解決済み] const char * を使用する場合と const char [] を使用する場合について
-
[解決済み] C言語の**はどういう意味ですか?
-
[解決済み] .aファイル、.soファイルとは何ですか?
-
[解決済み] アセンブリがCより速いのはどんなとき?[クローズド]
-
[解決済み] 2次元配列の反復処理において、ループの順序がパフォーマンスに影響するのはなぜですか?