!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること
次スレは>>980が立てること
無理なら細かく安価指定
※前スレ
C++相談室 part165
https://mevius.5ch.net/test/read.cgi/tech/1698705458/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C++相談室 part166
1sage (ワッチョイ 8732-NXaD)
2025/04/26(土) 10:34:58.41ID:pbPDl6lv0768デフォルトの名無しさん (アウアウウー Sa85-H7iN)
2025/11/18(火) 23:53:18.65ID:+AochNn2a >>764-765
termcapだかterminfoだかでゴニョゴニョ
termcapだかterminfoだかでゴニョゴニョ
769デフォルトの名無しさん (ブーイモ MM22-hp//)
2025/11/19(水) 15:04:12.19ID:HRoC/CWNM >>768
関係ない
関係ない
770デフォルトの名無しさん (ワッチョイ ffa1-txSl)
2025/12/13(土) 08:54:58.15ID:WPESu7ut0 LF <--> CR LF 変換はI/Oの段階で行われるものだという印象
証拠に、"\r\n" をテキストモードでファイルに書くと "\r\r\n" になり、
それをテキストモードで読むと "\r\n" に戻るのは万国共通のふるまいのはず(適当
(バイナリモードだともちろん文字列リテラルとファイルのデータ両方 "\r\n"。
すなわちC/C++言語における文字列リテラルの改行は古来より "\n" の1文字……
なので
>従来はそうだったはずだけど C++23 からは Unicode (UTF-8) のコードポイントの並びで規定されていて、 CRLF が単一の改行に置き換えられる規則が明記されてる。
こそ
>(ソースコード上の生文字リテラル内での行の折り返しを)「改行が入力された場合、改行の制御文字 '\n' に変換される」
ことの根拠になっているのでは……
で、
>Unicode 系以外の文字コードから処理系定義の規則で Unicode に適当にマッピングするようなのも認めているので
というのは "\r\n" <--> "\n" の変換(文字数が違う)を正当化しないと思う
証拠に、"\r\n" をテキストモードでファイルに書くと "\r\r\n" になり、
それをテキストモードで読むと "\r\n" に戻るのは万国共通のふるまいのはず(適当
(バイナリモードだともちろん文字列リテラルとファイルのデータ両方 "\r\n"。
すなわちC/C++言語における文字列リテラルの改行は古来より "\n" の1文字……
なので
>従来はそうだったはずだけど C++23 からは Unicode (UTF-8) のコードポイントの並びで規定されていて、 CRLF が単一の改行に置き換えられる規則が明記されてる。
こそ
>(ソースコード上の生文字リテラル内での行の折り返しを)「改行が入力された場合、改行の制御文字 '\n' に変換される」
ことの根拠になっているのでは……
で、
>Unicode 系以外の文字コードから処理系定義の規則で Unicode に適当にマッピングするようなのも認めているので
というのは "\r\n" <--> "\n" の変換(文字数が違う)を正当化しないと思う
771デフォルトの名無しさん (ワッチョイ ffa1-txSl)
2025/12/13(土) 09:19:18.23ID:WPESu7ut0 >>763
のは次のような特殊なケースでのみ問題になるだけなのではないかという希ガス
#define TEXT_DEFINITION R"(begin\
a,\
b,\
c\
end)"
std::string text = TEXT_DEFINITION; // textの内容が "(begin\na\nb\nc\nend)" になることを気体
初期段階、と書かれるとようわからんが、行を結合するのはプリプロセッサが行うだけのはず……
C/C++は文脈自由言語でありかつ改行文字はトークンでないから、パーサー部分が行を結合する必然性が無い
のは次のような特殊なケースでのみ問題になるだけなのではないかという希ガス
#define TEXT_DEFINITION R"(begin\
a,\
b,\
c\
end)"
std::string text = TEXT_DEFINITION; // textの内容が "(begin\na\nb\nc\nend)" になることを気体
初期段階、と書かれるとようわからんが、行を結合するのはプリプロセッサが行うだけのはず……
C/C++は文脈自由言語でありかつ改行文字はトークンでないから、パーサー部分が行を結合する必然性が無い
772デフォルトの名無しさん (ワッチョイ 7746-RIfS)
2025/12/13(土) 10:11:52.86ID:c4oXW2530 プラットフォームごとの改行コードに合わせた変換がI/Oの段階で行われるのはそうだろうけど(たとえばPythonは変換仕様の細かい指定がprint関数でできるし、他の言語でも同様の機能があることが多いのではないかと思う。なので、\r\nと\r\r\nの変換が万国共通ということは別にないはず)、規格で規定されているのはソースコードをコンパイルする前処理としての改行コードの正規化(?)の話であって、別の話なのではないかと思うが。
773デフォルトの名無しさん (ワッチョイ ffa1-txSl)
2025/12/13(土) 10:26:05.41ID:WPESu7ut0 >>772
>\r\nと\r\r\nの変換が万国共通ということは別にないはず
>>770 の前段のは、
C/C++のバイナリモードとテキストモードのI/Oの挙動がC/C++言語の文字列リテラル内の改行が "\n" 一文字であることを含意しているという主旨、
なので、あくまでC/C++のI/Oの挙動において\r\nと\r\r\nの変換が万国共通ならおk、
>ソースコードをコンパイルする前処理としての改行コードの正規化(?)の話
Windowsのメモ帳で
R"(begin
a)"
と書いたらソースファイル上は beginとaの間に CR LF が入るが文字列リテラルの期待値は "begin\na" ですよ(CR LF → LF 1文字に変換)、という話のはず……
>\r\nと\r\r\nの変換が万国共通ということは別にないはず
>>770 の前段のは、
C/C++のバイナリモードとテキストモードのI/Oの挙動がC/C++言語の文字列リテラル内の改行が "\n" 一文字であることを含意しているという主旨、
なので、あくまでC/C++のI/Oの挙動において\r\nと\r\r\nの変換が万国共通ならおk、
>ソースコードをコンパイルする前処理としての改行コードの正規化(?)の話
Windowsのメモ帳で
R"(begin
a)"
と書いたらソースファイル上は beginとaの間に CR LF が入るが文字列リテラルの期待値は "begin\na" ですよ(CR LF → LF 1文字に変換)、という話のはず……
774デフォルトの名無しさん (ワッチョイ 9756-RIfS)
2025/12/13(土) 10:53:09.54ID:+GybsC590 ①エスケープシーケンス \n と ②そのデコード結果であるLF、③実際の改行コード(プラットフォームにより、LF、CRLF、CRのいずれか)の区別を意識的にしないと議論が混乱すると思う。
cpprefjpの>>761 の説明に違和感があるのは、raw文字列リテラル内ではエスケープシーケンスのデコード処理はされないのに、エスケープシーケンス \n で説明している点にもあると思う。773も同様に①と②を同義語として使っているように見えるが、そこは本来は区別すべきではないか。
cpprefjpの>>761 の説明に違和感があるのは、raw文字列リテラル内ではエスケープシーケンスのデコード処理はされないのに、エスケープシーケンス \n で説明している点にもあると思う。773も同様に①と②を同義語として使っているように見えるが、そこは本来は区別すべきではないか。
775デフォルトの名無しさん (ワッチョイ 9756-RIfS)
2025/12/13(土) 10:59:50.95ID:+GybsC590 >>773の最後の例でいえば、raw文字列リテラルの仕様として、改行コードがLF(エスケープシーケンス \n ではない)に変換されるという記述は特にないと思う。
776デフォルトの名無しさん (ワッチョイ 9756-RIfS)
2025/12/13(土) 11:05:17.48ID:+GybsC590 実際には、最初にソースコード上の改行コードが一律にLFに変換され、トークン分割の段階でraw文字列リテラル中の改行コードと判明した場合には(>>763)、それに応じた処理をするんだろうが、LFからさらに変換したりはしないというのはありそうなことではある。
だけど、それは改行コードの正規化(?)に付随してそういう処理になっていることが多いというだけのことであって、raw文字列リテラルの仕様の一部としてそうすべきと規定されているわけではないよねってことだと思うんだが。
だけど、それは改行コードの正規化(?)に付随してそういう処理になっていることが多いというだけのことであって、raw文字列リテラルの仕様の一部としてそうすべきと規定されているわけではないよねってことだと思うんだが。
777デフォルトの名無しさん (ワッチョイ 9756-RIfS)
2025/12/13(土) 11:07:53.08ID:+GybsC590 NGワード規制回避のため分割レスになって申し訳ない。何がNGワードだったんどろう……、
778デフォルトの名無しさん (ワッチョイ ffa1-txSl)
2025/12/13(土) 18:42:47.60ID:WPESu7ut0 >>775
↓これがどのプラットフォームのエディタで書いてビルドしてもequality 1 2がtrueになるのなら
ソースコードの改行(CR LF or LF)が「"\n" に変換されている」としか言いようがないような……
std::string text1 = R"(begin
a,
b,
c
end)"; // "\n" を含まない文字列定義
std::string text2 = "begin\na,\nb,\nc\nend"; // "\n" を含む文字列定義
std::cout << std::boolalpha << "equality 1 2: " << (text1 == text2) << std::endl;
んまー説明のための新しい改行表現を定義したいなら止めはしませぬが……
↓これがどのプラットフォームのエディタで書いてビルドしてもequality 1 2がtrueになるのなら
ソースコードの改行(CR LF or LF)が「"\n" に変換されている」としか言いようがないような……
std::string text1 = R"(begin
a,
b,
c
end)"; // "\n" を含まない文字列定義
std::string text2 = "begin\na,\nb,\nc\nend"; // "\n" を含む文字列定義
std::cout << std::boolalpha << "equality 1 2: " << (text1 == text2) << std::endl;
んまー説明のための新しい改行表現を定義したいなら止めはしませぬが……
779デフォルトの名無しさん (ワッチョイ ffa1-txSl)
2025/12/13(土) 18:53:55.47ID:WPESu7ut0 それはそうとしてRAW文字列とプリプロセッサとの関係で試したら(漏れにとって)奇怪なことがわかりた……
↓次のコードがビルドが通ってequality 2 5 がtrueになる……
// プリプロセッサを通す場合(3)
// マクロ定義が複数行に渡る場合、本来は \\ で行継続せねばならないが、RAW stringの行継続は特別視
#define TEXT_DEFINITION R"(begin
a,
b,
c
end)"
std::string text5 = TEXT_DEFINITION;
std::cout << text5 << std::endl;
std::cout << std::boolalpha << "equality 2 5: " << (text2 == text5) << std::endl;
これはさすがにプリプロセスの段階でプリプロセッサが R"(...)" を認識しないとできない芸当……
(プリプロセッサの普通の挙動ならTEXT_DEFINITION の定義内容は R"(begin(ここで日記は終わってゐる
にならねばおかしいはず
ソ〜ス: https://ideone.com/AJcmZT
↓次のコードがビルドが通ってequality 2 5 がtrueになる……
// プリプロセッサを通す場合(3)
// マクロ定義が複数行に渡る場合、本来は \\ で行継続せねばならないが、RAW stringの行継続は特別視
#define TEXT_DEFINITION R"(begin
a,
b,
c
end)"
std::string text5 = TEXT_DEFINITION;
std::cout << text5 << std::endl;
std::cout << std::boolalpha << "equality 2 5: " << (text2 == text5) << std::endl;
これはさすがにプリプロセスの段階でプリプロセッサが R"(...)" を認識しないとできない芸当……
(プリプロセッサの普通の挙動ならTEXT_DEFINITION の定義内容は R"(begin(ここで日記は終わってゐる
にならねばおかしいはず
ソ〜ス: https://ideone.com/AJcmZT
780デフォルトの名無しさん (ワッチョイ 9f79-+7gk)
2025/12/13(土) 21:05:36.09ID:jWXCFmDk0 実行ファイルの内部でどういうコードが埋め込まれるとか興味ないのかな
>>777は自分の書き込みと他を比較したりしないのかな
>>777は自分の書き込みと他を比較したりしないのかな
レスを投稿する
ニュース
- 鈴木農相「おこめ券はお米しか買えないわけではない。例えば卵、味噌、しょうゆ、こうした購入に利用可能」 [Hitzeschleier★]
- なぜリベラルは人気がないのか 斎藤幸平さんが指し示す未来への道筋:朝日新聞 [少考さん★]
- なぜリベラルは人気がないのか 斎藤幸平さんが指し示す未来への道筋:朝日新聞 ★2 [少考さん★]
- 【日本人の旅行離れ】国内旅行すら行けなくなった……オーバーツーリズムだけじゃない 旅行者減少の異常事態 ★2 [ぐれ★]
- ベトナムのバイク「脱ガソリン」、シェア8割のホンダに打撃…政府が電動二輪普及を主導 [煮卵★]
- “ひとり焼肉”でおなじみ「焼肉ライク」が閉店ラッシュ。なぜ「コスパが悪い」と言われてしまうのか [Gecko★]
- 【ジャップ】村岡新駅(仮)誕生 [234045628]
- 男「托卵はレイプ以上の魂の殺人。人道に対する罪。刑事罰にするべき」高市聞いてるか?托卵に刑事罰を導入しろ [811796219]
- 【実況】博衣こよりのえちえちドラクエ1&2リメイク🧪
- 「SCORE」←これなんて読むんや?🙋🏡
- ちびまる子ちゃんで一番可愛い子wwwww
- 【高市朗報】鈴木大臣「嫌儲のデマに騙されないで。お米券の使い勝手は悪くない。卵味噌醤油も買えます。現金と変わりません」 [517459952]
