探検
C++相談室 part166
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は自分の書き込みと他を比較したりしないのかな
781デフォルトの名無しさん (ワッチョイ 1f51-kDYN)
2025/12/14(日) 14:42:29.18ID:71RgSOjf0 VSでC++をやっている。ファイルのバイナリのランダムアクセスをしているんだけど、ファイルの長さを短くしたくて、
ftruncateとか試すんだけど、なさそう。VSでファイルの長さ変更ってどうしたらいい?
ftruncateとか試すんだけど、なさそう。VSでファイルの長さ変更ってどうしたらいい?
782はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e332-f85/)
2025/12/14(日) 14:48:40.58ID:SWyrOIpz0 >>781
Windows には SetEndOfFile という API がある。
現在位置をファイル終端ということにするという機能なので事前に SetFilePointer で必要な位置に移動してから SetEndOfFile を使えば良い。
Windows には SetEndOfFile という API がある。
現在位置をファイル終端ということにするという機能なので事前に SetFilePointer で必要な位置に移動してから SetEndOfFile を使えば良い。
783デフォルトの名無しさん (ワッチョイ 1f51-kDYN)
2025/12/14(日) 15:51:40.12ID:71RgSOjf0 >>782
とりあえずビルドは成功した。ありがと
とりあえずビルドは成功した。ありがと
レスを投稿する
ニュース
- 双子パンダ、中国返還を発表 東京都 [少考さん★]
- 【東京】わずか9平方メートル…都心に近い「極小」アパートが若者に人気 狭くても“住めば都” ★2 [煮卵★]
- 【△】コンビニの鮭おにぎり、価格にネット衝撃「ついに…」 驚き続々「これはキツい…」「日本人を殺しに来てる」 ★3 [ぐれ★]
- 「外国人はもう日本を選ばなくなる」経営者たちが抱く深刻な懸念 ベトナム人実習生なしでは「成り立たない街」…【多文化共生企画】★3 [少考さん★]
- 【議員定数削減】維新・吉村代表「高市さんは約束を守ってくれている…信頼関係は裏切られてない」「野党がちゃんと審議してくれよ」 [Hitzeschleier★]
- 【訃報】『スタンド・バイ・ミー』ロブ・ライナー監督の自宅で2人の遺体が発見される [Anonymous★]
- 【悲報】婚約中の男「家具なんてニトリでいいでしょ。子供出来たら絶対汚すし」女「お前との結婚は刑務所生活かよ!」 [802034645]
- 【悲報】百田尚樹「外務省は中国を「渡航緊急レベル」の国に指定しろ」 [733893279]
- 【速報】維新吉村「連立離脱の声が多い、高市さんは約束を守ってくれると信じてる」
- 🍜ハゲラーメン中卒🏡
- 岡崎高校→名古屋大学→愛知県庁 趣味は中日ドラゴンズと名古屋グランパスの応援
- 政党支持率、自-5.3%、立+2.8%、維+1.8%、国+1.4%、公-0.2%、参-0.8%、共-0.3%、れ+0.2%、保-0.2%、社+0.1%、み-0.1%、なし-0.3% [256556981]
