!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C23 最新ドラフト
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
※前スレ
C言語なら俺に聞け 162
https://mevius.5ch.net/test/read.cgi/tech/1698653580/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C言語なら俺に聞け 163
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 7bba-Lem2)
2024/07/16(火) 22:43:54.18ID:ZrsCjURC0595デフォルトの名無しさん (ワッチョイ 0f5f-Z3xl)
2025/02/09(日) 11:34:40.48ID:sBzel75s0 頭の出来だろw
597デフォルトの名無しさん (ワッチョイ 7fab-oD/y)
2025/02/09(日) 12:36:10.76ID:G/CYNigQ0 なんで関係ないと思うんだろうか
誰でもプログラミングができるって言っている人がいたので。
条件分岐とかループ処理のやつは解けるやつもあれば、解けないやつがあっても解説見れば次は出来ますが、文字列関係になると頭の中が[?]になるんです。
600デフォルトの名無しさん (ササクッテロ Spa3-Z3xl)
2025/02/09(日) 13:07:51.84ID:ql26y8Y/p 応用力…今の学校教育じゃ養われない能力が大切
応用力ですか、。なんか、数学と同じ感じですね。基礎ができたと思っても応用ができないみたいな。
ちなみに、応用力ってどの様に勉強すれば身につくものなんですか?
ちなみに、応用力ってどの様に勉強すれば身につくものなんですか?
602デフォルトの名無しさん (ワッチョイ 1e63-euVe)
2025/02/09(日) 13:46:11.17ID:k5BYzD4Y0 30桁くらいの2つの整数値を筆算で加算するときの手順をイメージして
それをプログラム化してみれば良い
そんなに難しくはないだろう
それをプログラム化してみれば良い
そんなに難しくはないだろう
603デフォルトの名無しさん (ワッチョイ 465c-6Hi7)
2025/02/09(日) 13:46:45.75ID:KfUn2qZi0 >>594
そのサイトクソだよ
そのサイトクソだよ
>>602
筆算のイメージはあるのですが、整数型でやろうとしたらエラーになって、実数型でやろうとしてもエラーになるので、なんでだろーって思って解説ん見てみたら、[文字列型にしましょう]って書いてあったので[?]ってなってしまうのです。
筆算のイメージはあるのですが、整数型でやろうとしたらエラーになって、実数型でやろうとしてもエラーになるので、なんでだろーって思って解説ん見てみたら、[文字列型にしましょう]って書いてあったので[?]ってなってしまうのです。
>>602
筆算のイメージもそのサイトの解説みてから、そうなんだと思ったんですけど、どうも初見だとイメージが沸かないんですよ。
筆算のイメージもそのサイトの解説みてから、そうなんだと思ったんですけど、どうも初見だとイメージが沸かないんですよ。
606デフォルトの名無しさん (ワッチョイ 1e63-euVe)
2025/02/09(日) 14:27:08.84ID:k5BYzD4Y0 イメージ湧かないなら、手を動かそう
そこに答えがあるよ
そこに答えがあるよ
608デフォルトの名無しさん (ワッチョイ de76-/Fy3)
2025/02/09(日) 17:03:10.36ID:TclGPY+C0 整数32bitでも64bitでも最大値は決まっている
でも大きい整数を表すのに64bit整数1つだけ使うとは決まっていない
桁溢れをプログラム的に検出して
溢れた分を別の64bit整数に記録すれば大きな整数を扱える
64bit+64bit+....
で整数を表す感じ
でも大きい整数を表すのに64bit整数1つだけ使うとは決まっていない
桁溢れをプログラム的に検出して
溢れた分を別の64bit整数に記録すれば大きな整数を扱える
64bit+64bit+....
で整数を表す感じ
609デフォルトの名無しさん (ワッチョイ de76-/Fy3)
2025/02/09(日) 17:04:41.81ID:TclGPY+C0 文字列って1Byte整数の配列でしょ?無駄が多いよ
8Byte整数の組合せを上で挙げたけど、8Byte整数の配列でも当然できる
8Byte整数の組合せを上で挙げたけど、8Byte整数の配列でも当然できる
610デフォルトの名無しさん (ワッチョイ 0f5f-Z3xl)
2025/02/09(日) 17:14:14.93ID:sBzel75s0 無駄を省くより可読性の方が大切
8bit時代のファミコンじゃ無いんだから
そんなキリキリ詰め込んだってわけわからん事になるだけ
8bit時代のファミコンじゃ無いんだから
そんなキリキリ詰め込んだってわけわからん事になるだけ
611デフォルトの名無しさん (ワッチョイ 465c-6Hi7)
2025/02/09(日) 17:36:57.81ID:KfUn2qZi0612デフォルトの名無しさん (ワッチョイ 0f5f-Z3xl)
2025/02/09(日) 18:12:23.04ID:sBzel75s0 桁上がりを別に判定しなきゃならないんだから扱えるギリギリの桁で計算するのはバカだろw
アセンブラなら桁あふれフラグ見て簡単に処理出来るだろうが、Cだと無理
アセンブラなら桁あふれフラグ見て簡単に処理出来るだろうが、Cだと無理
613デフォルトの名無しさん (ブーイモ MMaa-6Hi7)
2025/02/09(日) 18:46:42.50ID:fEimQ790M614デフォルトの名無しさん (ブーイモ MMaa-6Hi7)
2025/02/09(日) 18:57:40.14ID:fEimQ790M615デフォルトの名無しさん (ワッチョイ de76-/Fy3)
2025/02/09(日) 19:00:51.12ID:TclGPY+C0 整数値それぞれ (左右どっちだっけ)シフト1bitやって(1/2の値)足したのが最大値の半分超えたら桁溢れ
上位桁に溢れるだけ加算
Cでもできるに決まっているじゃん これだけだよ
上位桁に溢れるだけ加算
Cでもできるに決まっているじゃん これだけだよ
616デフォルトの名無しさん (ワッチョイ de76-/Fy3)
2025/02/09(日) 19:09:00.04ID:TclGPY+C0 文字列って溢れの分が1-9まであって大変そう
バイナリなら1bitだけでしょ
バイナリなら1bitだけでしょ
>>615
それってシフト演算の話ですか?(違ってたらごめんなさい。)
私、シフト演算は苦手なんですよね。
ただシフトするだけなら参考書とサイトみたらできますけど、ノールックでさらに四則演算になるとできないんですよ。
それってシフト演算の話ですか?(違ってたらごめんなさい。)
私、シフト演算は苦手なんですよね。
ただシフトするだけなら参考書とサイトみたらできますけど、ノールックでさらに四則演算になるとできないんですよ。
618デフォルトの名無しさん (ワッチョイ de76-/Fy3)
2025/02/09(日) 19:34:02.21ID:TclGPY+C0 考えたらシフトは無駄だった
64bit整数のうち63bit整数で考えて最上位ビットを溢れ判定に使えばよいだけ
あんまり書くと宿題の手伝いになってそう
64bit整数のうち63bit整数で考えて最上位ビットを溢れ判定に使えばよいだけ
あんまり書くと宿題の手伝いになってそう
619デフォルトの名無しさん (ブーイモ MMaa-6Hi7)
2025/02/09(日) 19:44:20.36ID:fEimQ790M620はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff32-DO7v)
2025/02/09(日) 19:51:22.43ID:vUYqd53r0 二進化十進はたとえば表示の処理なんかは簡単になるので無駄なわけではない。
621デフォルトの名無しさん (ワッチョイ 0f5f-Z3xl)
2025/02/09(日) 20:03:35.95ID:sBzel75s0 いまどき文字も16bit時代にケチケチすんなw
623デフォルトの名無しさん (ワッチョイ de76-/Fy3)
2025/02/10(月) 07:27:24.30ID:ZpC+jsE10 あと実数でやったと出たけど要注意
double verybignum;
verybignum += 1.0;
で1.0は桁を合わせると0に消えて足されない場合がある
double verybignum;
verybignum += 1.0;
で1.0は桁を合わせると0に消えて足されない場合がある
624デフォルトの名無しさん (アウアウエー Sa82-R6kM)
2025/02/10(月) 11:48:59.09ID:Z13/KCo3a 吊りならともかく本物の初心者なら文字コードを知らないってこともあるだろうな
多倍長整数をバイト列(1桁0-255)じゃなくて文字列(1桁0-9)で表すのは無駄が多いがアルゴリズムは同じはず
それでもピンと来ないなら先に文字コードについて理解するべき
多倍長整数をバイト列(1桁0-255)じゃなくて文字列(1桁0-9)で表すのは無駄が多いがアルゴリズムは同じはず
それでもピンと来ないなら先に文字コードについて理解するべき
IntelのアセンブラならBCDを扱う命令があったと思うけど、Cでやるなら文字に代入する時点で &= 0x0F、計算して出力する前に |= 0x30(でいいんだっけ?)かなー
626はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff32-XAIF)
2025/02/10(月) 13:19:14.90ID:cWC6BpGk0 やや強引だがアドレスとして同じでも比較すると等しくないという結果になる例を作ってみた。
https://wandbox.org/permlink/hpAkiEeiZclvQJsn
概念的にはポインタはアドレスというのでも間違いではないけど実際には言語のルールを把握していないと引っかかることもある。
ホスト規制でしばらく書き込めなかったので遅レスですまぬ。
https://wandbox.org/permlink/hpAkiEeiZclvQJsn
概念的にはポインタはアドレスというのでも間違いではないけど実際には言語のルールを把握していないと引っかかることもある。
ホスト規制でしばらく書き込めなかったので遅レスですまぬ。
627デフォルトの名無しさん (ワッチョイ 6a56-WFrT)
2025/02/10(月) 16:46:22.93ID:xKid5uSQ0 よく分からないがこうなる理由が分からないという意味の質問かな?
まあそうだとして、C言語では異なるオブジェクトへのポインタを比較出来ないってルールがある
それが行われているので、未定義の動作といってこのプログラムではコンパイラがどんな事をしてもいいことになってる
そのどんな事の中にはnot equalを表示するという動作も含まれているので、たまたまそうなったんでしょう
初心者がよくやるFAQレベルのミスなので、ポインタとオブジェクトを理解する意味でその辺も読んでみればもっと上達するでしょう
他にもヘンな部分があるので色々他の人のコードとかも読むといいね
まあそうだとして、C言語では異なるオブジェクトへのポインタを比較出来ないってルールがある
それが行われているので、未定義の動作といってこのプログラムではコンパイラがどんな事をしてもいいことになってる
そのどんな事の中にはnot equalを表示するという動作も含まれているので、たまたまそうなったんでしょう
初心者がよくやるFAQレベルのミスなので、ポインタとオブジェクトを理解する意味でその辺も読んでみればもっと上達するでしょう
他にもヘンな部分があるので色々他の人のコードとかも読むといいね
628はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff32-DO7v)
2025/02/10(月) 17:14:00.11ID:cWC6BpGk0 >>627
ポインタにはアドレスが入ってるだけという話題が出てたからそんなことはないという注意喚起。
ポインタにはアドレスが入ってるだけという話題が出てたからそんなことはないという注意喚起。
629はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff32-DO7v)
2025/02/10(月) 17:18:14.15ID:cWC6BpGk0 >>623
文意がよくわからんが初期化されてないから不定値になってるんじゃない?
文意がよくわからんが初期化されてないから不定値になってるんじゃない?
630デフォルトの名無しさん
2025/02/10(月) 17:44:23.62ID:1DQgWNxh0 これはどういうことなんだ?
foo、barの順にスタックに積まれる
bazにはfooの次の(intの境界の)番地(barと同じ)が入り、quzにはbarの番地が入る
bazとquzには同じ番地(値)が入っている
までは分かる
bazもquzもint型を指している
が、bazとquzの内容を比較するとことなる
なんじゃこりゃ〜
酔ってなくても分からなそう
foo、barの順にスタックに積まれる
bazにはfooの次の(intの境界の)番地(barと同じ)が入り、quzにはbarの番地が入る
bazとquzには同じ番地(値)が入っている
までは分かる
bazもquzもint型を指している
が、bazとquzの内容を比較するとことなる
なんじゃこりゃ〜
酔ってなくても分からなそう
633デフォルトの名無しさん (ササクッテロラ Spa3-Z3xl)
2025/02/11(火) 08:30:33.47ID:YWsMUNTvp 型変換すればOK
634はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff32-DO7v)
2025/02/11(火) 11:05:12.56ID:0+q77CUl0 >>632
強調しておくけど未定義は何が起こってもよい。
この場合は一応は式が式として評価されたかのように動作してるので比較的マシな部類で、未定義を踏んでいる箇所とは遠く離れた箇所で意味不明の動作が起こることもある。(起こってもよい。)
低レイヤから入った人は未定義をナメてることが結構あるとは思う。
どのような機械語にコンパイルされるか想像できる (と本人は思っている) 故の弊害だなぁ。
強調しておくけど未定義は何が起こってもよい。
この場合は一応は式が式として評価されたかのように動作してるので比較的マシな部類で、未定義を踏んでいる箇所とは遠く離れた箇所で意味不明の動作が起こることもある。(起こってもよい。)
低レイヤから入った人は未定義をナメてることが結構あるとは思う。
どのような機械語にコンパイルされるか想像できる (と本人は思っている) 故の弊害だなぁ。
635デフォルトの名無しさん (ササクッテロラ Spa3-Z3xl)
2025/02/11(火) 11:22:08.87ID:kmJe274sp Cなんてポインターは全部void*だろ
636デフォルトの名無しさん (ワッチョイ 1e63-euVe)
2025/02/11(火) 11:37:41.91ID:7Jzkf7ZG0 ご無体な
>>626 は僕のgccのパージョンだと
-O2 ありだと "not equal"
最適化なしだと "equal"
-S つけて .s をみると、-O2 ありのときポインタの比較すらせず単純に
puts("not equal");
とするコードを出力していた
"equal" のリテラルすらコードにはない
降参
-O2 ありだと "not equal"
最適化なしだと "equal"
-S つけて .s をみると、-O2 ありのときポインタの比較すらせず単純に
puts("not equal");
とするコードを出力していた
"equal" のリテラルすらコードにはない
降参
638デフォルトの名無しさん (ワッチョイ 4606-6Hi7)
2025/02/11(火) 13:33:00.20ID:jMpjlVqA0 strict aliasingのルールがなぜあるか理解してたらある程度予想つくだろ
639デフォルトの名無しさん (ワッチョイ de76-/Fy3)
2025/02/11(火) 14:32:56.35ID:VhWouMxY0 そもそも 8Byteや4Byte変数のポインタが例えば奇数の数値が許されるのかとか
640デフォルトの名無しさん (ワッチョイ 1e63-euVe)
2025/02/11(火) 14:40:28.60ID:7Jzkf7ZG0 文字列を指すポインタなら、一文字ずつインクリメント出来ないと困るよね
641デフォルトの名無しさん (ササクッテロラ Spa3-Z3xl)
2025/02/11(火) 14:52:06.30ID:+ybAiMfGp >>639
CPUによる
CPUによる
642デフォルトの名無しさん (ワッチョイ 4606-6Hi7)
2025/02/11(火) 15:43:23.98ID:jMpjlVqA0 >>639
それどこへのレス?
それどこへのレス?
643デフォルトの名無しさん (ラクッペペ MMc6-2Ktg)
2025/02/11(火) 16:44:48.97ID:ZUCQJ4rmM >>640
いつ困るんだ?
いつ困るんだ?
>>627は
最適化されると出力されるコードを推測することは無理だ、ということね
最適化されると出力されるコードを推測することは無理だ、ということね
645デフォルトの名無しさん (ワッチョイ 4606-6Hi7)
2025/02/11(火) 17:19:32.60ID:jMpjlVqA0 無理はいいすぎ
やったことないやつがしったかすんな
やったことないやつがしったかすんな
646デフォルトの名無しさん (ササクッテロラ Spa3-Z3xl)
2025/02/11(火) 17:20:33.85ID:0gFNLz1yp ARM系はほんと無理
647デフォルトの名無しさん (ワッチョイ 5302-aFRq)
2025/02/11(火) 18:37:22.58ID:2gjYX+K80 貴方みたいな人はほんと無理
とか言われたら傷ついちゃう
とか言われたら傷ついちゃう
648デフォルトの名無しさん (ワッチョイ 7f1b-hc6T)
2025/02/11(火) 21:27:22.00ID:JzAdQ4dR0 とりあえず読むべし
旧石器時代のポインタをご利用の皆様へ 〜provenance入門〜
https://qiita.com/__pandaman64__/items/1788a90ae5be79cc908b
旧石器時代のポインタをご利用の皆様へ 〜provenance入門〜
https://qiita.com/__pandaman64__/items/1788a90ae5be79cc908b
>>648
thx!
thx!
650デフォルトの名無しさん (ワッチョイ de76-/Fy3)
2025/02/11(火) 21:58:43.75ID:VhWouMxY0 こんなの分割コンパイルしたら分からないし ライブラリならなおさら
実行時にどのオブジェクト由来なんて情報持っておけるのか?
int func(int *ip, int *iq)
{
if (ip == iq) {
} else {
}
}
実行時にどのオブジェクト由来なんて情報持っておけるのか?
int func(int *ip, int *iq)
{
if (ip == iq) {
} else {
}
}
651デフォルトの名無しさん (ワッチョイ 46a9-6Hi7)
2025/02/11(火) 22:39:07.83ID:jMpjlVqA0 コンパイル時に決まってんじゃん
652デフォルトの名無しさん (スップ Sd4a-26Jk)
2025/02/11(火) 23:02:33.92ID:DgpMDse2d このコテハンの人いつもこんなだよね
まともに出来るのが規格のコピペみたいな事だけで、それ以外だとすぐとんちんかんな事言い出して突っ込まれてる
まともに出来るのが規格のコピペみたいな事だけで、それ以外だとすぐとんちんかんな事言い出して突っ込まれてる
653はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff32-DO7v)
2025/02/11(火) 23:17:19.29ID:0+q77CUl0 >>650
わかる範囲でやるってだけ。
わからないところは保守的なコードを生成する。
ただ、今は LTO があるのでわかる範囲がだいぶん広い。
わからないからこそプログラマは未定義なことをしないと仮定した最適化をする (未定義を踏んでたらむちゃくちゃになる) という場合もある。
わかる範囲でやるってだけ。
わからないところは保守的なコードを生成する。
ただ、今は LTO があるのでわかる範囲がだいぶん広い。
わからないからこそプログラマは未定義なことをしないと仮定した最適化をする (未定義を踏んでたらむちゃくちゃになる) という場合もある。
654デフォルトの名無しさん (ワッチョイ d301-XAIF)
2025/02/12(水) 10:25:19.84ID:WVzDbo940 >>648
ポインタpとqの値が同じにならないんだけど…
ポインタpとqの値が同じにならないんだけど…
655デフォルトの名無しさん (ササクッテロラ Spa3-Z3xl)
2025/02/12(水) 10:28:46.36ID:p1VJlK94p Cに余計なもん付けたらいにしえのLinux由来のコードが通らなくなるだろ
656デフォルトの名無しさん (ワッチョイ 6a4d-WFrT)
2025/02/12(水) 11:20:54.68ID:OojhOsKe0657627 (ワッチョイ 6a4d-WFrT)
2025/02/12(水) 11:21:58.36ID:OojhOsKe0 >>631
未定義の動作なので2行目から7行目のような事が起きるかどうかは分からない
仮に未定義の動作がなかったとしても行目を自明のように仮定することは出来ない
アーキテクチャが色々ある中そういう処理系もあればそうでない処理系もあるしCでは何も規定してない
スタックの仕組みがないものもあればポインタをそもそも数値や番地で扱わないアーキテクチャもある
後段も同様
未定義の動作なので2行目から7行目のような事が起きるかどうかは分からない
仮に未定義の動作がなかったとしても行目を自明のように仮定することは出来ない
アーキテクチャが色々ある中そういう処理系もあればそうでない処理系もあるしCでは何も規定してない
スタックの仕組みがないものもあればポインタをそもそも数値や番地で扱わないアーキテクチャもある
後段も同様
658627 (ワッチョイ 6a4d-WFrT)
2025/02/12(水) 11:22:39.59ID:OojhOsKe0659はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff32-XAIF)
2025/02/12(水) 11:47:09.26ID:cXwd7RB80 >>658
言語仕様上で未定義動作とされている状況が実際の機械の上でどう動作するか (その動作は想像できない) という文脈でヤバさを伝えるためになるべく想像外な結果を生む実例を出そうとしているので最適化は関係ある。
言語仕様上で未定義動作とされている状況が実際の機械の上でどう動作するか (その動作は想像できない) という文脈でヤバさを伝えるためになるべく想像外な結果を生む実例を出そうとしているので最適化は関係ある。
660デフォルトの名無しさん (ササクッテロラ Spa3-Z3xl)
2025/02/12(水) 11:50:24.83ID:XyTZkBHop 最適化しないと無駄なコードや無意味なコードも忠実に出力されるからなぁ
661デフォルトの名無しさん (ワッチョイ 4618-6Hi7)
2025/02/12(水) 12:49:03.57ID:J/UI6pYQ0662デフォルトの名無しさん (ワッチョイ de76-/Fy3)
2025/02/12(水) 13:26:30.21ID:7GgOweZ60 えーと未定義や環境依存を使ったりとかは
Cおよびコンピュータの理解が不十分な
質の劣るプログラマが存在するからでしょうに
そういう人達に重要プログラムを書かせる責任問題でもある
Cおよびコンピュータの理解が不十分な
質の劣るプログラマが存在するからでしょうに
そういう人達に重要プログラムを書かせる責任問題でもある
663デフォルトの名無しさん (ワッチョイ 5302-aFRq)
2025/02/12(水) 15:09:37.68ID:+Pz/j8Me0 相手に過大に説明を要求して、自分は分かろうとしない者は嫌われちゃうよ
664デフォルトの名無しさん (ワッチョイ 1e63-euVe)
2025/02/12(水) 15:17:35.67ID:iId2MJ1V0 gccのフォーラムで質問出してみたら?
参考にできる回答が得られるかも知れないよ
参考にできる回答が得られるかも知れないよ
665デフォルトの名無しさん (ワッチョイ d301-XAIF)
2025/02/12(水) 15:52:05.07ID:WVzDbo940 >ポインタにはprovenanceという,どのオブジェクト由来かの情報が含まれています
↑まずこれがおかしい
↑まずこれがおかしい
666デフォルトの名無しさん (ササクッテロラ Spa3-Z3xl)
2025/02/12(水) 16:26:28.23ID:I956D6cKp ランタイムじゃなくてコンパイル時の静的なルールだろうね
667デフォルトの名無しさん (ワッチョイ ea07-XAIF)
2025/02/12(水) 17:12:16.79ID:1bCkYFVx0 投資家はRustを信頼するって言ってるんだから、Rustとおんなじようにすればいいだけ
俺はC/C++派なので、どんどんRustの実績をぶんどってくるべきって思ってる
俺はC/C++派なので、どんどんRustの実績をぶんどってくるべきって思ってる
668はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff32-DO7v)
2025/02/12(水) 17:47:13.48ID:cXwd7RB80 移植性が求められることばかりでもないし、最適化などのオプションも頻繁に取ったりつけたりしないし、思い通りに動かなければアセンブルリストみたりするけど、コンパイラが出力するコードが予想通りかなんて観点はないし、実践的ではないけど、人を小馬鹿にしたりしなければ勉強になって面白い話なのに
671デフォルトの名無しさん (ワッチョイ 8655-u07z)
2025/02/15(土) 13:31:47.16ID:vKfoke/00 Arduino (ESP32)で文字列変換をしたいです。
tの文字列をtm structに変換したいんですが,タイムゾーンのオフセット部分の+9:00の扱いが分かりません。
%Zはタイムゾーンのオフセットを分を指定する場合で、%zだとUTCなどタイムゾーン名を指定する場合に使うみたいでした。
どうやるんでしょうか?
tps://pastebin.com/Jcyj8BG5
tの文字列をtm structに変換したいんですが,タイムゾーンのオフセット部分の+9:00の扱いが分かりません。
%Zはタイムゾーンのオフセットを分を指定する場合で、%zだとUTCなどタイムゾーン名を指定する場合に使うみたいでした。
どうやるんでしょうか?
tps://pastebin.com/Jcyj8BG5
672はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff32-XAIF)
2025/02/15(土) 15:04:44.95ID:ewglApEf0 strptime で %z や %Z でタイムゾーンを扱えるのは glibc の拡張 (他で真似している場合もあるかもしれんけど) なんだけど、 Arduino の C ライブラリは glibc ベースなの?
そうじゃないなら各ライブラリのドキュメント (またはソースコード) を読まないとわからないし、そもそもそんな機能はないのかもしれない。
そうじゃないなら各ライブラリのドキュメント (またはソースコード) を読まないとわからないし、そもそもそんな機能はないのかもしれない。
673デフォルトの名無しさん (ワッチョイ 5357-u07z)
2025/02/15(土) 16:19:42.94ID:BNBq5D0N0674デフォルトの名無しさん (ブーイモ MM3b-6Hi7)
2025/02/15(土) 16:25:20.46ID:Q9F/iLI2M やり方思いついたならやれ
675はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff32-XAIF)
2025/02/15(土) 16:39:17.28ID:ewglApEf0 >>673
どうやら Arduino は newlib ベースの模様。
newlib の strptime はタイムゾーンをサポートしてない。
どうにかしてタイムゾーンを扱いたい場合にどうやって実装するかは個々の事情によると思うのでなんとも言えない。
実績のある実装をどこかから持ってきたほうが良いんじゃないかと個人的には思う。
https://www.google.com/search?q=strptime+implementation+c
パースするだけならたいして複雑なものではないので自分で書いてみてもいいかな。
ちなみにタイムゾーンを略称で扱うのは面倒な事情が絡む。
タイムゾーンを標準時からの差の時間で表すときはその時点での差があれば十分なので簡単なんだけど、略称で表すときはサマータイムの情報もいる。
たとえばニューヨークのタイムゾーン (EST) は普段は -05:00 だけどサマータイム中は -04:00 になる。
単に EST=-05:00 というわけではない。
そんでもってこのへんの扱いが面倒なのは変わることは割とよくあるということ。
サマータイムの期間が変わったりずらす時間が変わったり、あるいはゾーンが増えたり減ったりするのは政治的な判断なので情報を定期的に更新する前提じゃないときちんと運用できない。
パソコンの OS だと適当なタイミングで更新する仕組みがあるのが普通だけど組み込みシステムだとそうもいかないこともある。
どうやら Arduino は newlib ベースの模様。
newlib の strptime はタイムゾーンをサポートしてない。
どうにかしてタイムゾーンを扱いたい場合にどうやって実装するかは個々の事情によると思うのでなんとも言えない。
実績のある実装をどこかから持ってきたほうが良いんじゃないかと個人的には思う。
https://www.google.com/search?q=strptime+implementation+c
パースするだけならたいして複雑なものではないので自分で書いてみてもいいかな。
ちなみにタイムゾーンを略称で扱うのは面倒な事情が絡む。
タイムゾーンを標準時からの差の時間で表すときはその時点での差があれば十分なので簡単なんだけど、略称で表すときはサマータイムの情報もいる。
たとえばニューヨークのタイムゾーン (EST) は普段は -05:00 だけどサマータイム中は -04:00 になる。
単に EST=-05:00 というわけではない。
そんでもってこのへんの扱いが面倒なのは変わることは割とよくあるということ。
サマータイムの期間が変わったりずらす時間が変わったり、あるいはゾーンが増えたり減ったりするのは政治的な判断なので情報を定期的に更新する前提じゃないときちんと運用できない。
パソコンの OS だと適当なタイミングで更新する仕組みがあるのが普通だけど組み込みシステムだとそうもいかないこともある。
676はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff32-DO7v)
2025/02/15(土) 21:12:02.85ID:ewglApEf0 基本的なことを書き忘れてた。
strptime は C の言語仕様には無い関数で、 POSIX (UNIX 系 OS の統一仕様) にある。
POSIX は最低限の共通部分だけをまとめたもので実装には雑多な拡張を入れる前提なので各実装によってサポート内容が違う。
POSIX 準拠ではない環境で部分的に POSIX を真似てるだけ (POSIX の最低限の要求も満たしてない) ということもある。
strptime は C の言語仕様には無い関数で、 POSIX (UNIX 系 OS の統一仕様) にある。
POSIX は最低限の共通部分だけをまとめたもので実装には雑多な拡張を入れる前提なので各実装によってサポート内容が違う。
POSIX 準拠ではない環境で部分的に POSIX を真似てるだけ (POSIX の最低限の要求も満たしてない) ということもある。
677デフォルトの名無しさん (アウアウエー Sa13-9cJ9)
2025/02/16(日) 12:03:53.19ID:rAQQ2/+ca 最初からtmstructをUTCで取得した方が楽ジャマイカ
678デフォルトの名無しさん (ワッチョイ 232c-1nj7)
2025/02/17(月) 01:18:04.49ID:mzGEyEzq0 有効な同型ポインタの比較において、同一オブジェクト/配列由来でない場合、
== の結果は 0
(未定義動作ではない)
C99(N1256) Annex J.2 Undefined behavior
— Pointers that do not point to the same aggregate or union (nor just beyond the same
array object) are compared using relational operators (6.5.8).
ここに Equality operators の記述がない。
6.5.8 Relational operators
6.5.9 Equality operators
でも同様の内容となっている。また、
N3231 https://www.open-std.org/jtc1/sc22/WG14/www/docs/n3231.pdf
2024/03/21 Kleynhans, TS 6010 A Provenance-aware Memory Object Model for C, Revision Draft
N3005
2022/06/16 Gustedt, A Provenance-aware Memory Object Model for C, draft TS 6010, version June 2022
では、provenance と abstract address という用語が導入されてスッキリとした文面になっている。
== の結果は 0
(未定義動作ではない)
C99(N1256) Annex J.2 Undefined behavior
— Pointers that do not point to the same aggregate or union (nor just beyond the same
array object) are compared using relational operators (6.5.8).
ここに Equality operators の記述がない。
6.5.8 Relational operators
6.5.9 Equality operators
でも同様の内容となっている。また、
N3231 https://www.open-std.org/jtc1/sc22/WG14/www/docs/n3231.pdf
2024/03/21 Kleynhans, TS 6010 A Provenance-aware Memory Object Model for C, Revision Draft
N3005
2022/06/16 Gustedt, A Provenance-aware Memory Object Model for C, draft TS 6010, version June 2022
では、provenance と abstract address という用語が導入されてスッキリとした文面になっている。
679はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ed32-7Htj)
2025/02/17(月) 10:52:55.67ID:tIRsmIw80 C99 をあらためて読み返してみたら確かにそうだ……。
・ ふたつのポインタが等しいと判断される条件が書いてあって「その場合に限り」等しいとする
・ 各演算子は指定された関係が真の場合は1を,偽の場合は0を返す
・ 未定義と書いてある (またはそれと等価な言い回し) か動作の明示的な定義がない場合は全て未定義
等しい条件を満たさないなら 0 が返されることを保証していることになるので未定義ではないことになる。
でもまあ現実的に考えたらおかしいし、欠陥報告が出てたりしない?
・ ふたつのポインタが等しいと判断される条件が書いてあって「その場合に限り」等しいとする
・ 各演算子は指定された関係が真の場合は1を,偽の場合は0を返す
・ 未定義と書いてある (またはそれと等価な言い回し) か動作の明示的な定義がない場合は全て未定義
等しい条件を満たさないなら 0 が返されることを保証していることになるので未定義ではないことになる。
でもまあ現実的に考えたらおかしいし、欠陥報告が出てたりしない?
680デフォルトの名無しさん (ワッチョイ 1501-7Htj)
2025/02/17(月) 19:30:42.26ID:iQTBmgHC0 >>648のサンプルプログラムで同じことが起きることってある?
681デフォルトの名無しさん (ワッチョイ 23ad-MHHu)
2025/02/22(土) 07:05:24.68ID:nEyoRU5r0682デフォルトの名無しさん (ワッチョイ fde8-ItHp)
2025/02/22(土) 12:11:54.96ID:DWcN/KDk0 余計なことを
683デフォルトの名無しさん (ワッチョイ 23ad-MHHu)
2025/02/22(土) 14:47:10.43ID:nEyoRU5r0 最適化オプションの有無で違いが出る状態はできれば止めて欲しかったな。やるとしても別オプションでやって欲しかった。
684デフォルトの名無しさん (ワッチョイ 1bab-2o2c)
2025/02/22(土) 16:41:59.90ID:Z2hFLtuL0 その壁越えられないやつ多いよね
仕事でも最適化すると動かなくなるからってオフでリリースしてた雑魚エンジニアいたわ
仕事でも最適化すると動かなくなるからってオフでリリースしてた雑魚エンジニアいたわ
685デフォルトの名無しさん (ワッチョイ cba1-Nstt)
2025/02/22(土) 17:57:58.33ID:HOxFgRC/0 コンパイラのバグって事じゃないのか?
686はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b132-FOV+)
2025/02/23(日) 20:21:42.14ID:5K9CwmG10 >>683
-0 はいくつかの具体的な最適化オプションを束ねたものだよ。
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-O
このうちのどれが効いてるのかは知らんけど。
-0 はいくつかの具体的な最適化オプションを束ねたものだよ。
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-O
このうちのどれが効いてるのかは知らんけど。
687デフォルトの名無しさん (ワッチョイ b691-M1fQ)
2025/02/23(日) 21:01:43.23ID:VuC2otmU0 >>684
最適化オフでのリリースは一つの有力な選択だと思います。
最適化オフでのリリースは一つの有力な選択だと思います。
688デフォルトの名無しさん (ワッチョイ 094f-/70v)
2025/02/23(日) 21:45:10.07ID:K8mfivgh0 最適化に副作用あるのは常識
689デフォルトの名無しさん (ブーイモ MM99-A0+M)
2025/02/23(日) 21:54:21.08ID:FQnOu1obM690デフォルトの名無しさん (ワッチョイ 0d01-Ah42)
2025/02/24(月) 01:00:54.17ID:IorN2uWP0 自己紹介かな
691デフォルトの名無しさん (ワッチョイ aeb7-/OIl)
2025/02/24(月) 17:12:08.95ID:qLUUxQg70 gccなら-O0でも実施される最適化はあるので本気で最適化オフにしたいなら-O0で有効になる項目を-fno-に個別に指定する必要がありそこそこ面倒
692デフォルトの名無しさん (ワッチョイ aebd-A0+M)
2025/02/24(月) 17:18:13.77ID:SlW5Uo1a0 最適化オフとか言ってる人は、UBを踏んでしまってるから最適化で動作が変わるってことわかってんのか?
693デフォルトの名無しさん (ワッチョイ aeb7-/OIl)
2025/02/24(月) 17:22:09.48ID:qLUUxQg70 まあコンパイラの最適化バグである可能性もないわけではないがな
694デフォルトの名無しさん (ワッチョイ b691-M1fQ)
2025/02/24(月) 20:28:13.00ID:V/nislFh0 組み込み分野だと最適化によりデバッグがしづらくなることが多い。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★2 [蚤の市★]
- NHK、受信料の未払い世帯に督促強化へ 民事手続きの新組織を設置 差し押さえなどの強制執行も [1ゲットロボ★]
- 日本の立場説明へ…外務省局長が北京到着 “台湾有事”首相答弁に中国反発 ★4 [煮卵★]
- 橋下徹氏「この喧嘩は日本の完敗」 台湾有事答弁めぐる外務省局長訪中で指摘「中国に怒られてご説明に伺った日本と見られる」 [muffin★]
- 【日本大使館】中国在留邦人は安全確保を [ぐれ★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 高市コイン、155円突破wwwwwwwwww [246620176]
- 最近日本民主の玉木って影薄くね?
- 「日本をなめるな」と言ってた参政党、何故か沈黙 [256556981]
- (´・ω・`)よくねえな、どうにも
- 高市早苗の中国問題、「オーバーツーリズムが解消されてウザい中国人が消えるから日本の勝ち」という風潮になってしまう [562983582]
- 安倍&高市経済ブレーン(10月9日)「1ドル155円を超えて円安が進むとは考えにくい」→現在155円突破 [237216734]
