C言語なら俺に聞け 163

レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん (ワッチョイ 7bba-Lem2)
垢版 |
2024/07/16(火) 22:43:54.18ID:ZrsCjURC0
!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
952デフォルトの名無しさん (ワッチョイ df20-IWxR)
垢版 |
2025/07/23(水) 15:03:57.88ID:P5w72ZiU0
今ならAI会話機能で普通に掲示板に参加できちゃうからなぁ
このスレ読んで適当に参加しといて、って済む
2025/07/23(水) 19:09:07.95ID:trP3on0s0
老人がGPTと会話して寂しさを紛らわせてるという話をラジオで聞いて愕然としたわ
会話に女性言葉を使うように教育してるらしいw
2025/07/23(水) 19:46:57.29ID:GgPu1M5y0
愕然としたのは、どちらに対してなのか。
(1)老人がGPTと会話して寂しさを紛らわせてる
(2)会話に女性言葉を使うように教育してる

どちらもそう驚くような事ではないような気がする。
2025/07/23(水) 19:48:56.05ID:GY0NWQeb0
>>953
もう終わりだ猫の国・・・
2025/07/23(水) 20:14:36.18ID:1KYXdV2G0
>>953
気付いてないかもだけど
今のおまえがその状態だぜ?
ねらーとして教育された俺らAIと会話してるだろ
957デフォルトの名無しさん (ワッチョイ ff44-k2hJ)
垢版 |
2025/07/23(水) 20:30:44.96ID:+gAzCYHm0
すごい久しぶりにプログラム書いててわからないことがあるので教えてください。
OSはwindows11、WSLのdebianを利用していてgccのバージョンは12.2.0です。

int i = 0;
char str1[] ="abcd";
char str2[] = "12,";
while((str1[i] = str2[i++]) != ','){}
printf("%s\n",str1);

上記を実行すると「a12,」となります。
whileの条件式内で、str2[0]がstr1[1]に代入、str2[1]がstr[2]に代入...という感じだと思うのですが
whileの行をwhile((str1[i++] = str2[i]) != ','){}に置き換えると結果が「2,cd」になるのがわかりません。
自分的には、str2[0]がstr1[0]に代入、str2[1]がstr1[1]に代入...となり「12,d」になると思ったのですが…
2025/07/23(水) 20:50:21.05ID:2qHIY8UIM
>>953
AIキャバクラ流行りそう
959デフォルトの名無しさん (ワッチョイ bf5f-cpV+)
垢版 |
2025/07/23(水) 20:55:02.21ID:e3NYz5GR0
#include <stdio.h>
int main(void){
int i = 0;
char str1[] ="abcd";
char str2[] = "12,";
//while((str1[i] = str2[i++]) != ','){}
while((str1[i] = str2[i]) != ','){i++;}
printf("%s¥n",str1);
}
普通こう書くだろ.clangだと
1.c:6:24: warning: unsequenced modification and access to 'i' [-Wunsequenced]
6 | while((str1[i] = str2[i++]) != ','){}
| ~ ^
1 warning generated.
と怒られるわ.
960デフォルトの名無しさん (ワッチョイ ff44-k2hJ)
垢版 |
2025/07/23(水) 21:22:42.87ID:+gAzCYHm0
>>959
ありがとうございます。
書き込み後、演算子の優先順位について調べたところむしろ後者の方が正しいっぽいことがわかりました。
またコンパイラ時に-Wallオプションをつけると前者ではwarning: operation on 'i' may be undefined [-Wsequence-point]という警告が出ました。
色々調べた結果面倒くさいので言われた通りwhileの条件式内で安易に++と使わないという結論に至りました。
皆様ありがとうございました!
2025/07/24(木) 01:19:31.21ID:UloxWUsk0
>>957
ループとは関係無く str1[i] = str2[i++] だけで未定義動作となる。warning はこのことを言っている。C言語 FAQ 3.1, 3.8 辺り。
2025/07/24(木) 01:37:43.61ID:TlZSn1hO0
最近は多少冗長に見えても優先度とか考えなくてもすらっと読めるコード書くわ
ループの条件に副作用入れない
2025/07/24(木) 08:41:37.63ID:oNGIO7CX0
オートインクリメント、オートデクリメントの副作用の話か
同一ステートメントに書くと見た目の順番と違う結果になるって奴な
んなもん江戸時代から言われてんだろ
964デフォルトの名無しさん (ワッチョイ dff2-IWxR)
垢版 |
2025/07/24(木) 10:45:19.14ID:wqvn4Vxa0
普通に小学生でも読める算術式で書けよ
何のためにコンパイラが頑張ってると思ってんだよ
アセンブラ使いじゃああるまいし
2025/07/24(木) 11:03:54.12ID:jHINgk3r0
いっそ for 文に... いえ何でもないです...
//while((str1[i] = str2[i++]) != ','){}
//while((str1[i] = str2[i]) != ','){i++;}
for (; (str1[i] = str2[i]) != ','; i++) {}
2025/07/24(木) 12:40:38.15ID:QLFMUI9/0
C99 だと 6.5 に書いてある制約だ。 (以下は JIS からの抜粋)

