!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:pbPDl6lv0772デフォルトの名無しさん (ワッチョイ 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は自分の書き込みと他を比較したりしないのかな
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
とりあえずビルドは成功した。ありがと
とりあえずビルドは成功した。ありがと
レスを投稿する
ニュース
- 【制服】中高生の「制服代」が中1は約8000円、高1は約1万円上昇…授業料無償でも重い「教育費の家計負担」とどう向き合えばいい? [少考さん★]
- 【東京】赤坂サウナ火事2人死亡 サウナ室のドアノブ外れ閉じ込められた可能性 ★8 [nita★]
- EU、エンジン車禁止見直しへ 35年以降も条件付き販売容認―日本勢に追い風 [蚤の市★]
- 中国国防省が再反論 SNSで公開した音声とは“別の通報”で日本に訓練の時間や海域を通報したと主張★4 [夜のけいちゃん★]
- 「机の裏に変なものがくっついてる!」「ほんとだね(カメラ回収)」→6日後に男性教員(40)を逮捕「10年以上前から女児盗撮繰り返した」 [Hitzeschleier★]
- 【ドアノブ外れ】東京・赤坂の“個室サウナ店夫婦死亡火災” 非常用ボタンの電源が切れていた可能性 [nita★]
- 【ラブライブ!μ's】花陽「パンダさん行かないで〜」 [694987195]
- どうせこれもベトナム人
- 🏡👊😅👊なにここ珍百景👊😅👊🏡
- 俺の親が30万せびってきたんだが
- テストケース作るの楽しい
- 無職なんだが公園で猫に餌やりしてきた(´・ω・`)
