[解決済み] なぜC言語では、条件演算子を使って文字列を連結することができないのですか?
2023-01-15 08:09:27
質問
以下のコードは問題なくコンパイルできます。
int main() {
printf("Hi" "Bye");
}
しかし、これではコンパイルできません。
int main() {
int test = 0;
printf("Hi" (test ? "Bye" : "Goodbye"));
}
その理由は何でしょうか?
どのように解決するのですか?
C言語規格 (5.1.1.2 翻訳フェーズ) によると
1 翻訳の構文規則間の優先順位は、以下のフェーズで規定されています。 次のフェーズによって指定されます6)。
- 隣接する文字列リテラルのトークンは連結されます。
そして、その後にのみ
<ブロッククオート- トークンを区切る空白文字は、もはや重要ではありません。各 はトークンに変換されます。 結果として得られる トークンは構文的、意味的に分析され、翻訳ユニットとして翻訳されます。 翻訳ユニット .
この構造では
"Hi" (test ? "Bye" : "Goodbye")
には、隣接する文字列リテラルのトークンは存在しません。したがって、この構築は無効です。
関連
-
[解決済み] mallocで文字列を確保する
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] なぜ ++[[]][+[] +[+[]] は "10" という文字列を返すのでしょうか?
-
[解決済み] 難読化Cコードコンテスト2006。sykes2.cの解説をお願いします。
-
[解決済み】大文字・小文字を区別しない「Contains(string)
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
#137: 式は変更可能なlvalueでなければならない問題 // 文字列配列の代入問題
-
VSCodeでCプログラムを書くとエラーになる:ソースファイル "stdio.h" を開くことができない
-
[解決済み] flexible array member not at end of structエラーの原因は何ですか?
-
[解決済み] C関数から文字列を返す
-
[解決済み] C言語で関数型プログラミングを行うためのツールにはどのようなものがありますか?
-
[解決済み] "static const" vs "#define" vs "enum"
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] 配列のすべてのメンバーを同じ値で初期化するには?
-
[解決済み] 演算子 *, /, +, -, % を使わずに 3 で割る。