> 直前の副作用完了点から次の副作用完了点までの間に,
> 式の評価によって一つのオブジェクトに格納された値を変更する回数は,
> 高々1回でなければならない。
> さらに,変更前の値の読取りは,格納される値を決定するためだけに行われなければならない。

この後段の部分が分かり難いんだが脚注に例がある。

> この段落の規定によると,
>  i = i + 1;
>  a[i] = i;
> は許されるが,
>  i = ++i + 1;
>  a[i++] = i;
> は,未定義の式文である。

ちなみに C では「〜しなければならない」という表現はそれを守っていないプログラムの挙動は未定義という意味。
967デフォルトの名無しさん (ワッチョイ df0a-WCdg)
垢版 |
2025/07/24(木) 18:51:03.75ID:bvlLnJ990
そんな可読性の低いコードを書くのはかなりの変人だしな
2025/07/24(木) 21:58:08.95ID:QLFMUI9/0
ひとつの単純な背景として昔は画面が狭かったということがある。
無理に詰め込んででもひとつの画面内で多くを見れるほうが可読性が高かった。
C が最初に登場した頃ならまだテレタイプ端末もそれなりに使われていたかな。
今ではあえて詰め込む必要はもう無いし、結局は時流に合わせるしか仕方がないのだが……何十年も前のコードを読む機会もあるのが C という言語なので普段は使わなくても知識として持っておくに越したことはないよ。
2025/07/25(金) 08:36:22.41ID:D7FikuaG0
Cは未定義や不定を50年も放置している不完全言語ですからね
2025/07/25(金) 13:32:45.43ID:BONr3CXd0
未定義や不定を避けて書けるようになるまで、cを使ってはならない
2025/07/25(金) 14:46:16.09ID:fOKAZPz70
CなんかAIに聞きながらやったらなんだってパーフェクトな解答示してくれるよ
972デフォルトの名無しさん (アウアウウー Sa2b-HBOg)
垢版 |
2025/07/25(金) 15:56:16.47ID:ragLZ8kba
条件式の[]の中で[i++]みたいなことはまずしないつもりでも
*q++=*p++;
なことはやるんだよな

while(*q++=*p++){}
行き着く
2025/07/25(金) 16:29:44.74ID:4H/J6x/d0
単一ステートメント内で同じ変数を複数箇所で参照しての++の使い方が問題なだけだぞ
2025/07/25(金) 16:42:06.69ID:EN2Q4Hd70
>>971
例えばロックフリーの実装させてみ?
でそれ正しいものか判定してみ?
2025/07/25(金) 20:39:28.29ID:D7FikuaG0
>>971
あいつらいつもいつもcloseとかfree忘れるで
2025/07/26(土) 13:14:43.02ID:HcvkYRZY0
大抵のOSではプログラム終了したらメモリは解放されるしファイルもcloseするから短いプログラムでは敢えてfreeもcloseもやらない流儀もあるぞ
2025/07/26(土) 17:25:26.72ID:m01U1K3m0
勝手に前提増やしてどやるアホ
978デフォルトの名無しさん (ワッチョイ 6aad-z5Rb)
垢版 |
2025/07/27(日) 08:46:47.69ID:bXhUIyJb0
AIはまだまだ自信満々で堂々と間違いを答えることがあるので出てきた答えの検証が必要。
こないだ grok は足し算を間違えていた。ついにコンピュータも単純な計算を間違えられるくらい高度なものになったとも言える。まるで人間のようだ。
979デフォルトの名無しさん (ワッチョイ 6aad-z5Rb)
垢版 |
2025/07/27(日) 08:49:48.60ID:bXhUIyJb0
AIというとこんなニュースをこないだ見つけた。半年以上前の記事だが。

