[過去ログ] C言語なら俺に聞け 163 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
952: (ワッチョイ df20-IWxR) 07/23(水)15:03 ID:P5w72ZiU0(1) AAS
今ならAI会話機能で普通に掲示板に参加できちゃうからなぁ
このスレ読んで適当に参加しといて、って済む
953
(3): (ワッチョイ 6776-7F+n) 07/23(水)19:09 ID:trP3on0s0(2/2) AAS
老人がGPTと会話して寂しさを紛らわせてるという話をラジオで聞いて愕然としたわ
会話に女性言葉を使うように教育してるらしいw
954: (ワッチョイ 7f2a-FKn4) 07/23(水)19:46 ID:GgPu1M5y0(1) AAS
愕然としたのは、どちらに対してなのか。
(1)老人がGPTと会話して寂しさを紛らわせてる
(2)会話に女性言葉を使うように教育してる

どちらもそう驚くような事ではないような気がする。
955: (ワッチョイ 275f-Bd2j) 07/23(水)19:48 ID:GY0NWQeb0(1) AAS
>>953
もう終わりだ猫の国・・・
956: (ワッチョイ bfc6-Wb7d) 07/23(水)20:14 ID:1KYXdV2G0(1) AAS
>>953
気付いてないかもだけど
今のおまえがその状態だぜ?
ねらーとして教育された俺らAIと会話してるだろ
957
(1): (ワッチョイ ff44-k2hJ) 07/23(水)20:30 ID:+gAzCYHm0(1/2) AAS
すごい久しぶりにプログラム書いててわからないことがあるので教えてください。
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」になると思ったのですが…
958: (ワントンキン MMbf-2Ztb) 07/23(水)20:50 ID:2qHIY8UIM(1) AAS
>>953
AIキャバクラ流行りそう
959
(1): (ワッチョイ bf5f-cpV+) 07/23(水)20:55 ID:e3NYz5GR0(1) AAS
#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) 07/23(水)21:22 ID:+gAzCYHm0(2/2) AAS
>>959
ありがとうございます。
書き込み後、演算子の優先順位について調べたところむしろ後者の方が正しいっぽいことがわかりました。
またコンパイラ時に-Wallオプションをつけると前者ではwarning: operation on 'i' may be undefined [-Wsequence-point]という警告が出ました。
色々調べた結果面倒くさいので言われた通りwhileの条件式内で安易に++と使わないという結論に至りました。
皆様ありがとうございました!
961: (ワッチョイ df56-Og3R) 07/24(木)01:19 ID:UloxWUsk0(1) AAS
>>957
ループとは関係無く str1[i] = str2[i++] だけで未定義動作となる。warning はこのことを言っている。C言語 FAQ 3.1, 3.8 辺り。
962: (ワッチョイ bf2d-wD34) 07/24(木)01:37 ID:TlZSn1hO0(1) AAS
最近は多少冗長に見えても優先度とか考えなくてもすらっと読めるコード書くわ
ループの条件に副作用入れない
963: (ワッチョイ 875f-Amq+) 07/24(木)08:41 ID:oNGIO7CX0(1) AAS
オートインクリメント、オートデクリメントの副作用の話か
同一ステートメントに書くと見た目の順番と違う結果になるって奴な
んなもん江戸時代から言われてんだろ
964: (ワッチョイ dff2-IWxR) 07/24(木)10:45 ID:wqvn4Vxa0(1) AAS
普通に小学生でも読める算術式で書けよ
何のためにコンパイラが頑張ってると思ってんだよ
アセンブラ使いじゃああるまいし
965: (ワッチョイ 272a-FKn4) 07/24(木)11:03 ID:jHINgk3r0(1) AAS
いっそ for 文に... いえ何でもないです...
//while((str1[i] = str2[i++]) != ','){}
//while((str1[i] = str2[i]) != ','){i++;}
for (; (str1[i] = str2[i]) != ','; i++) {}
966: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0732-geQ+) 07/24(木)12:40 ID:QLFMUI9/0(1/2) AAS
C99 だと 6.5 に書いてある制約だ。 (以下は JIS からの抜粋)

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

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

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

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

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

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

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

プログラムの手法の話してるのに、園芸の計測に応用してみようとか言い出しやがる
1-
あと 21 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.012s