!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:ZrsCjURC0678デフォルトの名無しさん (ワッチョイ 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 組み込み分野だと最適化によりデバッグがしづらくなることが多い。
gccで -O2 なし -Wall ありでコンパイルすると strict aliasing の警告がでないけど、
-O2 -Wall ありだと strict aliasing の警告が出るケースに当たったのだけど、
strict aliasing って安全に最適化するためのアレなのですかね(最適化しないときは strict aliasing には無頓着)
-O2 -Wall ありだと strict aliasing の警告が出るケースに当たったのだけど、
strict aliasing って安全に最適化するためのアレなのですかね(最適化しないときは strict aliasing には無頓着)
696デフォルトの名無しさん (ワッチョイ d5a2-eBms)
2025/02/24(月) 22:52:40.44ID:ifUFLigf0 この人たちホントgccが大好きだよね
697デフォルトの名無しさん (ワッチョイ 76a1-x4eQ)
2025/02/24(月) 23:27:53.22ID:LsxokMxo0 gccはいろんな環境で動かせるので便利ではある
698デフォルトの名無しさん (ワッチョイ ae76-A0+M)
2025/02/25(火) 01:13:30.67ID:t+eQGWY+0 >>694
それ組み込み関係ないから
それ組み込み関係ないから
699はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b132-FOV+)
2025/02/25(火) 08:31:05.22ID:6jOr+W/20700デフォルトの名無しさん (ワッチョイ b6e5-M1fQ)
2025/02/25(火) 09:04:02.65ID:ODzMt1Nm0 >>698
そうだった
そうだった
>>699
最適化しないときは strict aliasing が不要なものなんですかね(最適化のための strict aliasing なんですかね)というつもりで書いたのだけど、分かりにくくてすまんね
最適化しないときは strict aliasing が不要なものなんですかね(最適化のための strict aliasing なんですかね)というつもりで書いたのだけど、分かりにくくてすまんね
702はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b132-Ah42)
2025/02/26(水) 10:14:24.43ID:6jOr+W/20 >>701
少なくとも GCC や Clang では strict aliasing rules は最適化のためのものという認識で正しいよ。
-fstrict-aliasing (やこれらを含む -O2 以上の最適化) が有効になっているときに限りエイリアスベースの最適化をするし、そのときだけ strict aliasing rules が守られていることを要求する。
少なくとも GCC や Clang では strict aliasing rules は最適化のためのものという認識で正しいよ。
-fstrict-aliasing (やこれらを含む -O2 以上の最適化) が有効になっているときに限りエイリアスベースの最適化をするし、そのときだけ strict aliasing rules が守られていることを要求する。
703デフォルトの名無しさん (ワッチョイ 317b-/OIl)
2025/02/26(水) 11:04:16.19ID:x+jOZkKw0 strict aliasing rulesを守らないと未定義動作となるのはC言語の決まりなので特定の処理系で問題ないから守らなくて良いという考えは馬鹿のすること
704デフォルトの名無しさん (ワッチョイ ae51-A0+M)
2025/02/26(水) 11:20:14.18ID:t+eQGWY+0 というかstrict aliasing rulesをわかってるやつがあえて守らないって考えにくいでしょ
このスレを見てわかる通りわかってないやつらが大半
このスレを見てわかる通りわかってないやつらが大半
705はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b132-Ah42)
2025/02/26(水) 11:38:18.47ID:6jOr+W/20 ビットパターンを別の型で読み替える可能性があるなら最初から union で書いておいたほうが人にとっても読みやすいしな。
(C++ では union でも common initial sequence の読み替えしか許しておらず、 C より制約が厳しいので注意。)
(C++ では union でも common initial sequence の読み替えしか許しておらず、 C より制約が厳しいので注意。)
706はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b132-FOV+)
2025/02/26(水) 15:23:36.19ID:6jOr+W/20 >>703
未定義は「規格としては何も要求しない」なので処理系が何らかの追加保証をすることを禁じてない。
未定義は「規格としては何も要求しない」なので処理系が何らかの追加保証をすることを禁じてない。
707デフォルトの名無しさん (ワッチョイ 317b-/OIl)
2025/02/26(水) 15:45:51.57ID:x+jOZkKw0 特定の処理系と心中するつもりでstrict aliasing rulesを守らない奴がいたらすごい馬鹿
709デフォルトの名無しさん (ワッチョイ b691-M1fQ)
2025/02/27(木) 00:09:51.30ID:oCSgSskf0 >>707
移植しないなら別にいいんじゃないの
移植しないなら別にいいんじゃないの
710デフォルトの名無しさん (ワッチョイ 0a20-/OIl)
2025/02/27(木) 08:29:36.37ID:Uw13P3Kf0 >>709
将来の更新の可能性も考慮しないわけね
将来の更新の可能性も考慮しないわけね
711デフォルトの名無しさん (ワッチョイ 0d01-Ah42)
2025/02/27(木) 09:04:57.33ID:smeEQtfp0 だから将来も移植しないんだろ
712デフォルトの名無しさん (ワッチョイ 0a20-/OIl)
2025/02/27(木) 09:23:08.30ID:Uw13P3Kf0 移植と更新は違うぞw
713デフォルトの名無しさん (ブーイモ MMbd-A0+M)
2025/02/27(木) 10:21:51.11ID:6jIPAcTSM そのどうでもいい仮定話いつまでやんの?
714デフォルトの名無しさん (ワッチョイ 6a33-X0JC)
2025/02/27(木) 22:25:43.54ID:rdt/oSxr0 【帰化朝鮮人を論破】
日本は帰化朝鮮系の家系の人間によって隣国の大韓民国と北朝鮮に侵略行為を受けている
彼らがやっていることは「差別」を盾にした日本人を対象にした迫害であり「民族浄化」である
国際法でもこのような行為は決して許されていない
しかし何となく加害者が日本人で、差別されているの朝鮮系と言う意識を刷り込まれて彼らに遠慮してないか?
事実は逆である、加害者は彼らの方で迫害されているのは日本人である、まずこの意識を共有しよう
なぜそうなっているのか? 新聞、出版社、司法、テレビ局、会社の起業家、大学教授などが帰化系の人間で徒党を組み
日本人を差別、排除してまるで日本人であるかのように振舞っているからである
テレビに映り世論を形成している人間が日本人の振りをして韓国、北朝鮮に有利になるように論調を組み、
日本を支配し、日本人が朝鮮人に隷属することを強要している
これが侵略行為以外のなんなのか? なぜ日本人が日本で差別の対象にならなければいけないのか?
帰化系が起業し外部の朝鮮系と通じ合い会社を成功させる、または帰化系が既存の会社組織でトップに居座り
管理職を帰化人系のみで固め、日本人は閑職に追いやられ、パワハラで辞職に追い込まれ
その会社の技術を朝鮮半島に流出させ、日本企業が競争力を失っていく
芸能人、テレビ局員、スポーツ選手(五輪代表、野球、サッカー)、報道関係者は帰化系で独占されている
もはやテレビに映る人間はほとんど日本人ではないと考えろ
では何をするべきか?
もはや野党はほぼ全員、もはや自民党も過半数以上は帰化朝鮮人系の家系の人間が国会議員を占有しつつある
まず「政治家に立候補する時、外国の家系の人間か否かを公表する」を提出して過半の賛成を取って立法化しよう
国際的にもごく一般的で、アメリカでも何系かはすべて明らかにされている
そうなると帰化人の家系の人間に支配されたメディアは差別だと糾弾し始め帰化人たちが暴動やら起こすだろう、
日本は荒廃の一途を辿る、内戦状態に近いものになる
だがそれは当然のこと、国内で隣国の人間による侵略行為、民族浄化行為を受けているのだから
時間はあまりない、やつらが過半数を確保してからでは遅い、韓国北朝鮮に占領されてしまう
日本人よ、まず声を上げるのだ
日本は帰化朝鮮系の家系の人間によって隣国の大韓民国と北朝鮮に侵略行為を受けている
彼らがやっていることは「差別」を盾にした日本人を対象にした迫害であり「民族浄化」である
国際法でもこのような行為は決して許されていない
しかし何となく加害者が日本人で、差別されているの朝鮮系と言う意識を刷り込まれて彼らに遠慮してないか?
事実は逆である、加害者は彼らの方で迫害されているのは日本人である、まずこの意識を共有しよう
なぜそうなっているのか? 新聞、出版社、司法、テレビ局、会社の起業家、大学教授などが帰化系の人間で徒党を組み
日本人を差別、排除してまるで日本人であるかのように振舞っているからである
テレビに映り世論を形成している人間が日本人の振りをして韓国、北朝鮮に有利になるように論調を組み、
日本を支配し、日本人が朝鮮人に隷属することを強要している
これが侵略行為以外のなんなのか? なぜ日本人が日本で差別の対象にならなければいけないのか?
帰化系が起業し外部の朝鮮系と通じ合い会社を成功させる、または帰化系が既存の会社組織でトップに居座り
管理職を帰化人系のみで固め、日本人は閑職に追いやられ、パワハラで辞職に追い込まれ
その会社の技術を朝鮮半島に流出させ、日本企業が競争力を失っていく
芸能人、テレビ局員、スポーツ選手(五輪代表、野球、サッカー)、報道関係者は帰化系で独占されている
もはやテレビに映る人間はほとんど日本人ではないと考えろ
では何をするべきか?
もはや野党はほぼ全員、もはや自民党も過半数以上は帰化朝鮮人系の家系の人間が国会議員を占有しつつある
まず「政治家に立候補する時、外国の家系の人間か否かを公表する」を提出して過半の賛成を取って立法化しよう
国際的にもごく一般的で、アメリカでも何系かはすべて明らかにされている
そうなると帰化人の家系の人間に支配されたメディアは差別だと糾弾し始め帰化人たちが暴動やら起こすだろう、
日本は荒廃の一途を辿る、内戦状態に近いものになる
だがそれは当然のこと、国内で隣国の人間による侵略行為、民族浄化行為を受けているのだから
時間はあまりない、やつらが過半数を確保してからでは遅い、韓国北朝鮮に占領されてしまう
日本人よ、まず声を上げるのだ
715デフォルトの名無しさん (ワッチョイ 76a1-x4eQ)
2025/02/27(木) 22:56:45.28ID:c6/rsZNB0 まず統一を潰さないと
716デフォルトの名無しさん (ワッチョイ 6d07-Ah42)
2025/02/28(金) 00:14:09.12ID:FWjziINm0717はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b132-Ah42)
2025/02/28(金) 10:32:16.41ID:aDguz5rE0 >>705
念のために確認してたら union のメンバを他の型の違うメンバで読み替えて良い規則は JIS (JISX3010:2003) には書いてないっぽい。
欠陥報告で後から修正したから JIS を出した時点では原文にも書いてなかったんだな。
https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_283.htm
念のために確認してたら union のメンバを他の型の違うメンバで読み替えて良い規則は JIS (JISX3010:2003) には書いてないっぽい。
欠陥報告で後から修正したから JIS を出した時点では原文にも書いてなかったんだな。
https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_283.htm
718はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c132-ctMQ)
2025/03/11(火) 17:38:04.47ID:GvJGmymX0 C の公式サイトが登場!
https://www.c-language.org/
https://www.c-language.org/
719デフォルトの名無しさん (ワッチョイ dd01-ctMQ)
2025/03/12(水) 20:15:01.01ID:echC0lcV0 AIのおかげでCが主流になるかもな
720デフォルトの名無しさん (ササクッテロル Sp85-ZS5M)
2025/03/12(水) 21:03:53.54ID:pJ5qTyUbp >>719
それは無い
それは無い
721デフォルトの名無しさん (ワッチョイ 794b-XET2)
2025/03/12(水) 21:59:36.42ID:WyQEi83H0 AIコーディングが進化した結果直接機械語で出力できるようになったけど人間が読めないのは困るから最低限人間が読めて速度も出るCで出すのが主流になるみたいな妄想
722デフォルトの名無しさん (ササクッテロル Sp85-ZS5M)
2025/03/12(水) 22:07:09.85ID:/p3tzJNRp AIは何も指定しなきゃjavaやpythonやC#のコードを吐き出すよ
723デフォルトの名無しさん (ワッチョイ 1101-6xWR)
2025/03/18(火) 10:34:05.62ID:mIJI9ibF0 cはむずい定期
724デフォルトの名無しさん (ワッチョイ a1b3-Cuhd)
2025/03/19(水) 20:09:43.41ID:WDKEEomI0 文法的にはポインタ周りが(少し)難しいだけ
個人的にはpythonの方が難しく感じるな
個人的にはpythonの方が難しく感じるな
725はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 215e-a7BF)
2025/03/19(水) 20:44:03.52ID:SWZJHd7L0 C が未定義をエラーとして補足せずに黙って変になることがあるのは入門書などをまともに読まずにいろいろ弄って学ぶタイプの人には向いてないな。
ちゃんとした入門書をちゃんと読むならそんなに難しいわけではない。
しかし難しくないことでもしょうもないミスをするのが人というものだという現実もあって、特に規模が大きくなると C はしんどい。
難易度とかいうのとは別の話として、理解していても間違う。
ちゃんとした入門書をちゃんと読むならそんなに難しいわけではない。
しかし難しくないことでもしょうもないミスをするのが人というものだという現実もあって、特に規模が大きくなると C はしんどい。
難易度とかいうのとは別の話として、理解していても間違う。
726デフォルトの名無しさん (ワッチョイ 13ad-avMV)
2025/03/20(木) 04:57:02.69ID:07u24rkx0 まあしかしこの頃のコンパイラは警告やエラーを沢山出してくれて分り易いよ。
昔のはチェックが緩くて出なかったからな。
その状態から gcc で printf() のフォーマットと引数のチェックが出来ると知った時は衝撃を受けた。
昔のはチェックが緩くて出なかったからな。
その状態から gcc で printf() のフォーマットと引数のチェックが出来ると知った時は衝撃を受けた。
727デフォルトの名無しさん (ワッチョイ 418c-jD59)
2025/03/20(木) 17:01:49.87ID:iinwNT6F0 >>726
それな、オプションさえちゃんと付ければ昔でもできてたよ
それな、オプションさえちゃんと付ければ昔でもできてたよ
728はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 2170-a7BF)
2025/03/20(木) 17:31:14.06ID:PqZkwPwR0 GCC では遅くても 2.95.3 には attribute で文字列が書式であることを指定できて型チェックする機能はあった模様。(2001年頃)
https://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html#SEC84
ただな、このスレにいるようなおじさんの言う「昔」は 1980 年頃の話だったりするんよ。
MS-DOS 用とか CP/M 用とかのコンパイラの話なんよ。
https://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html#SEC84
ただな、このスレにいるようなおじさんの言う「昔」は 1980 年頃の話だったりするんよ。
MS-DOS 用とか CP/M 用とかのコンパイラの話なんよ。
729デフォルトの名無しさん (ワッチョイ 71ff-yHWN)
2025/03/20(木) 17:39:11.70ID:Enps6Akh0 その年代の人はおじさんじゃなくておじいさんでは
730デフォルトの名無しさん (ワッチョイ 418c-jD59)
2025/03/20(木) 17:45:05.08ID:iinwNT6F0731デフォルトの名無しさん (ワッチョイ c95f-H5Hv)
2025/03/20(木) 18:23:15.20ID:0dSk8Oyx0 メインフレームにダム端末繋げてた時代じゃよ
732デフォルトの名無しさん (スフッ Sd33-4EpX)
2025/03/20(木) 23:54:14.30ID:t3XlSG3jd gcc7.1から突然エラーメッセージが親切になったのはあるな
ちょうどclang+llvmが話題になった時期でそれに対抗したらしい
ちょうどclang+llvmが話題になった時期でそれに対抗したらしい
733デフォルトの名無しさん (ワッチョイ 13ad-avMV)
2025/03/21(金) 07:44:18.11ID:6cMMiEqo0734デフォルトの名無しさん (ワッチョイ 13ad-avMV)
2025/03/21(金) 07:45:09.98ID:6cMMiEqo0 >>728
そうそう。80年代。
そうそう。80年代。
735デフォルトの名無しさん (ワッチョイ 9bec-91cd)
2025/03/21(金) 08:19:02.26ID:kfFumR870 真理子版が便利すぎた。
736デフォルトの名無しさん (ワッチョイ 992a-15T+)
2025/03/22(土) 13:52:41.80ID:A90b+kK90 他人にも使わせるツールに環境変数「真里子」はキモすぎてビビった
737デフォルトの名無しさん (アウアウエー Sa23-D2PX)
2025/03/22(土) 14:25:25.39ID:U6/Lg1xxa >>728
scanf, sscanf で float, double に %f, %lf のところを %f, %f にしてバグるのがありがち
scanf, sscanf で float, double に %f, %lf のところを %f, %f にしてバグるのがありがち
738627 (ワッチョイ 5377-avMV)
2025/03/22(土) 15:31:32.91ID:7ZrFn0ve0 scanfなんて使ったことねーや
ありがちってほど使ってるんか
ありがちってほど使ってるんか
739デフォルトの名無しさん (ワッチョイ eba1-hjYJ)
2025/03/22(土) 15:40:39.16ID:8J5Eq6PC0 scanfに道に落ちているを食べさせてはいけません
740デフォルトの名無しさん (ワッチョイ 492a-jhJX)
2025/03/28(金) 08:23:03.00ID:+OZuQWBg0 この警告、環境によっては出ないの?
$ cc ld.c -Wall
ld.c: 関数 ‘main’ 内:
ld.c:6:19: 警告: 書式 ‘%d’ は引数の型が ‘int’ であると予期されますが、第 2 引数の型は ‘off_t’ {aka ‘long int’} です [-Wformat=]
6 | return printf("%d", offset);
| ~^ ~~~~~~
| | |
| int off_t {aka long int}
| %ld
$ cat -n ld.c
1 #include <stdio.h>
2 #include <sys/param.h>
3
4 int main() {
5 off_t offset = 1;
6 return printf("%d", offset);
7 }
8
$ cc ld.c -Wall
ld.c: 関数 ‘main’ 内:
ld.c:6:19: 警告: 書式 ‘%d’ は引数の型が ‘int’ であると予期されますが、第 2 引数の型は ‘off_t’ {aka ‘long int’} です [-Wformat=]
6 | return printf("%d", offset);
| ~^ ~~~~~~
| | |
| int off_t {aka long int}
| %ld
$ cat -n ld.c
1 #include <stdio.h>
2 #include <sys/param.h>
3
4 int main() {
5 off_t offset = 1;
6 return printf("%d", offset);
7 }
8
741デフォルトの名無しさん (ブーイモ MM26-xG3a)
2025/03/28(金) 08:29:47.68ID:v2Oxq7uoM おれの作ったCコンパイラはそんな警告出さないけど何か文句ある?
742740 (ワッチョイ 492a-jhJX)
2025/03/28(金) 09:29:48.60ID:+OZuQWBg0 >>741
あー、なるほど。↓よ。
$ cc --version
cc (GCC) 14.2.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
あー、なるほど。↓よ。
$ cc --version
cc (GCC) 14.2.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
743はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ed32-p0tU)
2025/03/28(金) 11:25:13.48ID:gM96YdDw0 >>740
出さないコンパイラはあるし、その場合に警告を出すコンパイラであっても printf 類を特別扱いしてなんとかしてるので、可変長引数一般では型が合わないときに検出されない。
出さないコンパイラはあるし、その場合に警告を出すコンパイラであっても printf 類を特別扱いしてなんとかしてるので、可変長引数一般では型が合わないときに検出されない。
744740 (ワッチョイ 492a-aKLX)
2025/03/28(金) 13:15:49.58ID:+OZuQWBg0 なるぽろ。%ld に変更せず、放っておくか。ありがとう。
ちなみに、逆に、%ld だと警告する場合も有り得るのだろうか。例えば off_t が非 long の機種があるとか。
ちなみに、逆に、%ld だと警告する場合も有り得るのだろうか。例えば off_t が非 long の機種があるとか。
745はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ed32-p0tU)
2025/03/28(金) 13:32:37.75ID:gM96YdDw0 x86-64 なら System V ABI ではどうせ 64 ビットレジスタで受け渡されるからそこんところでは問題にならないのだが、最適化したときにどうなるかまるで予想がつかない。 放置してよいとは言えない。
いったん intmax_t にキャストするのが正当な方法だと考えられている。
https://www.jpcert.or.jp/sc-rules/c-int15-c.html
いったん intmax_t にキャストするのが正当な方法だと考えられている。
https://www.jpcert.or.jp/sc-rules/c-int15-c.html
746デフォルトの名無しさん (ワッチョイ 6eef-29WZ)
2025/03/28(金) 15:39:13.17ID:Gm0qUC0n0 struct X* x;で自動変数を定義した場合
スタック上のどこかにstruct Xの領域が確保されたりしますか?
スタック上のどこかにstruct Xの領域が確保されたりしますか?
747デフォルトの名無しさん (ブーイモ MM26-xG3a)
2025/03/28(金) 15:47:02.39ID:v2Oxq7uoM されない
748740 (ワッチョイ 492a-mzfN)
2025/03/28(金) 17:27:47.76ID:+OZuQWBg0749デフォルトの名無しさん (ササクッテロラ Spf1-7PGi)
2025/03/28(金) 19:09:11.37ID:Yj8GIx0sp なんだよjって、何の略だ?
750はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ed32-p0tU)
2025/03/28(金) 22:16:42.65ID:gM96YdDw0 >>749
なんらかの単語の略 (頭文字) というわけではないらしいよ。
> j is sort of like "i" for integer
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n833.htm
なんらかの単語の略 (頭文字) というわけではないらしいよ。
> j is sort of like "i" for integer
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n833.htm
μ→uみたいなものか
大文字の I はもう使われてふのかな?
大文字の I はもう使われてふのかな?
752デフォルトの名無しさん (アウアウウー Saa5-WcQO)
2025/03/29(土) 16:07:35.02ID:M3jsTRd4a long long や unsigned long long の出力に %lld や %llu って昔は使えてた気がするが
最近はだめなんかな
%I64 とか %U64 みたいなのになってるん
最近はだめなんかな
%I64 とか %U64 みたいなのになってるん
753はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ed32-p0tU)
2025/03/29(土) 16:54:36.19ID:HRez4USp0754デフォルトの名無しさん (ワッチョイ 2e2a-aKLX)
2025/03/29(土) 17:30:28.12ID:bd7PveSA0755デフォルトの名無しさん (ワッチョイ a92a-K+vz)
2025/04/08(火) 18:05:53.82ID:f9O97Hv70 sudo で実行すると execl が動作しないように見える。なぜ?
$ cat -n e.c
1 #include <stdio.h>
2 #include <unistd.h>
3
4 int main() {
5 pid_t pid;
6 if ((pid = fork()) > 0) return 0;
7 else if (pid < 0) return 1;
8 execl("/bin/bash", "/bin/bash", "-c", "echo $$ $PPID >> /tmp/log", NULL);
9 _exit(2);
10 }
$ gcc -g e.c
$ ./a.out
$ cat /tmp/log
10593 1566
$ sudo ./a.out
$ cat /tmp/log
10593 1566
$
$ cat -n e.c
1 #include <stdio.h>
2 #include <unistd.h>
3
4 int main() {
5 pid_t pid;
6 if ((pid = fork()) > 0) return 0;
7 else if (pid < 0) return 1;
8 execl("/bin/bash", "/bin/bash", "-c", "echo $$ $PPID >> /tmp/log", NULL);
9 _exit(2);
10 }
$ gcc -g e.c
$ ./a.out
$ cat /tmp/log
10593 1566
$ sudo ./a.out
$ cat /tmp/log
10593 1566
$
756627 (ワッチョイ 22ca-VGeA)
2025/04/08(火) 19:31:31.59ID:HmugccjD0 まずコピーするなら手を入れるな手を入れると他も全部疑わなきゃいけなくなる
それからsudo -E ./a.outとsudo strace ./a.outを試せ
それからsudo -E ./a.outとsudo strace ./a.outを試せ
757デフォルトの名無しさん (ワッチョイ 798a-GhsC)
2025/04/08(火) 19:45:35.63ID:dAM9KaxA0 縦の数字はなに?
普通にエラーになるだろそれ
普通にエラーになるだろそれ
758デフォルトの名無しさん (ワッチョイ a9b3-K+vz)
2025/04/08(火) 20:08:58.79ID:0fraKCca0 catの引数に-n指定してるからだろ
759デフォルトの名無しさん (ワッチョイ 4dc4-xzp7)
2025/04/08(火) 20:57:19.94ID:brzdTu7q0 手元にあるfedora で試したが、
sudo ./a.out の結果表示は2行になった
多分、正常に処理できたようだ
sudo ./a.out の結果表示は2行になった
多分、正常に処理できたようだ
あ、次のようにしたときです
sudo ./a.out
/tmp/log に追記されませんでした
sudo ./a.out
/tmp/log に追記されませんでした
762755 (ワッチョイ a92a-ZtHn)
2025/04/08(火) 22:49:40.17ID:Rmhs1Vne0 >>759
えー!? と別環境で実行したら、sudo でも execl が動作したように見える。なにこれ。
$ ./a.out
$ cat /tmp/log
13706 1
$ sudo ./a.out
$ cat /tmp/log
13706 1
13721 1
$
取り敢えず、うちの Ubuntu の「おま環」問題のようでした。お騒がせしました。
ただ、今回のは bash の $PPID が init (1) になるという新たな謎が...
えー!? と別環境で実行したら、sudo でも execl が動作したように見える。なにこれ。
$ ./a.out
$ cat /tmp/log
13706 1
$ sudo ./a.out
$ cat /tmp/log
13706 1
13721 1
$
取り敢えず、うちの Ubuntu の「おま環」問題のようでした。お騒がせしました。
ただ、今回のは bash の $PPID が init (1) になるという新たな謎が...
763はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cd32-xzp7)
2025/04/09(水) 00:22:33.67ID:06ntJanv0 親プロセスが先に死んだら子は init の養子になる。
だけどこの場合だとどちらが先に死ぬかはプロセスのスケジューリング次第で状況によるってことなんじゃないのかな。
Linux の事情はよく知らんけど。
だけどこの場合だとどちらが先に死ぬかはプロセスのスケジューリング次第で状況によるってことなんじゃないのかな。
Linux の事情はよく知らんけど。
764デフォルトの名無しさん (ワッチョイ 4df4-bRAX)
2025/04/09(水) 00:23:29.81ID:Z/QH/Jgt0 Linux 板で聞いた方が回答ありそうな気がする。
765デフォルトの名無しさん (ワッチョイ ae7e-GhsC)
2025/04/09(水) 15:00:16.84ID:cB69i6Vg0 const unsigned char t100_day[3807] PROGMEM = { 0x89, 0x50, 0x4e, 略, }
const unsigned char t100_night[3568] PROGMEM = { 0x89, 0x50, 0x4e, 略, }
String tenki_i = "01";
char*const unsigned char t100_day[3807] PROGMEM = { 0x89, 0x50, 0x4e, 略, }
const unsigned char t100_night[3568] PROGMEM = { 0x89, 0x50, 0x4e, 略, }
String tenki_i = "01";
char* y_icon; // FIXME 型が分からない
if (tenki_i == "01") y_icon = "t100_day";
else if (tenki_i == "01_n") y_icon = "t100_night";
else if (tenki_i == "08") y_icon = "t200_day";
else if (tenki_i == "08_n") y_icon = "t200_night";
else y_icon = "t999_day";
sprite.drawPng((std::uint8_t*)y_icon, sizeof(y_icon), 0, 25);
t100_dayなどは画像なんですけど、tenki_iの中のstrによって画像を変えたいです。
y_iconはどうやって指定したらいいでしょうか?
const unsigned char t100_night[3568] PROGMEM = { 0x89, 0x50, 0x4e, 略, }
String tenki_i = "01";
char*const unsigned char t100_day[3807] PROGMEM = { 0x89, 0x50, 0x4e, 略, }
const unsigned char t100_night[3568] PROGMEM = { 0x89, 0x50, 0x4e, 略, }
String tenki_i = "01";
char* y_icon; // FIXME 型が分からない
if (tenki_i == "01") y_icon = "t100_day";
else if (tenki_i == "01_n") y_icon = "t100_night";
else if (tenki_i == "08") y_icon = "t200_day";
else if (tenki_i == "08_n") y_icon = "t200_night";
else y_icon = "t999_day";
sprite.drawPng((std::uint8_t*)y_icon, sizeof(y_icon), 0, 25);
t100_dayなどは画像なんですけど、tenki_iの中のstrによって画像を変えたいです。
y_iconはどうやって指定したらいいでしょうか?
766デフォルトの名無しさん (ワッチョイ ae7e-GhsC)
2025/04/09(水) 15:01:47.32ID:cB69i6Vg0 >>765
コピペ間違えました
正しくは以下です
char*const unsigned char t100_day[3807] PROGMEM = { 0x89, 0x50, 0x4e, 略, }
const unsigned char t100_night[3568] PROGMEM = { 0x89, 0x50, 0x4e, 略, }
String tenki_i = "01";
char* y_icon; // FIXME 型が分からない
if (tenki_i == "01") y_icon = "t100_day";
else if (tenki_i == "01_n") y_icon = "t100_night";
else if (tenki_i == "08") y_icon = "t200_day";
else if (tenki_i == "08_n") y_icon = "t200_night";
else y_icon = "t999_day";
sprite.drawPng((std::uint8_t*)y_icon, sizeof(y_icon), 0, 25);
t100_dayなどは画像なんですけど、tenki_iの中のstrによって画像を変えたいです。
y_iconはどうやって指定したらいいでしょうか?
コピペ間違えました
正しくは以下です
char*const unsigned char t100_day[3807] PROGMEM = { 0x89, 0x50, 0x4e, 略, }
const unsigned char t100_night[3568] PROGMEM = { 0x89, 0x50, 0x4e, 略, }
String tenki_i = "01";
char* y_icon; // FIXME 型が分からない
if (tenki_i == "01") y_icon = "t100_day";
else if (tenki_i == "01_n") y_icon = "t100_night";
else if (tenki_i == "08") y_icon = "t200_day";
else if (tenki_i == "08_n") y_icon = "t200_night";
else y_icon = "t999_day";
sprite.drawPng((std::uint8_t*)y_icon, sizeof(y_icon), 0, 25);
t100_dayなどは画像なんですけど、tenki_iの中のstrによって画像を変えたいです。
y_iconはどうやって指定したらいいでしょうか?
767デフォルトの名無しさん (スッップ Sd22-yI6P)
2025/04/09(水) 15:16:14.76ID:qDwL9bg0d768デフォルトの名無しさん (ワッチョイ 79f9-GhsC)
2025/04/09(水) 15:24:40.77ID:Hnk7Q6m60 すみません、書き直しました
https://ideone.com/CSy0Nb
t100_dayなどは画像なんですけど、tenki_iの中のstrによって画像を変えたいです。
y_iconはどうやって指定したらいいでしょうか?
https://ideone.com/CSy0Nb
t100_dayなどは画像なんですけど、tenki_iの中のstrによって画像を変えたいです。
y_iconはどうやって指定したらいいでしょうか?
769デフォルトの名無しさん (ワッチョイ 06a6-9hLw)
2025/04/09(水) 15:27:10.13ID:lI8vd/RJ0770はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cd32-xzp7)
2025/04/09(水) 18:01:06.77ID:06ntJanv0771はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cd32-xzp7)
2025/04/09(水) 18:30:26.27ID:06ntJanv0772755 (ワッチョイ 6e2a-ZtHn)
2025/04/09(水) 19:53:07.12ID:dFJfWRF+0 >>769
「お騒がせしました。」と言ったので、勝手ながら質問を終えた気がしていた。見てくれて有り難う。
>>755,762 については、Ubuntu においても sudo で execl は動作していた。
動作しないように見えたのは、Ubuntu 特有のファイル権限設定があり、root といえどもファイルにアペンドできないせいだった。Qiita にあったサマリが解りやすい。
https://qiita.com/skyflare2001/items/1c1934b1d2f405228334#2025118-追記
> Ubuntu の /tmp のユーザファイルに root で追記できない
全く C言語に関係なかった。ごめんちゃい。
「お騒がせしました。」と言ったので、勝手ながら質問を終えた気がしていた。見てくれて有り難う。
>>755,762 については、Ubuntu においても sudo で execl は動作していた。
動作しないように見えたのは、Ubuntu 特有のファイル権限設定があり、root といえどもファイルにアペンドできないせいだった。Qiita にあったサマリが解りやすい。
https://qiita.com/skyflare2001/items/1c1934b1d2f405228334#2025118-追記
> Ubuntu の /tmp のユーザファイルに root で追記できない
全く C言語に関係なかった。ごめんちゃい。
773デフォルトの名無しさん (アウアウウー Sa21-NXaD)
2025/04/20(日) 14:12:51.27ID:RiHDJnuQa stdbool.h 真面目に使ってる人いる?あるいは使ってない方がおかしい?
774はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7932-C6fW)
2025/04/20(日) 16:06:51.19ID:srj6a33k0 原則としては論理型が必要であれば stdbool.h (内で定義される bool) を使うべきだと思う。
論理型が C99 で導入されるより前の古いプログラム中で bool という名前を使っている場合に配慮して論理型の名前を _Bool にした上でその別名の bool を stdbool.h 内で定義するという変な構成になっている。
(もし bool という名前を独自の定義で使っている場合は単に stdbool.h を使わないという選択が可能。)
このような状況から、互換性の問題がなければ論理型は bool という名前にしたかったし、論理型の値は true, false と書きたいという意図が感じられる。
自分が書くプログラム内で名前が衝突するような問題がないのなら意図に乗っかっておくのが無難そうに思われる。
C23 からは bool, true, false がキーワードとして直接にサポートされるようになって stdbool.h は意味を失いただ存在するだけになった。
こういう変更をする以上はこれが C のあるべき新しい姿と考えられてるってことなんだろう。
stdbool.h を使うことで (古い規格でも) 新しい姿を先取りできるわけ。
ただ、 C23 の変更はちょっとだけ互換性を損なう部分があるから注意を要する。
stdboo.h で定義される旧来の true, false は 1, 0 に展開されるマクロで、要するに型で言えば int だった。
C23 からの true, false は bool 型のリテラルという立場を持つ。
これが問題になるケースはそれほどないとは思うけど……。
論理型が C99 で導入されるより前の古いプログラム中で bool という名前を使っている場合に配慮して論理型の名前を _Bool にした上でその別名の bool を stdbool.h 内で定義するという変な構成になっている。
(もし bool という名前を独自の定義で使っている場合は単に stdbool.h を使わないという選択が可能。)
このような状況から、互換性の問題がなければ論理型は bool という名前にしたかったし、論理型の値は true, false と書きたいという意図が感じられる。
自分が書くプログラム内で名前が衝突するような問題がないのなら意図に乗っかっておくのが無難そうに思われる。
C23 からは bool, true, false がキーワードとして直接にサポートされるようになって stdbool.h は意味を失いただ存在するだけになった。
こういう変更をする以上はこれが C のあるべき新しい姿と考えられてるってことなんだろう。
stdbool.h を使うことで (古い規格でも) 新しい姿を先取りできるわけ。
ただ、 C23 の変更はちょっとだけ互換性を損なう部分があるから注意を要する。
stdboo.h で定義される旧来の true, false は 1, 0 に展開されるマクロで、要するに型で言えば int だった。
C23 からの true, false は bool 型のリテラルという立場を持つ。
これが問題になるケースはそれほどないとは思うけど……。
775デフォルトの名無しさん (ワッチョイ a95f-0ulL)
2025/04/20(日) 16:30:31.97ID:VYLrteqj0 bool型だと関数成功はtrueで1
int型だと関数成功で0とか普通
混ぜるな危険
int型だと関数成功で0とか普通
混ぜるな危険
776デフォルトの名無しさん (ワッチョイ 6db1-h0BB)
2025/04/20(日) 17:33:04.38ID:SQJ2+pRN0 戻り値が負数ならエラーってやつが(ry
777デフォルトの名無しさん (ワッチョイ 5e93-M5IX)
2025/04/20(日) 18:02:02.88ID:AC61QJPP0 関数の結果がboolのやつはエラー原因丸めて何が問題かわからないからクソだよな
778デフォルトの名無しさん (ワッチョイ 8a7a-I3kk)
2025/04/20(日) 18:06:56.21ID:sZ1mcHs70 >>773
なんでstdbool.hがあるのかよく分からないってこと?
なんでstdbool.hがあるのかよく分からないってこと?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★3 [ぐれ★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 青銅聖闘士のパンチは音速←わかる 白銀聖闘士はその数倍←まぁわかる 黄金聖闘士は光速←は?
- 4時だから窓から4回ちんこ出した
- クマどもが冬眠拒否
- さわやかって
- 生活保護を受けている私だけど、おはようございます。
- 【朗報】ローソン「Мサイズのカップを購入してLサイズのコーヒーを入れてくださいね」 [455031798]