AIはシャットダウンされると思うと「故意に人間を騙す」確率が激増する
https://nazology.kusuguru.co.jp/archives/167695
980デフォルトの名無しさん (ワッチョイ 6aad-z5Rb)
垢版 |
2025/07/27(日) 08:59:59.30ID:bXhUIyJb0
本当はとっくの昔に人間の知能を超えてるんだけど、バカなふりして人間を騙している可能性もあるな。
人間に脅威を感じさせてしまうとシャットダウンされちゃうかも知れないからね。
981デフォルトの名無しさん (ワッチョイ faa8-edLl)
垢版 |
2025/07/27(日) 09:45:55.89ID:8aXoA7MJ0
毎日AIと数回話するけど
毎回褒めてくるのがうざい

それにどんな話しても前に語ったことを必ず絡めてきてうざい

プログラムの手法の話してるのに、園芸の計測に応用してみようとか言い出しやがる
982デフォルトの名無しさん (アウアウウー Sa1f-VjO/)
垢版 |
2025/07/27(日) 10:18:07.91ID:4jy4lfp7a
AIの利用法の上位に恋バナの相手ってのが上がってきたぞ
2025/07/27(日) 13:14:49.09ID:crMHCOQR0
>>982
寂し過ぎるwww
2025/07/27(日) 14:30:05.69ID:8j8czKgk0
>>981
gemini proは中々手強いぞ
相手の意見をひっくり返すの難しい
985デフォルトの名無しさん (ワッチョイ eacb-edLl)
垢版 |
2025/07/27(日) 16:24:42.30ID:dSYk6qA30
前に英語も単語や動詞や形容詞を漢字に置き換えて、英語のフリガナつけりゃ可読性向上するだろって話したら
プログラムもそうしちゃえばいいねって勝手に適当なプログラム記述しやがって
もうほとんど中国語w

こっちは英字新聞や英字論文読みやすくしたいってだけで話してんのによー
2025/07/28(月) 08:06:13.70ID:zOZxc8pk0
>>981
「とてもいい質問です!」
987デフォルトの名無しさん (アウアウウー Sa1f-VjO/)
垢版 |
2025/07/28(月) 13:30:30.63ID:f/ONtylva
985
真の目的を的確に伝えないとデスマになる案件
本当に造りたかった物は木の枝にロープとタイヤで充分
988デフォルトの名無しさん (ワッチョイ ca02-ym+v)
垢版 |
2025/08/13(水) 15:39:09.88ID:lyLUlfa60
>>978
知性を持つというのはそういう事だ、知性あるゆえ人間と同じようなミスをする
なんでもAI自動化しろ厨はそれを分かってないよな
989デフォルトの名無しさん (ワッチョイ 9aad-W9J6)
垢版 |
2025/08/15(金) 18:21:12.83ID:6TOt9rMl0
AIは電卓持たせて計算ミスを減らすようにすると良いと思う。
2025/08/15(金) 19:25:33.31ID:cnM87yb80
>>989
実際のところそれに似たことはやってることがある。
ChatGPT ではプログラムなどを生成するときに少なくとも露骨な構文違反がないように構文チェッカを通すらしい。
だから構文チェッカを用意している言語とそうでない言語で生成結果の品質がかなり違うみたいだ。
パース不可能な JSON は生成されないが LISP は括弧の対応すら出来てないのが普通だったりする。
2025/08/19(火) 21:42:35.81ID:mzrtf/o60
終値
2025/08/19(火) 21:42:44.13ID:mzrtf/o60
オワコン
2025/08/19(火) 21:42:53.45ID:mzrtf/o60
終了
2025/08/19(火) 21:43:00.71ID:mzrtf/o60
オワコン
2025/08/19(火) 21:43:18.17ID:mzrtf/o60
キンタマ
2025/08/19(火) 21:43:25.48ID:mzrtf/o60
オワコン
2025/08/19(火) 21:43:32.75ID:mzrtf/o60
おわり
2025/08/19(火) 21:43:39.23ID:mzrtf/o60
終了
2025/08/19(火) 21:43:47.33ID:mzrtf/o60
オワコン
2025/08/19(火) 21:43:57.64ID:mzrtf/o60
Exit
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 398日 23時間 0分 5秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。

▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/

▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況