C言語の設計ミスった危険な関数トップ10決めようぜ
2019/11/26(火) 04:12:31.62ID:As19A6dg
putchar()はプッチャーと読んでいた
12デフォルトの名無しさん
2019/11/26(火) 12:29:09.20ID:dAEqoOXB scanf
strtok
feof
strtok
feof
2019/11/26(火) 20:24:02.10ID:feqSm/53
C言語の関数名ってまだリンカがシンボルの先頭から6文字までしか認識しなかった頃の名残だしな
変な短縮形が多い
変な短縮形が多い
2019/11/27(水) 03:05:40.28ID:nQw9n1Di
strcpy()とか意図しようがしまいが簡単にメモリをぶっ壊せる
よくよく考えるとキチガイ過ぎる
よくよく考えるとキチガイ過ぎる
2019/11/27(水) 12:17:59.87ID:zdI/1sLa
C言語に安全性を求めるのは違う
16デフォルトの名無しさん
2019/11/27(水) 12:31:41.61ID:KtqS+hCI time
localtime
localtime
2019/11/27(水) 13:15:40.24ID:MN5dlGGA
>>15
ほんそれ
ほんそれ
2019/11/27(水) 13:50:48.05ID:pAkxzJaX
2019/11/27(水) 14:42:57.39ID:MN5dlGGA
大昔に出来た関数なんだから多くを求めるな
2019/11/30(土) 20:36:22.78ID:4Da+M2q+
>>11
俺はプッキャーだった
俺はプッキャーだった
2019/11/30(土) 20:38:28.97ID:4Da+M2q+
2019/11/30(土) 21:25:24.92ID:vRr1Hx4s
安全は考えないで設計したのでミスってはいない
2019/11/30(土) 22:19:14.33ID:Zwer7NNs
アブドーラ・ザ・プッチャー
2019/12/01(日) 10:49:26.54ID:uAQAPMuh
組み込みでC言語は使うけど、10個以上の標準関数って使わないな...。
2019/12/01(日) 12:47:24.87ID:p3Z7Nr0h
memcpy / memset / memcmp
strlen / str(n)cpy / str(n)cmp / str(n)cat
これで10個
strlen / str(n)cpy / str(n)cmp / str(n)cat
これで10個
2019/12/01(日) 13:17:11.11ID:W5IIwakz
組み込みで文字列扱わないことも多いね。
どんな製品でもほぼ使うのはmemset、memcpy、memcmpぐらいじゃない?
どんな製品でもほぼ使うのはmemset、memcpy、memcmpぐらいじゃない?
2019/12/01(日) 17:41:11.15ID:YWi4MX0G
2019/12/01(日) 20:53:25.46ID:IKYJT3WJ
C言語ではなく標準ライブラリの話かい。
2019/12/01(日) 21:25:08.28ID:7gLQ63yc
アセンブラより安全なら良いじゃん
2019/12/02(月) 00:51:13.45ID:RIgVO6ZZ
memcpyが危険とか言うなら
C言語使うなってことになる
C言語使うなってことになる
2019/12/02(月) 00:53:00.40ID:RIgVO6ZZ
2019/12/02(月) 02:04:59.50ID:AAYR8Yqw
2019/12/02(月) 06:48:47.55ID:kJrDK+4B
2019/12/02(月) 13:15:48.70ID:EYnQFBh2
一体どういう考えで昔の人は、getsの仕様はあれでOKだと思ったんだろう?
どう考えてもバッファオーバーフローするやん?
しない方法なんて存在するの?
どう考えてもバッファオーバーフローするやん?
しない方法なんて存在するの?
2019/12/02(月) 13:18:13.53ID:xJykAg3Z
バッファオーバーフローしないデータを食わせれば良い
わざわざ変なデータを入力するヤツが悪い
って考えの時代の関数だ
わざわざ変なデータを入力するヤツが悪い
って考えの時代の関数だ
2019/12/02(月) 13:41:09.67ID:EYnQFBh2
でもさ、getsってキーボード入力やろ?
2019/12/02(月) 15:30:07.33ID:LC/c96JG
gets は、もう、標準ライブラリにも入っていないので許せ
2019/12/02(月) 18:02:20.65ID:kmSxls5X
>>36
わざわざ変なデータを入力するヤツが悪い
わざわざ変なデータを入力するヤツが悪い
2019/12/02(月) 18:41:59.62ID:E2hgf+6B
ダンディ坂野「gets!!」
2019/12/02(月) 20:50:15.44ID:kJrDK+4B
41デフォルトの名無しさん
2019/12/03(火) 01:51:02.34ID:dBsSbed7 8ビットの整数型を char などというものにしたのも、アメリカ人は
自分たちの英語しか知らない田舎者であることを如実に表している。
自分たちの英語しか知らない田舎者であることを如実に表している。
42デフォルトの名無しさん
2019/12/03(火) 09:14:31.49ID:yN5r9ueQ >>40
64kbでも広大な空間だったな
64kbでも広大な空間だったな
2019/12/03(火) 12:22:07.21ID:90Sp73uq
2019/12/03(火) 12:29:35.88ID:Uh1tIUQA
> 逆だよ、都会の人間は都会のことしか知らないし知る必要がない
だから世界が狭くて無知になりやすい
> なぜか田舎の人間は都会のことも知ろうとするw
だから世界が広い
だから世界が狭くて無知になりやすい
> なぜか田舎の人間は都会のことも知ろうとするw
だから世界が広い
45デフォルトの名無しさん
2019/12/03(火) 12:51:15.68ID:dBsSbed7 井の中の蛙 大海を知らず
されど空の蒼さを知る
されど空の蒼さを知る
2019/12/03(火) 13:25:13.55ID:g2sdmHcp
C言語が出来た時の時代を考えれば十分
「変数名に日本語が使えない言語は糞」
って時代もそのうち来るよ
「変数名に日本語が使えない言語は糞」
って時代もそのうち来るよ
2019/12/03(火) 19:14:24.81ID:90Sp73uq
>>44
残念ながらそうはなってないんだなw
狭く深くっていう世界だから
要するに田舎でな何をするにもオーバーヘッドが大きいってことな
今はネットでだいぶマシになったけどネット以前の情報収集考えたらアホでもわかる話
残念ながらそうはなってないんだなw
狭く深くっていう世界だから
要するに田舎でな何をするにもオーバーヘッドが大きいってことな
今はネットでだいぶマシになったけどネット以前の情報収集考えたらアホでもわかる話
2019/12/08(日) 02:33:17.34ID:aqWVKWA+
アホなデータ食わせるアホなやつのために堅牢な仕組みにする必要はない
2019/12/11(水) 01:29:51.60ID:7IDmuKiG
>>41
元々は9bit
元々は9bit
50デフォルトの名無しさん
2019/12/11(水) 06:55:08.36ID:IbA4V9X0 >>46
メモリが640kバイトしか使えなかった頃からのものだしな
メモリが640kバイトしか使えなかった頃からのものだしな
2019/12/11(水) 07:59:10.55ID:yA/FdCBI
>>5
ストラトック
ストラトック
2019/12/11(水) 15:20:43.27ID:JkExA39E
大昔って端末やエディタなんかでも1行256とか1024バイト程度しか扱えなかったばず
53デフォルトの名無しさん
2019/12/11(水) 15:32:22.68ID:8OP/pbId 256 の時代は割と長かった希ガス
2019/12/13(金) 06:37:32.10ID:o1f1J6fH
昔は1行の長さを先に決めてファイルをクリエイトしました
途中で変更はできません
途中で変更はできません
55デフォルトの名無しさん
2019/12/14(土) 13:26:55.02ID:TlZt0bii 関数そのものじゃないが
breakにラベル指定出来なかったのは設計ミスやろ
breakにラベル指定出来なかったのは設計ミスやろ
2019/12/14(土) 13:54:03.80ID:JwYnIOEa
その為のgoto
57デフォルトの名無しさん
2019/12/14(土) 22:43:29.04ID:8CJijD11 gotoはラベルのスコープが広いから使いにくい。ループごとに別のラベル名を
付けないといけないし、ラベル名を別のループ用のものと書き間違えると
意図しない所へ飛んで行ってしまう。スパゲッティでバグの元。
ループにラベルを付ければ、スコープがそのループ内に限定され、そのループの
外にある別のループに同じラベル名を付けることができるから、書きやすく
読みやすい。例えば、こんな感じ。
for @outer (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {
printf("%d, %d\n", i, j);
if (i * j > 3) break @outer;
}
}
for @outer (i = 1; i <= 5; i++) {
for (j = 1; j <= 5; j++) {
printf("%d, %d\n", i, j);
if (i * j > 5) break @outer;
}
}
付けないといけないし、ラベル名を別のループ用のものと書き間違えると
意図しない所へ飛んで行ってしまう。スパゲッティでバグの元。
ループにラベルを付ければ、スコープがそのループ内に限定され、そのループの
外にある別のループに同じラベル名を付けることができるから、書きやすく
読みやすい。例えば、こんな感じ。
for @outer (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {
printf("%d, %d\n", i, j);
if (i * j > 3) break @outer;
}
}
for @outer (i = 1; i <= 5; i++) {
for (j = 1; j <= 5; j++) {
printf("%d, %d\n", i, j);
if (i * j > 5) break @outer;
}
}
2019/12/14(土) 22:45:51.60ID:JwYnIOEa
単純に
breakする数を指定出来るだけで良い
breakする数を指定出来るだけで良い
2019/12/15(日) 06:50:28.91ID:6aWNd1w0
>>58
ネストの数を数えるとか最低だと思う
ネストの数を数えるとか最低だと思う
2019/12/15(日) 07:00:06.17ID:a0yEED8b
1000行のコードでbreak 7;とかされても、
どこに抜けるかわからんよな!
どこに抜けるかわからんよな!
2019/12/15(日) 09:51:38.77ID:5sPbacoo
ネストの数がわからないような巨大な構造は
それだけで最低だ
そんなんだと名前付きループにした所で
@outerなんて名前が使い回されて
同じ名前のループがネストされて
それこそ難読コードになる
それならユニークなラベルによるgotoの方が良い
>>57くらいのループなら
break 2;
は名前を考える手間が無くて楽だし
見にくくもない
それだけで最低だ
そんなんだと名前付きループにした所で
@outerなんて名前が使い回されて
同じ名前のループがネストされて
それこそ難読コードになる
それならユニークなラベルによるgotoの方が良い
>>57くらいのループなら
break 2;
は名前を考える手間が無くて楽だし
見にくくもない
2019/12/15(日) 09:57:28.64ID:5sPbacoo
とは書いたけど
どっちも有るならどっちも欲しい
どっちかだけげならbreak 2;の方が欲しい
って感じ
どっちも有るならどっちも欲しい
どっちかだけげならbreak 2;の方が欲しい
って感じ
2019/12/15(日) 10:52:04.89ID:6aWNd1w0
2019/12/15(日) 11:05:09.82ID:5sPbacoo
ループの先頭、ループの終わり、break部分
3箇所見ないとダメってだけでダメな仕様
3箇所見ないとダメってだけでダメな仕様
2019/12/15(日) 12:32:17.60ID:bDjAMWVj
2019/12/15(日) 12:36:08.74ID:5sPbacoo
大きければgoto
小さければbreak n
小さければbreak n
2019/12/15(日) 12:38:50.49ID:5sPbacoo
名前を付ける手間を許容するならgotoという解決法が既にある
68デフォルトの名無しさん
2019/12/15(日) 13:48:44.02ID:o9m7qUoD >>60
ネスト変わるような変更あるたびにbreakの引数勝手に書き換えてくれるエディタとかマクロが流行る
ネスト変わるような変更あるたびにbreakの引数勝手に書き換えてくれるエディタとかマクロが流行る
2019/12/15(日) 16:33:57.62ID:bDjAMWVj
2019/12/15(日) 16:52:03.21ID:u46gpj2V
歪んだ教育のせいで
gotoに拒絶反応を示す人が多いんだよな
2重ループを抜けるなら素直にgotoを使えって
gotoに拒絶反応を示す人が多いんだよな
2重ループを抜けるなら素直にgotoを使えって
2019/12/15(日) 16:53:29.68ID:pTp+dpJs
アセンブラの
jmp 1f
とかを C でやりたいという話なのか?
やってみりゃいいじゃん。プリプロセッサの出力を処理すればいい。
1 パスで出来ると思うよ。
ひょっとしてもう誰かがやってるかも。
jmp 1f
とかを C でやりたいという話なのか?
やってみりゃいいじゃん。プリプロセッサの出力を処理すればいい。
1 パスで出来ると思うよ。
ひょっとしてもう誰かがやってるかも。
2019/12/15(日) 18:05:59.04ID:5sPbacoo
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {
printf("%d, %d\n", i, j);
if (i * j > 3) goto outer;
}
} outer:;
for (j = 1; j <= 3; j++) {
printf("%d, %d\n", i, j);
if (i * j > 3) goto outer;
}
} outer:;
2019/12/15(日) 18:58:38.98ID:5sPbacoo
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {
printf("%d, %d\n", i, j);
if (i * j > 3) goto outer;
}
}
printf("complete\n");
outer:;
for (j = 1; j <= 3; j++) {
printf("%d, %d\n", i, j);
if (i * j > 3) goto outer;
}
}
printf("complete\n");
outer:;
2019/12/15(日) 19:01:19.97ID:5sPbacoo
わざわざ言語拡張しなくても
>>57以上の事が実現出来る
>>57以上の事が実現出来る
2019/12/16(月) 09:05:52.89ID:AI1GDY0I
ラベルのスコープを狭くしたいという話のようだから
マクロの中で使ってこそ真価を発揮するんじゃないかな。
フル仕様のパースが必要というわけではなく、かなり手抜きできそうではある。
あれば便利というのは否定しないが、C でそこまで必要かというと…
マクロの中で使ってこそ真価を発揮するんじゃないかな。
フル仕様のパースが必要というわけではなく、かなり手抜きできそうではある。
あれば便利というのは否定しないが、C でそこまで必要かというと…
76デフォルトの名無しさん
2019/12/16(月) 12:33:03.93ID:0jmxiGrg {
goto hoge;
hoge:;
}
{
goto hoge;
hoge:;
}
これで二重になってたら困るしある意味なってなくても困るな
goto hoge;
hoge:;
}
{
goto hoge;
hoge:;
}
これで二重になってたら困るしある意味なってなくても困るな
2019/12/16(月) 13:21:05.83ID:ZZ8St2Js
マクロで二重以上のループってのもなかなか考えづらいなあ
一応、ラベル名をパラメータとする手もある
使う側のコストを考えるとgotoの為にパラメータを増やさないよな
gotoを使わない主義者がよくやってるように
余分な変数を使って実装するんだろうね
一応、ラベル名をパラメータとする手もある
使う側のコストを考えるとgotoの為にパラメータを増やさないよな
gotoを使わない主義者がよくやってるように
余分な変数を使って実装するんだろうね
2019/12/16(月) 13:23:11.26ID:ZZ8St2Js
アセンブラだとマクロローカルラベルってのがあったりする
ラベルを頻繁に使うので
あと
@@/@b/@fのように、
直近のラベルを指定する仕組みもある
ラベルを頻繁に使うので
あと
@@/@b/@fのように、
直近のラベルを指定する仕組みもある
2019/12/16(月) 13:28:49.41ID:ZZ8St2Js
2019/12/16(月) 15:17:28.75ID:arH1mwfY
void print_data(void) {
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {
printf("%d, %d\n", i, j);
if (i * j > 3) return;
}
}
}
print_data();
printf("complete\n");
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {
printf("%d, %d\n", i, j);
if (i * j > 3) return;
}
}
}
print_data();
printf("complete\n");
2019/12/16(月) 16:34:59.64ID:/0yHEQmX
outer より後に処理が続く場合は?
2019/12/16(月) 16:51:44.02ID:arH1mwfY
void print_data(void) {
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {
printf("%d, %d\n", i, j);
if (i * j > 3) return;
}
}
}
print_data();
outer より後に処理が続く場合
printf("complete\n");
for (i = 1; i <= 3; i++) {
for (j = 1; j <= 3; j++) {
printf("%d, %d\n", i, j);
if (i * j > 3) return;
}
}
}
print_data();
outer より後に処理が続く場合
printf("complete\n");
2019/12/16(月) 16:55:03.26ID:arH1mwfY
"短い処理"をいちいち関数にしなくて済むから、break 2とかはあってもいいが、
長い処理は関数にしてないとろくにテストできないんだからgotoなんていらない
長い処理は関数にしてないとろくにテストできないんだからgotoなんていらない
2019/12/16(月) 19:03:13.17ID:4DgO9d+i
じゃあ>>57もいらないね
2019/12/16(月) 19:09:09.12ID:lsrBHsJG
gotoの基本的な使い方くらい知っておいた方が良いかと
ループを抜ける為だけに関数を分けないといけなくなるし
挙げ句の果てに言語の欠陥とか言い出す
ループを抜ける為だけに関数を分けないといけなくなるし
挙げ句の果てに言語の欠陥とか言い出す
2019/12/16(月) 20:06:51.00ID:3ha1TSe5
今のC言語ではネストしたループから抜けるのはフラグを使うかgotoしかないからたいていgoto使ってるけどgotoなんて野蛮なものはできたら使いたくないから他の言語で実装されてるラベル付きbreakなりレベル付きbreakが欲しいって話だろ
今更gotoの基本的な使い方ガーとか言ってる奴はどんだけ低レベルなんだよw
今更gotoの基本的な使い方ガーとか言ってる奴はどんだけ低レベルなんだよw
2019/12/16(月) 20:09:28.82ID:xr9KOlE0
あれ?
returnで抜ける為に関数に分けるんじゃなかったの?
returnで抜ける為に関数に分けるんじゃなかったの?
2019/12/16(月) 20:21:09.65ID:xr9KOlE0
gotoは野蛮とかいう歪んだ教育のせいで
わざわざ変数を定義したりわざわざ関数を分けたりして
わざわざ見にくいコードにしちゃう
生でポインタを扱う野蛮なC言語なんか使わないで
上品な言語を使った方が良いよ
わざわざ変数を定義したりわざわざ関数を分けたりして
わざわざ見にくいコードにしちゃう
生でポインタを扱う野蛮なC言語なんか使わないで
上品な言語を使った方が良いよ
2019/12/16(月) 20:28:02.60ID:jL52ryYk
gotoじゃなくてgodowntoなら誰も文句言わなかった
2019/12/16(月) 20:47:58.36ID:LjjtFzBx
自分は小規模な字句解析みたいなのでもgoto使うことがある。
ラベルで状態を表してgotoで遷移する。
goto使わなかったら状態を変数に入れて、
ループの中でswitchで場合分けするようなコードになって辛い。
ラベルで状態を表してgotoで遷移する。
goto使わなかったら状態を変数に入れて、
ループの中でswitchで場合分けするようなコードになって辛い。
2019/12/16(月) 20:52:55.59ID:DbnQVwfE
ループの中のswitchでループを抜けるのに
gotoを使うんじゃ?
gotoを使うんじゃ?
2019/12/16(月) 21:41:34.22ID:wRV+mRkt
次の状態を返す関数ポインタでループすればいんじゃないの?
2019/12/16(月) 21:45:33.24ID:jhycq5nX
そんな野蛮なことはしません
2019/12/16(月) 22:12:14.62ID:arH1mwfY
>>87
returnで抜けるためというか、
1. gotoで抜けたい
2. 関数にするか
3. あ、そもそもコードが複雑なんだな
4. 関数にして正解だった
こんな感じかな。
gotoで抜けたいと思う=コードが複雑になってるという警鐘だと思ってる。
returnで抜けるためというか、
1. gotoで抜けたい
2. 関数にするか
3. あ、そもそもコードが複雑なんだな
4. 関数にして正解だった
こんな感じかな。
gotoで抜けたいと思う=コードが複雑になってるという警鐘だと思ってる。
2019/12/16(月) 22:22:18.57ID:xr9KOlE0
2019/12/16(月) 22:27:34.28ID:arH1mwfY
2019/12/16(月) 22:32:01.57ID:arH1mwfY
> 理由が後付けだからそうなる
質問の方が先なのに、理由を先に言えるわけがないw
Q. 多重ループから抜けるのに、gotoは必要ですか?
A. 必要ありません。多重ループが必要になるぐらい複雑なら関数にしますから
これが普通だから、後付にはならないよね。
質問の方が先なのに、理由を先に言えるわけがないw
Q. 多重ループから抜けるのに、gotoは必要ですか?
A. 必要ありません。多重ループが必要になるぐらい複雑なら関数にしますから
これが普通だから、後付にはならないよね。
2019/12/16(月) 22:37:09.13ID:xr9KOlE0
じゃ>>57も当然不要ですね
2019/12/16(月) 22:38:17.80ID:arH1mwfY
そんなにくり返し言わなくても、最初から不要だしw
100デフォルトの名無しさん
2019/12/16(月) 22:39:57.37ID:xr9KOlE0 じゃあ>>57はどういうつもりで書いたんでしょうかね?
101デフォルトの名無しさん
2019/12/16(月) 22:40:50.59ID:LjjtFzBx gogoサイコーっす
102デフォルトの名無しさん
2019/12/16(月) 22:41:03.68ID:LjjtFzBx 間違えたw goto
103デフォルトの名無しさん
2019/12/16(月) 22:42:13.32ID:xr9KOlE0 話を戻して
・ループを抜けた後に関数の後処理が必要な場合
・ループを抜けた後にローカル変数を使った処理をする場合
・他、意味的に関数内で処理したい場合
はどうするの?
・ループを抜けた後に関数の後処理が必要な場合
・ループを抜けた後にローカル変数を使った処理をする場合
・他、意味的に関数内で処理したい場合
はどうするの?
104デフォルトの名無しさん
2019/12/16(月) 22:44:03.17ID:arH1mwfY > ・ループを抜けた後に関数の後処理が必要な場合
前処理を関数の中でするな
> ・ループを抜けた後に関数の後処理が必要な場合
戻り値を返せ
>・他、意味的に関数内で処理したい場合
自分で具体例が思いつかないなら出すな
前処理を関数の中でするな
> ・ループを抜けた後に関数の後処理が必要な場合
戻り値を返せ
>・他、意味的に関数内で処理したい場合
自分で具体例が思いつかないなら出すな
105デフォルトの名無しさん
2019/12/16(月) 22:45:01.13ID:arH1mwfY コピペミスったな
>・ループを抜けた後にローカル変数を使った処理をする場合
戻り値を返せ
>・ループを抜けた後にローカル変数を使った処理をする場合
戻り値を返せ
106デフォルトの名無しさん
2019/12/16(月) 22:48:10.00ID:xr9KOlE0 >>104
なぜ?
なぜ?
107デフォルトの名無しさん
2019/12/16(月) 22:52:22.49ID:arH1mwfY >>106
なにが?
ってか、もう少し具体例を書けよ。
それみれば設計がおかしいという結論になる
例えて言うなら、パーサーの処理の中でネットワークにアクセスしたい時困るから
ネットワークモジュールはグローバルにアクセスできるようにしておくべき
みたいなことを言ってるようなもんだよ。それは設計がおかしい。
なにが?
ってか、もう少し具体例を書けよ。
それみれば設計がおかしいという結論になる
例えて言うなら、パーサーの処理の中でネットワークにアクセスしたい時困るから
ネットワークモジュールはグローバルにアクセスできるようにしておくべき
みたいなことを言ってるようなもんだよ。それは設計がおかしい。
108デフォルトの名無しさん
2019/12/16(月) 22:54:10.44ID:xr9KOlE0 int func(int n){
ロック
ループ
アンロック
return 結果;
}
ロック
ループ
アンロック
return 結果;
}
109デフォルトの名無しさん
2019/12/16(月) 22:55:55.89ID:xr9KOlE0 int func(int n){
ループ
値を加工
return 値
}
ループ
値を加工
return 値
}
110デフォルトの名無しさん
2019/12/16(月) 22:58:13.41ID:arH1mwfY >>108
「ループ」という言い方がおかしい。
ループで「実装」しているのであって
やっているのはなにかの「処理」だろう?
int func(int n){
ロック
処理
アンロック
return 結果;
}
「処理」という名前をつけたくなるならば、
そこは独立した関数にするべきだろう
「ループ」という言い方がおかしい。
ループで「実装」しているのであって
やっているのはなにかの「処理」だろう?
int func(int n){
ロック
処理
アンロック
return 結果;
}
「処理」という名前をつけたくなるならば、
そこは独立した関数にするべきだろう
111デフォルトの名無しさん
2019/12/16(月) 23:02:27.04ID:xr9KOlE0 double sigma(const double *a){
ループで総和と2乗和と数を計算
標準偏差を計算
return 標準偏差
}
ループで総和と2乗和と数を計算
標準偏差を計算
return 標準偏差
}
112デフォルトの名無しさん
2019/12/16(月) 23:04:47.03ID:xr9KOlE0 int func(int n){
int a[10] = {0};
ループ
aから値を計算
return 値
}
int a[10] = {0};
ループ
aから値を計算
return 値
}
113デフォルトの名無しさん
2019/12/16(月) 23:06:46.75ID:xr9KOlE0 いくらでも思い浮かぶ
114デフォルトの名無しさん
2019/12/16(月) 23:07:37.81ID:LjjtFzBx 全部関数に分けろって言われて終わりそう
115デフォルトの名無しさん
2019/12/16(月) 23:09:19.22ID:xr9KOlE0 分ける理由がない
116デフォルトの名無しさん
2019/12/16(月) 23:10:06.65ID:xr9KOlE0 >>112を分けてみて
117デフォルトの名無しさん
2019/12/16(月) 23:17:03.74ID:xr9KOlE0 関数分けってのは意味、機能、汎用性、...で分けるべきであって
単にループを抜けるのにreturnを使いたいから分けるとかを考えるべきじゃない
単にループを抜けるのにreturnを使いたいから分けるとかを考えるべきじゃない
118デフォルトの名無しさん
2019/12/16(月) 23:23:11.90ID:xr9KOlE0 素直にgotoの使い方を覚えた方が良いよ
意地はってないで
意地はってないで
119デフォルトの名無しさん
2019/12/16(月) 23:42:01.03ID:arH1mwfY120デフォルトの名無しさん
2019/12/16(月) 23:45:51.39ID:jL52ryYk gotoでもreturnでも読めれば良い
但し1関数50行以上は読めないんで宜しく
但し1関数50行以上は読めないんで宜しく
121デフォルトの名無しさん
2019/12/16(月) 23:48:10.14ID:arH1mwfY >>112
だから「ループ」と書くなっちゅうねんw
関数を設計するならこんな感じやろ?
int func(int n){
int a[10] = {0};
memset_random(a, sizeof(a)); // a配列をランダムな値で埋める
int chksum = chksum(a, sizeof(a)); // a配列のチェックサムを計算
return 値
}
関数の中でループしてようが何して用が関係ないわ
だから「ループ」と書くなっちゅうねんw
関数を設計するならこんな感じやろ?
int func(int n){
int a[10] = {0};
memset_random(a, sizeof(a)); // a配列をランダムな値で埋める
int chksum = chksum(a, sizeof(a)); // a配列のチェックサムを計算
return 値
}
関数の中でループしてようが何して用が関係ないわ
122デフォルトの名無しさん
2019/12/16(月) 23:55:19.85ID:xr9KOlE0 sizeof(a) とか書くレベルの相手してたのか
アホらしい
アホらしい
123デフォルトの名無しさん
2019/12/17(火) 00:04:36.92ID:JvBVW/sd124デフォルトの名無しさん
2019/12/17(火) 06:41:54.53ID:YMIUnRyv まあgotoあればbreakは要らんわなw
そんな言語は使いたくないけど
そんな言語は使いたくないけど
125デフォルトの名無しさん
2019/12/17(火) 07:00:38.11ID:JvBVW/sd gotoもbreakもいらないって
126デフォルトの名無しさん
2019/12/17(火) 07:10:23.36ID:JvBVW/sd gotoもbreakも無い
ループを抜けるときはreturn
switchを抜ける時もreturm
関数は単一の処理しか出来ない
こんな言語はイヤだね
ループを抜けるときはreturn
switchを抜ける時もreturm
関数は単一の処理しか出来ない
こんな言語はイヤだね
127デフォルトの名無しさん
2019/12/17(火) 07:23:38.89ID:JvBVW/sd 後に退けなくなったアホの作る言語
128デフォルトの名無しさん
2019/12/17(火) 07:39:52.35ID:odSFZTU+ gotoの使い方
http://www7b.biglobe.ne.jp/~robe/cpphtml/html03/cpp03005.html
http://www9.plala.or.jp/sgwr-t/c/sec06-6.html
http://tomeapp.jp/archives/1029
http://opencv.jp/opencv-2svn/c/core_utility_and_system_functions_and_macros.html
http://www7b.biglobe.ne.jp/~robe/cpphtml/html03/cpp03005.html
http://www9.plala.or.jp/sgwr-t/c/sec06-6.html
http://tomeapp.jp/archives/1029
http://opencv.jp/opencv-2svn/c/core_utility_and_system_functions_and_macros.html
129デフォルトの名無しさん
2019/12/17(火) 08:49:57.51ID:QeraReD1 たとえ相手がアホであっても、しつこく絡むのもまたアホだと思うんだが…
130デフォルトの名無しさん
2019/12/17(火) 12:33:06.04ID:vDeQfs2U 自分より下の人間を叩くしか能がないんだろ
ID:arH1mwfYなんてスルーでいいと思うんだがそれしか叩けないからいつまでたっても終わらないw
ID:arH1mwfYなんてスルーでいいと思うんだがそれしか叩けないからいつまでたっても終わらないw
131デフォルトの名無しさん
2019/12/17(火) 13:15:29.02ID:GBggCGQK 雑談スレだしネタも無いから良いんじゃね?
132デフォルトの名無しさん
2019/12/17(火) 18:32:11.83ID:x9hYOthl String型が無いって死ぬほど不便なんだが
133デフォルトの名無しさん
2019/12/17(火) 19:06:56.22ID:p6v4J1KY 他の言語を使ってください
134デフォルトの名無しさん
2019/12/17(火) 19:18:33.78ID:6LhBKKEf >>132
自分で似たようなものを作ればいいだろ。汎用的なものがあっても使い勝手や性能で何かしら不満が出るのだから、自分の要求に合致するものを自分で作りな。
自分で似たようなものを作ればいいだろ。汎用的なものがあっても使い勝手や性能で何かしら不満が出るのだから、自分の要求に合致するものを自分で作りな。
135デフォルトの名無しさん
2019/12/17(火) 20:52:31.46ID:QeraReD1 特定の用途においてローカルラベルが役に立つことも無くはないかもしれないな。
自分でそれをやるかどうかは別にして。
いずれにせよ、gcc では式の中で変数を宣言できるのだから
ローカルラベルが可能になっても驚かないよ。
自分でそれをやるかどうかは別にして。
いずれにせよ、gcc では式の中で変数を宣言できるのだから
ローカルラベルが可能になっても驚かないよ。
136132
2019/12/18(水) 23:56:34.28ID:9RDvo6To typedefを使用
https://pastebin.com/iX2DDpRA
https://pastebin.com/iX2DDpRA
137デフォルトの名無しさん
2019/12/19(木) 00:12:48.48ID:vqVcyk4J PHPはbreakにネスト数指定できるよな
138デフォルトの名無しさん
2019/12/19(木) 09:03:44.36ID:vjQjJ4nK C言語の開発者によるgoto文の使い方を対象とした実証研究の結果、「goto文は無害だと考えられる」
https://developers.srad.jp/story/15/02/14/2017207/
https://developers.srad.jp/story/15/02/14/2017207/
139デフォルトの名無しさん
2019/12/19(木) 16:51:03.60ID:86m15ms9 longjmp についても調査してほしいな。
特に例は挙げないが、誰もが使っているようなプログラムでも結構使われてる。
特に例は挙げないが、誰もが使っているようなプログラムでも結構使われてる。
140デフォルトの名無しさん
2019/12/19(木) 16:57:20.13ID:+cpLTGtZ static
141デフォルトの名無しさん
2019/12/25(水) 01:15:13.49ID:k3ZI/Zl3 >>139
それは代わりがない。
それは代わりがない。
142デフォルトの名無しさん
2020/07/09(木) 10:18:18.26ID:tNMImStE143デフォルトの名無しさん
2020/07/09(木) 10:22:15.80ID:vrNDocOm 発明って言うか当時はそれが普通だったろ
144デフォルトの名無しさん
2020/07/09(木) 10:51:31.74ID:I92CxMlL longjmpは「設計上のミス」ではないんでは。
むしろそういう動作をする目的で設計・導入されたように思えるけど
(longjmpに関するRationaleを読んでないので当てずっぽうw)
むしろそういう動作をする目的で設計・導入されたように思えるけど
(longjmpに関するRationaleを読んでないので当てずっぽうw)
145デフォルトの名無しさん
2020/07/09(木) 16:31:13.77ID:KHuqFwsC >>5
エスティーアールトゥーケー
エスティーアールトゥーケー
146デフォルトの名無しさん
2020/07/09(木) 21:58:30.04ID:Zo8nB2NL 例外は setjump、longjumpて実装されてるんじゃないのかな?
違うのかな?
違うのかな?
147デフォルトの名無しさん
2020/07/10(金) 22:03:48.37ID:AfLodKTd148デフォルトの名無しさん
2020/07/10(金) 22:26:03.98ID:U1HXCT7S returnが1変数しか対応していないこと。
ポインター祭りになって可読性がウンコになる
ポインター祭りになって可読性がウンコになる
149デフォルトの名無しさん
2020/07/10(金) 23:11:39.81ID:7RoGj1wV >>148
可読性がうんこなのはお前の能力が足りないから
可読性がうんこなのはお前の能力が足りないから
150デフォルトの名無しさん
2020/07/11(土) 00:22:05.38ID:UdJEarb2 いろんな言語たらい回しにされるって不幸だよね。
こういうノーガキ垂れる奴がウチの職場にいなくて良かった〜ヽ(´▽`)/
こういうノーガキ垂れる奴がウチの職場にいなくて良かった〜ヽ(´▽`)/
151デフォルトの名無しさん
2020/07/11(土) 10:50:20.85ID:J0INoyBc152デフォルトの名無しさん
2020/07/11(土) 12:01:47.31ID:2M7rjl8q153デフォルトの名無しさん
2020/07/11(土) 23:02:45.45ID:wT5X8b6q MASM もそうだけど、$ は実際にメモリに配置されるのですか?
それとも、db(アセンブラ命令)で長さを省略するためのものですか?
それとも、db(アセンブラ命令)で長さを省略するためのものですか?
154デフォルトの名無しさん
2020/07/11(土) 23:04:50.81ID:wT5X8b6q すみません、>>153 です
送信した瞬間に自分の発言の矛盾に気がつきました…
送信した瞬間に自分の発言の矛盾に気がつきました…
155デフォルトの名無しさん
2020/07/13(月) 19:12:30.84ID:Xa4f7njE156デフォルトの名無しさん
2020/07/13(月) 19:20:56.50ID:WBkWHxcT そっちは Not Found ですよ
http://www.nurs.or.jp/~sug/soft/super/longjmp.htm
http://www.nurs.or.jp/~sug/soft/super/longjmp.htm
>>156
ありがとうございます、昔に読んだのに URL を失ってしまって…ずっと探していたんです
ありがとうございます、昔に読んだのに URL を失ってしまって…ずっと探していたんです
158デフォルトの名無しさん
2020/07/13(月) 21:24:21.32ID:jVM2RLmn159デフォルトの名無しさん
2020/07/14(火) 09:59:19.87ID:obK0XQNS ありがとうございます。いや、longjmp をdisるような意図は無かったんだけど。
「シグナルとコールバック」も勉強になります。
http://www.nurs.or.jp/%7Esug/soft/super/signal.htm
この辺りは man を読んでも使い方が解りにくいので…
「シグナルとコールバック」も勉強になります。
http://www.nurs.or.jp/%7Esug/soft/super/signal.htm
この辺りは man を読んでも使い方が解りにくいので…
160デフォルトの名無しさん
2020/07/23(木) 11:48:35.85ID:3i8DjqKb _sが付いてるやつ使えよ
161デフォルトの名無しさん
2021/05/21(金) 17:59:38.38ID:lDwsy5iU 関数じゃないけどこれやろ
If the unsigned type has conversion rank greater than or equal to the rank of the signed type, then the operand with the signed type is implicitly converted to the unsigned type.
うんこ
If the unsigned type has conversion rank greater than or equal to the rank of the signed type, then the operand with the signed type is implicitly converted to the unsigned type.
うんこ
162デフォルトの名無しさん
2021/05/21(金) 18:32:54.36ID:lDwsy5iU プログラマを信じろと言うけどさ
じゃあ暗黙の型変換とか余計な節介やめてくれねーかな
じゃあ暗黙の型変換とか余計な節介やめてくれねーかな
163デフォルトの名無しさん
2021/05/21(金) 18:36:26.66ID:HkPQV5tP cでまともに算数出来れば一人前
164デフォルトの名無しさん
2021/07/18(日) 03:12:16.30ID:a6CF+eHw 暗黙が嫌なら明示しろよばかじゃないの?
165デフォルトの名無しさん
2023/01/02(月) 19:09:01.78ID:N1W2ThUk >>162
暗黙の型変換はワーニング出るようにできなかったっけ?
暗黙の型変換はワーニング出るようにできなかったっけ?
166デフォルトの名無しさん
2023/05/10(水) 10:41:52.89ID:zbvSAEuT167デフォルトの名無しさん
2023/08/04(金) 19:33:28.29ID:+XXFTri2 ken thompsonがcreat()の最後のeを省いたのは失敗だったと
直すとしたらそこを直したいと
直すとしたらそこを直したいと
168デフォルトの名無しさん
2023/09/27(水) 15:27:11.03ID:0JeuaQMM 失敗は成功への近道だと思って取り組んでみよう。
169デフォルトの名無しさん
2023/09/30(土) 09:21:33.38ID:z8ssgezC (”ロ”;)ゲゲッ!!
170デフォルトの名無しさん
2023/10/03(火) 12:21:18.69ID:QaeBAOHS 型省略でintと看做すのはミスだろ
171デフォルトの名無しさん
2023/10/04(水) 22:29:38.55ID:pmZG4qtZ172デフォルトの名無しさん
2023/10/05(木) 17:05:36.61ID:WXXGTjkD まんどくせ
173デフォルトの名無しさん
2023/10/05(木) 19:40:42.12ID:KP6Kmsv6 ポインタ渡し全般かな
174デフォルトの名無しさん
2023/10/05(木) 22:17:24.30ID:nm5oakcJ Cの型はある意味pythonより弱い
175デフォルトの名無しさん
2023/10/07(土) 11:48:43.75ID:QSI1NZ2Z ある意味というか、Pythonは一応強い型付けでしょ。
176デフォルトの名無しさん
2023/10/07(土) 11:51:33.89ID:SZDGKzpf Cに型なんかあって無い様なもんだしな
177デフォルトの名無しさん
2023/10/07(土) 17:38:41.59ID:2aizzJpQ178デフォルトの名無しさん
2023/10/08(日) 10:11:26.30ID:CrdCteTP >>176
Cはアセンブラで言うところのアドレッシングが充実
Cはアセンブラで言うところのアドレッシングが充実
179デフォルトの名無しさん
2023/10/09(月) 15:00:06.76ID:gMk1hFfQ マクロが真っ黒
180デフォルトの名無しさん
2023/10/15(日) 02:11:48.65ID:LZ9c8wO/ ∑(ノ▼ο▼)ノ オォオォオ!!
181デフォルトの名無しさん
2023/10/16(月) 09:47:48.72ID:kgcCjrnK DDoS回避したみたいね
182デフォルトの名無しさん
2023/10/17(火) 11:44:25.59ID:xDsy3kB7 atan
(atan2の方じゃなくて)
(atan2の方じゃなくて)
183デフォルトの名無しさん
2023/10/18(水) 07:26:03.37ID:rpmqe4zi くせの強いscanf()とか
184デフォルトの名無しさん
2023/10/18(水) 07:26:15.66ID:rpmqe4zi くせの強いscanf()とか
185デフォルトの名無しさん
2023/10/18(水) 14:31:46.14ID:UTD5vf1X visual studioでscanf()使ったらエラーになった
186デフォルトの名無しさん
2023/10/18(水) 14:31:57.74ID:UTD5vf1X visual studioでscanf()使ったらエラーになった
187デフォルトの名無しさん
2023/10/20(金) 09:24:01.14ID:/M3RKJCH free()
188デフォルトの名無しさん
2023/12/15(金) 15:34:51.20ID:dazO4Xak sprintf()
189デフォルトの名無しさん
2023/12/17(日) 07:31:47.54ID:9k4gJxXV fopen()
190デフォルトの名無しさん
2023/12/17(日) 08:12:54.14ID:9k4gJxXV ctime()
191デフォルトの名無しさん
2023/12/31(日) 16:48:51.59ID:vzW4N1bb fopen
192デフォルトの名無しさん
2024/01/06(土) 17:10:43.88ID:3kEfHLiK strtok
193デフォルトの名無しさん
2024/02/01(木) 07:45:39.19ID:aKV2ok3G freopen()
194デフォルトの名無しさん
2024/02/01(木) 10:15:46.72ID:oHnzHX84 アセンブラの補助言語に何期待してスレ立ててんだかw
195デフォルトの名無しさん
2024/03/16(土) 16:31:48.55ID:YyexUT5o tmpnam()
196デフォルトの名無しさん
2024/04/02(火) 13:56:34.07ID:OXdmWprY getenv
197デフォルトの名無しさん
2024/04/02(火) 20:32:38.29ID:yb6rvSIG 知ってる関数を並べるスレ
それにしても知らな過ぎるけどw
それにしても知らな過ぎるけどw
198デフォルトの名無しさん
2024/04/08(月) 01:34:00.49ID:BIzdd6FB C言語自体が設計ミス
199デフォルトの名無しさん
2024/04/19(金) 05:42:28.44ID:uD5nyH4z C言語はUNIXを作るために作ったんだから、それを流用したせいで、アプリケーションの作成には合わないところがあるのは当然。
200デフォルトの名無しさん
2024/04/20(土) 15:12:18.54ID:CogYy1zn https://ja.wikipedia.org/?curid=1022
「UNIXを開発するためにC言語が作り出された」と言われることがあるが、「The Development of the C Language」によると、これは正しくなく、経緯は以下の通りである。
C言語は、当初はあくまでもOS上で動くユーティリティを作成する目的で作り出されたものであり、OSのカーネルを記述するために使われるようになるのは後の展開である。
「UNIXを開発するためにC言語が作り出された」と言われることがあるが、「The Development of the C Language」によると、これは正しくなく、経緯は以下の通りである。
C言語は、当初はあくまでもOS上で動くユーティリティを作成する目的で作り出されたものであり、OSのカーネルを記述するために使われるようになるのは後の展開である。
201デフォルトの名無しさん
2024/10/02(水) 13:09:25.40ID:XbzwGALZ char *a と char a[] を関数の引数でも一緒にしてしまったところ
202デフォルトの名無しさん
2024/10/04(金) 12:11:23.07ID:swUgCMz+ >>201
そこは長所では・・・?
そこは長所では・・・?
203デフォルトの名無しさん
2024/10/04(金) 13:36:09.69ID:RixEjMnj 長所だらけで困るわ
204デフォルトの名無しさん
2024/10/06(日) 00:28:28.16ID:k+hD1Cqq 配列からポインタへの暗黙の変換があるんだから型としては別で良かったんだよ
おかげで配列全体の値渡しや代入ができなくなってしまった
おかげで配列全体の値渡しや代入ができなくなってしまった
205デフォルトの名無しさん
2024/10/06(日) 00:39:07.43ID:MZAtOKFs 無意識にそんなムダなことやられても困る
mallocとか使って明示的にやれるからいいだろ
mallocとか使って明示的にやれるからいいだろ
206デフォルトの名無しさん
2024/10/06(日) 12:12:21.53ID:onWt8ZIM 値で渡したかったら構造体で包めばいいし
逆に配列を値渡しするような言語って少ないんじゃないの
参照渡しするのばっかりだろ
逆に配列を値渡しするような言語って少ないんじゃないの
参照渡しするのばっかりだろ
207デフォルトの名無しさん
2024/10/06(日) 13:06:18.36ID:k+hD1Cqq 一貫性のない型があるとジェネリクスに支障が出る
C++はそれですごい苦労した挙句std::arrayみたいな馬鹿みたいなものができた
C++はそれですごい苦労した挙句std::arrayみたいな馬鹿みたいなものができた
208デフォルトの名無しさん
2024/10/07(月) 10:27:10.86ID:1tKKan7C >>206
結局フレキシブル構造体が仕様として認められてる以上、実体渡しも信用ならんのよ
struct chinko{
int a;
char b[0];
};
gccならこんなうんちもある
struct unko{
int a[0];
char b[0];
};
結局フレキシブル構造体が仕様として認められてる以上、実体渡しも信用ならんのよ
struct chinko{
int a;
char b[0];
};
gccならこんなうんちもある
struct unko{
int a[0];
char b[0];
};
209デフォルトの名無しさん
2024/12/13(金) 17:18:33.74ID:cICuvaCO C++で気をつけなければならないのは
size_t i=10;
double x=3-i;
十分地獄を堪能できる。C言語もunsigned int使えば同じか
size_t i=10;
double x=3-i;
十分地獄を堪能できる。C言語もunsigned int使えば同じか
EchoAPIをVS Codeで使い始めてから、開発プロセスが大きく変わった
211デフォルトの名無しさん
2024/12/21(土) 10:57:59.51ID:bIHzWCsd strlen
212デフォルトの名無しさん
2024/12/21(土) 17:09:02.79ID:SDOaO/8s シュトーレン
213デフォルトの名無しさん
2024/12/22(日) 22:33:54.16ID:63BRvCCZ fork;execvp
214デフォルトの名無しさん
2024/12/29(日) 07:02:35.25ID:pX0TYs46 C言語には、組み込み関数なんてmainしか無いと思うなあ。
215デフォルトの名無しさん
2024/12/29(日) 10:09:42.10ID:Jnwqtt+s 面倒くさいからPOSIXは組込み扱いでいいよ
レスを投稿する
ニュース
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 経団連会長、日中は建設的対話を 経済3団体が高市首相と初会談も日中関係は話題に登らず… [BFU★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- 東京株式市場 インバウンド関連株が下落 中国政府の渡航自粛要請で [バイト歴50年★]
- 泣ける画像
- 有識者「高市総理が発言を撤回したり、辞職するしかないと言っている人は、それで日中関係が今まで通りになると思ってる?」 [834922174]
- 戦争は無くならないし殺人は起きるし女はレイプされるし子供は餓死するし
- 女性検診なんでオナニーしてグチョグチョで行ってやる
- 日経時間外、5万円割れ 垂直落下始まる [402859164]
- ( ´・ω・` )朝ですぞー
