C言語の設計ミスった危険な関数トップ10決めようぜ
0007デフォルトの名無しさん
垢版 |
2019/11/23(土) 04:11:30.09ID:l4WHmfnE
最大のミスは、文字列そのものをデータ型としては持たずに、
文字列はヌルで終端された不定長の文字の配列であるとしたことにある。
0012デフォルトの名無しさん
垢版 |
2019/11/26(火) 12:29:09.20ID:dAEqoOXB
scanf
strtok
feof
0013デフォルトの名無しさん
垢版 |
2019/11/26(火) 20:24:02.10ID:feqSm/53
C言語の関数名ってまだリンカがシンボルの先頭から6文字までしか認識しなかった頃の名残だしな
変な短縮形が多い
0014デフォルトの名無しさん
垢版 |
2019/11/27(水) 03:05:40.28ID:nQw9n1Di
strcpy()とか意図しようがしまいが簡単にメモリをぶっ壊せる
よくよく考えるとキチガイ過ぎる
0016デフォルトの名無しさん
垢版 |
2019/11/27(水) 12:31:41.61ID:KtqS+hCI
time
localtime
0018デフォルトの名無しさん
垢版 |
2019/11/27(水) 13:50:48.05ID:pAkxzJaX
>>15
根本的な所を勘違いしてる。

C言語で安全性が求められないからと言って、
C言語で作ったアプリには安全性は求められるだろ?

例えば、getsは安全に使うことが不可能なんだよ。
0021デフォルトの名無しさん
垢版 |
2019/11/30(土) 20:38:28.97ID:4Da+M2q+
>>18
> 例えば、getsは安全に使うことが不可能なんだよ。
ならgetsを使わずにgetcでやればいいだけ
0026デフォルトの名無しさん
垢版 |
2019/12/01(日) 13:17:11.11ID:W5IIwakz
組み込みで文字列扱わないことも多いね。
どんな製品でもほぼ使うのはmemset、memcpy、memcmpぐらいじゃない?
0027デフォルトの名無しさん
垢版 |
2019/12/01(日) 17:41:11.15ID:YWi4MX0G
>>25

>>1のリンク先より

未チェックの時代遅れの関数
以下の関数を、未チェックの時代遅れの関数と定義する。
memcpy, strcpy, strncpy, strcat, strncat (一部抜粋)


半分あてはまってるなw

>>26
memcpyは危険なので使うのはやめましょう
0032デフォルトの名無しさん
垢版 |
2019/12/02(月) 02:04:59.50ID:AAYR8Yqw
>>1
セキュリティ考慮していない元関数より、代替関数の設計ミスが酷いな

strtodとかなにこれw
エラーの返し方がアホすぎる
0033デフォルトの名無しさん
垢版 |
2019/12/02(月) 06:48:47.55ID:kJrDK+4B
>>32
> strtodとかなにこれw
> エラーの返し方がアホすぎる
そう言うのは改善案を提案しないと単なるアホの独り言にしかならんぞw
0034デフォルトの名無しさん
垢版 |
2019/12/02(月) 13:15:48.70ID:EYnQFBh2
一体どういう考えで昔の人は、getsの仕様はあれでOKだと思ったんだろう?
どう考えてもバッファオーバーフローするやん?
しない方法なんて存在するの?
0035デフォルトの名無しさん
垢版 |
2019/12/02(月) 13:18:13.53ID:xJykAg3Z
バッファオーバーフローしないデータを食わせれば良い
わざわざ変なデータを入力するヤツが悪い

って考えの時代の関数だ
0040デフォルトの名無しさん
垢版 |
2019/12/02(月) 20:50:15.44ID:kJrDK+4B
>>36
1行80文字とかって決め打ちできる環境なんでしょ
自分しか使わないようなツールとかならこれで十分
って考え
0041デフォルトの名無しさん
垢版 |
2019/12/03(火) 01:51:02.34ID:dBsSbed7
8ビットの整数型を char などというものにしたのも、アメリカ人は
自分たちの英語しか知らない田舎者であることを如実に表している。
0042デフォルトの名無しさん
垢版 |
2019/12/03(火) 09:14:31.49ID:yN5r9ueQ
>>40
64kbでも広大な空間だったな
0043デフォルトの名無しさん
垢版 |
2019/12/03(火) 12:22:07.21ID:90Sp73uq
>>41
実に田舎者の考え方で笑える
逆だよ、都会の人間は都会のことしか知らないし知る必要がない
なぜか田舎の人間は都会のことも知ろうとするw
0044デフォルトの名無しさん
垢版 |
2019/12/03(火) 12:29:35.88ID:Uh1tIUQA
> 逆だよ、都会の人間は都会のことしか知らないし知る必要がない
だから世界が狭くて無知になりやすい

> なぜか田舎の人間は都会のことも知ろうとするw
だから世界が広い
0045デフォルトの名無しさん
垢版 |
2019/12/03(火) 12:51:15.68ID:dBsSbed7
井の中の蛙 大海を知らず
されど空の蒼さを知る
0046デフォルトの名無しさん
垢版 |
2019/12/03(火) 13:25:13.55ID:g2sdmHcp
C言語が出来た時の時代を考えれば十分

「変数名に日本語が使えない言語は糞」
って時代もそのうち来るよ
0047デフォルトの名無しさん
垢版 |
2019/12/03(火) 19:14:24.81ID:90Sp73uq
>>44
残念ながらそうはなってないんだなw
狭く深くっていう世界だから
要するに田舎でな何をするにもオーバーヘッドが大きいってことな
今はネットでだいぶマシになったけどネット以前の情報収集考えたらアホでもわかる話
0050デフォルトの名無しさん
垢版 |
2019/12/11(水) 06:55:08.36ID:IbA4V9X0
>>46
メモリが640kバイトしか使えなかった頃からのものだしな
0052デフォルトの名無しさん
垢版 |
2019/12/11(水) 15:20:43.27ID:JkExA39E
大昔って端末やエディタなんかでも1行256とか1024バイト程度しか扱えなかったばず
0053デフォルトの名無しさん
垢版 |
2019/12/11(水) 15:32:22.68ID:8OP/pbId
256 の時代は割と長かった希ガス
0054デフォルトの名無しさん
垢版 |
2019/12/13(金) 06:37:32.10ID:o1f1J6fH
昔は1行の長さを先に決めてファイルをクリエイトしました
途中で変更はできません
0055デフォルトの名無しさん
垢版 |
2019/12/14(土) 13:26:55.02ID:TlZt0bii
関数そのものじゃないが
breakにラベル指定出来なかったのは設計ミスやろ
0057デフォルトの名無しさん
垢版 |
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;
  }
}
0061デフォルトの名無しさん
垢版 |
2019/12/15(日) 09:51:38.77ID:5sPbacoo
ネストの数がわからないような巨大な構造は
それだけで最低だ
そんなんだと名前付きループにした所で
@outerなんて名前が使い回されて
同じ名前のループがネストされて
それこそ難読コードになる
それならユニークなラベルによるgotoの方が良い

>>57くらいのループなら
break 2;
は名前を考える手間が無くて楽だし
見にくくもない
0062デフォルトの名無しさん
垢版 |
2019/12/15(日) 09:57:28.64ID:5sPbacoo
とは書いたけど
どっちも有るならどっちも欲しい

どっちかだけげならbreak 2;の方が欲しい
って感じ
0063デフォルトの名無しさん
垢版 |
2019/12/15(日) 10:52:04.89ID:6aWNd1w0
>>61
> そんなんだと名前付きループにした所で
> @outerなんて名前が使い回されて
> 同じ名前のループがネストされて
> それこそ難読コードになる
無能の妄想w
0064デフォルトの名無しさん
垢版 |
2019/12/15(日) 11:05:09.82ID:5sPbacoo
ループの先頭、ループの終わり、break部分
3箇所見ないとダメってだけでダメな仕様
0065デフォルトの名無しさん
垢版 |
2019/12/15(日) 12:32:17.60ID:bDjAMWVj
>>64
なぜか自分の前提は
> >>57くらいのループなら
なのにラベルにした途端にループの頭とbreakとループの終わりが一瞥でわからないとかアホすぎ
0068デフォルトの名無しさん
垢版 |
2019/12/15(日) 13:48:44.02ID:o9m7qUoD
>>60
ネスト変わるような変更あるたびにbreakの引数勝手に書き換えてくれるエディタとかマクロが流行る
0070デフォルトの名無しさん
垢版 |
2019/12/15(日) 16:52:03.21ID:u46gpj2V
歪んだ教育のせいで
gotoに拒絶反応を示す人が多いんだよな

2重ループを抜けるなら素直にgotoを使えって
0071デフォルトの名無しさん
垢版 |
2019/12/15(日) 16:53:29.68ID:pTp+dpJs
アセンブラの
jmp 1f
とかを C でやりたいという話なのか?
やってみりゃいいじゃん。プリプロセッサの出力を処理すればいい。
1 パスで出来ると思うよ。
ひょっとしてもう誰かがやってるかも。
0072デフォルトの名無しさん
垢版 |
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:;
0073デフォルトの名無しさん
垢版 |
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:;
0075デフォルトの名無しさん
垢版 |
2019/12/16(月) 09:05:52.89ID:AI1GDY0I
ラベルのスコープを狭くしたいという話のようだから
マクロの中で使ってこそ真価を発揮するんじゃないかな。
フル仕様のパースが必要というわけではなく、かなり手抜きできそうではある。
あれば便利というのは否定しないが、C でそこまで必要かというと…
0076デフォルトの名無しさん
垢版 |
2019/12/16(月) 12:33:03.93ID:0jmxiGrg
{
goto hoge;
hoge:;
}
{
goto hoge;
hoge:;
}
これで二重になってたら困るしある意味なってなくても困るな
0077デフォルトの名無しさん
垢版 |
2019/12/16(月) 13:21:05.83ID:ZZ8St2Js
マクロで二重以上のループってのもなかなか考えづらいなあ

一応、ラベル名をパラメータとする手もある

使う側のコストを考えるとgotoの為にパラメータを増やさないよな
gotoを使わない主義者がよくやってるように
余分な変数を使って実装するんだろうね
0078デフォルトの名無しさん
垢版 |
2019/12/16(月) 13:23:11.26ID:ZZ8St2Js
アセンブラだとマクロローカルラベルってのがあったりする
ラベルを頻繁に使うので

あと
@@/@b/@fのように、
直近のラベルを指定する仕組みもある
0079デフォルトの名無しさん
垢版 |
2019/12/16(月) 13:28:49.41ID:ZZ8St2Js
>>72 >>73 みたいなのって
gotoの使いどころだと思うんだけだ
gotoを使わない人はどう書いてるの?

特に >>57 の答えを聞いてみたい
0080デフォルトの名無しさん
垢版 |
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");
0082デフォルトの名無しさん
垢版 |
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");
0083デフォルトの名無しさん
垢版 |
2019/12/16(月) 16:55:03.26ID:arH1mwfY
"短い処理"をいちいち関数にしなくて済むから、break 2とかはあってもいいが、
長い処理は関数にしてないとろくにテストできないんだからgotoなんていらない
0085デフォルトの名無しさん
垢版 |
2019/12/16(月) 19:09:09.12ID:lsrBHsJG
gotoの基本的な使い方くらい知っておいた方が良いかと
ループを抜ける為だけに関数を分けないといけなくなるし
挙げ句の果てに言語の欠陥とか言い出す
0086デフォルトの名無しさん
垢版 |
2019/12/16(月) 20:06:51.00ID:3ha1TSe5
今のC言語ではネストしたループから抜けるのはフラグを使うかgotoしかないからたいていgoto使ってるけどgotoなんて野蛮なものはできたら使いたくないから他の言語で実装されてるラベル付きbreakなりレベル付きbreakが欲しいって話だろ
今更gotoの基本的な使い方ガーとか言ってる奴はどんだけ低レベルなんだよw
0088デフォルトの名無しさん
垢版 |
2019/12/16(月) 20:21:09.65ID:xr9KOlE0
gotoは野蛮とかいう歪んだ教育のせいで
わざわざ変数を定義したりわざわざ関数を分けたりして
わざわざ見にくいコードにしちゃう

生でポインタを扱う野蛮なC言語なんか使わないで
上品な言語を使った方が良いよ
0090デフォルトの名無しさん
垢版 |
2019/12/16(月) 20:47:58.36ID:LjjtFzBx
自分は小規模な字句解析みたいなのでもgoto使うことがある。
ラベルで状態を表してgotoで遷移する。
goto使わなかったら状態を変数に入れて、
ループの中でswitchで場合分けするようなコードになって辛い。
0094デフォルトの名無しさん
垢版 |
2019/12/16(月) 22:12:14.62ID:arH1mwfY
>>87
returnで抜けるためというか、

1. gotoで抜けたい
2. 関数にするか
3. あ、そもそもコードが複雑なんだな
4. 関数にして正解だった

こんな感じかな。

gotoで抜けたいと思う=コードが複雑になってるという警鐘だと思ってる。
0095デフォルトの名無しさん
垢版 |
2019/12/16(月) 22:22:18.57ID:xr9KOlE0
>>82みたいな意味不明な関数の分け方をすると
>>57は、より複雑な記述をしたいっていう主張だし

gotoに親を殺された人の言うことは支離滅裂
理由が後付けだからそうなる
0096デフォルトの名無しさん
垢版 |
2019/12/16(月) 22:27:34.28ID:arH1mwfY
> で>>82みたいな意味不明な関数の分け方をすると

なんで意味不明?
そもそもその処理に意味をもたせてから言おうよw
処理に意味をもたせると、関数にしたほうが良いと思うからさ
0097デフォルトの名無しさん
垢版 |
2019/12/16(月) 22:32:01.57ID:arH1mwfY
> 理由が後付けだからそうなる

質問の方が先なのに、理由を先に言えるわけがないw

Q. 多重ループから抜けるのに、gotoは必要ですか?
A. 必要ありません。多重ループが必要になるぐらい複雑なら関数にしますから


これが普通だから、後付にはならないよね。
0103デフォルトの名無しさん
垢版 |
2019/12/16(月) 22:42:13.32ID:xr9KOlE0
話を戻して

・ループを抜けた後に関数の後処理が必要な場合
・ループを抜けた後にローカル変数を使った処理をする場合
・他、意味的に関数内で処理したい場合

はどうするの?
0104デフォルトの名無しさん
垢版 |
2019/12/16(月) 22:44:03.17ID:arH1mwfY
> ・ループを抜けた後に関数の後処理が必要な場合
前処理を関数の中でするな

> ・ループを抜けた後に関数の後処理が必要な場合
戻り値を返せ

>・他、意味的に関数内で処理したい場合
自分で具体例が思いつかないなら出すな
0105デフォルトの名無しさん
垢版 |
2019/12/16(月) 22:45:01.13ID:arH1mwfY
コピペミスったな

>・ループを抜けた後にローカル変数を使った処理をする場合
戻り値を返せ
0107デフォルトの名無しさん
垢版 |
2019/12/16(月) 22:52:22.49ID:arH1mwfY
>>106
なにが?

ってか、もう少し具体例を書けよ。
それみれば設計がおかしいという結論になる

例えて言うなら、パーサーの処理の中でネットワークにアクセスしたい時困るから
ネットワークモジュールはグローバルにアクセスできるようにしておくべき
みたいなことを言ってるようなもんだよ。それは設計がおかしい。
0110デフォルトの名無しさん
垢版 |
2019/12/16(月) 22:58:13.41ID:arH1mwfY
>>108
「ループ」という言い方がおかしい。
ループで「実装」しているのであって
やっているのはなにかの「処理」だろう?


int func(int n){
ロック
処理
アンロック
return 結果;
}


「処理」という名前をつけたくなるならば、
そこは独立した関数にするべきだろう
0111デフォルトの名無しさん
垢版 |
2019/12/16(月) 23:02:27.04ID:xr9KOlE0
double sigma(const double *a){
ループで総和と2乗和と数を計算
標準偏差を計算
return 標準偏差
}
0117デフォルトの名無しさん
垢版 |
2019/12/16(月) 23:17:03.74ID:xr9KOlE0
関数分けってのは意味、機能、汎用性、...で分けるべきであって
単にループを抜けるのにreturnを使いたいから分けるとかを考えるべきじゃない
0119デフォルトの名無しさん
垢版 |
2019/12/16(月) 23:42:01.03ID:arH1mwfY
>>118
だから意味とか汎用性とかで分けると
自然にループに抜けるときにreturnを使えば良くなるんだよ
0121デフォルトの名無しさん
垢版 |
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 値
}

関数の中でループしてようが何して用が関係ないわ
0126デフォルトの名無しさん
垢版 |
2019/12/17(火) 07:10:23.36ID:JvBVW/sd
gotoもbreakも無い
ループを抜けるときはreturn
switchを抜ける時もreturm
関数は単一の処理しか出来ない

こんな言語はイヤだね
0130デフォルトの名無しさん
垢版 |
2019/12/17(火) 12:33:06.04ID:vDeQfs2U
自分より下の人間を叩くしか能がないんだろ
ID:arH1mwfYなんてスルーでいいと思うんだがそれしか叩けないからいつまでたっても終わらないw
0134デフォルトの名無しさん
垢版 |
2019/12/17(火) 19:18:33.78ID:6LhBKKEf
>>132
自分で似たようなものを作ればいいだろ。汎用的なものがあっても使い勝手や性能で何かしら不満が出るのだから、自分の要求に合致するものを自分で作りな。
0135デフォルトの名無しさん
垢版 |
2019/12/17(火) 20:52:31.46ID:QeraReD1
特定の用途においてローカルラベルが役に立つことも無くはないかもしれないな。
自分でそれをやるかどうかは別にして。
いずれにせよ、gcc では式の中で変数を宣言できるのだから
ローカルラベルが可能になっても驚かないよ。
0137デフォルトの名無しさん
垢版 |
2019/12/19(木) 00:12:48.48ID:vqVcyk4J
PHPはbreakにネスト数指定できるよな
0139デフォルトの名無しさん
垢版 |
2019/12/19(木) 16:51:03.60ID:86m15ms9
longjmp についても調査してほしいな。
特に例は挙げないが、誰もが使っているようなプログラムでも結構使われてる。
0140デフォルトの名無しさん
垢版 |
2019/12/19(木) 16:57:20.13ID:+cpLTGtZ
static
0143デフォルトの名無しさん
垢版 |
2020/07/09(木) 10:22:15.80ID:vrNDocOm
発明って言うか当時はそれが普通だったろ
0144デフォルトの名無しさん
垢版 |
2020/07/09(木) 10:51:31.74ID:I92CxMlL
longjmpは「設計上のミス」ではないんでは。
むしろそういう動作をする目的で設計・導入されたように思えるけど
(longjmpに関するRationaleを読んでないので当てずっぽうw)
0148デフォルトの名無しさん
垢版 |
2020/07/10(金) 22:26:03.98ID:U1HXCT7S
returnが1変数しか対応していないこと。

ポインター祭りになって可読性がウンコになる
0150デフォルトの名無しさん
垢版 |
2020/07/11(土) 00:22:05.38ID:UdJEarb2
いろんな言語たらい回しにされるって不幸だよね。

こういうノーガキ垂れる奴がウチの職場にいなくて良かった〜ヽ(´▽`)/
0151デフォルトの名無しさん
垢版 |
2020/07/11(土) 10:50:20.85ID:J0INoyBc
>>147
OSのAPIは文字数じゃなくて
文字列byte列+デリミタ'$'
みたいなのが多かったぞ
0152デフォルトの名無しさん
垢版 |
2020/07/11(土) 12:01:47.31ID:2M7rjl8q
>>151
それはCP/Mの文字列出力がそうなっていただけ
入力はC言語のfgets()なんかみたいにデリミタの '$' を付加したりしないよ
0153デフォルトの名無しさん
垢版 |
2020/07/11(土) 23:02:45.45ID:wT5X8b6q
MASM もそうだけど、$ は実際にメモリに配置されるのですか?
それとも、db(アセンブラ命令)で長さを省略するためのものですか?
0156デフォルトの名無しさん
垢版 |
2020/07/13(月) 19:20:56.50ID:WBkWHxcT
そっちは Not Found ですよ
http://www.nurs.or.jp/~sug/soft/super/longjmp.htm
0157◆QZaw55cn4c
垢版 |
2020/07/13(月) 20:53:25.68ID:p7kPKe7n
>>156
ありがとうございます、昔に読んだのに URL を失ってしまって…ずっと探していたんです
0161デフォルトの名無しさん
垢版 |
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.
うんこ
0162デフォルトの名無しさん
垢版 |
2021/05/21(金) 18:32:54.36ID:lDwsy5iU
プログラマを信じろと言うけどさ
じゃあ暗黙の型変換とか余計な節介やめてくれねーかな
0166デフォルトの名無しさん
垢版 |
2023/05/10(水) 10:41:52.89ID:zbvSAEuT
>>138
まとめがおかしい
啓蒙活動の結果gotoの有害な使い方は極めて少なくなった
というべきだろう
0167デフォルトの名無しさん
垢版 |
2023/08/04(金) 19:33:28.29ID:+XXFTri2
ken thompsonがcreat()の最後のeを省いたのは失敗だったと
直すとしたらそこを直したいと
0171デフォルトの名無しさん
垢版 |
2023/10/04(水) 22:29:38.55ID:pmZG4qtZ
>>170
K&Rの頃との互換性の為じゃないかな。

Cは、兎に角モノグサの為の様な仕様が多いよね。
一度馴染むと、BASICですら面倒くさい。
0172デフォルトの名無しさん
垢版 |
2023/10/05(木) 17:05:36.61ID:WXXGTjkD
まんどくせ
0173デフォルトの名無しさん
垢版 |
2023/10/05(木) 19:40:42.12ID:KP6Kmsv6
ポインタ渡し全般かな
0174デフォルトの名無しさん
垢版 |
2023/10/05(木) 22:17:24.30ID:nm5oakcJ
Cの型はある意味pythonより弱い
0176デフォルトの名無しさん
垢版 |
2023/10/07(土) 11:51:33.89ID:SZDGKzpf
Cに型なんかあって無い様なもんだしな
0177デフォルトの名無しさん
垢版 |
2023/10/07(土) 17:38:41.59ID:2aizzJpQ
>>1
fgets知らんのかな
getsなんて使わない
どうしても使う時はfgets(buf,size,stdin)とすればいいだけ
0178デフォルトの名無しさん
垢版 |
2023/10/08(日) 10:11:26.30ID:CrdCteTP
>>176
Cはアセンブラで言うところのアドレッシングが充実
0179デフォルトの名無しさん
垢版 |
2023/10/09(月) 15:00:06.76ID:gMk1hFfQ
マクロが真っ黒
0181デフォルトの名無しさん
垢版 |
2023/10/16(月) 09:47:48.72ID:kgcCjrnK
DDoS回避したみたいね
0182デフォルトの名無しさん
垢版 |
2023/10/17(火) 11:44:25.59ID:xDsy3kB7
atan
(atan2の方じゃなくて)
0183デフォルトの名無しさん
垢版 |
2023/10/18(水) 07:26:03.37ID:rpmqe4zi
くせの強いscanf()とか
0184デフォルトの名無しさん
垢版 |
2023/10/18(水) 07:26:15.66ID:rpmqe4zi
くせの強いscanf()とか
0185デフォルトの名無しさん
垢版 |
2023/10/18(水) 14:31:46.14ID:UTD5vf1X
visual studioでscanf()使ったらエラーになった
0186デフォルトの名無しさん
垢版 |
2023/10/18(水) 14:31:57.74ID:UTD5vf1X
visual studioでscanf()使ったらエラーになった
0187デフォルトの名無しさん
垢版 |
2023/10/20(金) 09:24:01.14ID:/M3RKJCH
free()
0188デフォルトの名無しさん
垢版 |
2023/12/15(金) 15:34:51.20ID:dazO4Xak
sprintf()
0189デフォルトの名無しさん
垢版 |
2023/12/17(日) 07:31:47.54ID:9k4gJxXV
fopen()
0190デフォルトの名無しさん
垢版 |
2023/12/17(日) 08:12:54.14ID:9k4gJxXV
ctime()
0191デフォルトの名無しさん
垢版 |
2023/12/31(日) 16:48:51.59ID:vzW4N1bb
fopen
0192デフォルトの名無しさん
垢版 |
2024/01/06(土) 17:10:43.88ID:3kEfHLiK
strtok
0193デフォルトの名無しさん
垢版 |
2024/02/01(木) 07:45:39.19ID:aKV2ok3G
freopen()
0195デフォルトの名無しさん
垢版 |
2024/03/16(土) 16:31:48.55ID:YyexUT5o
tmpnam()
0196デフォルトの名無しさん
垢版 |
2024/04/02(火) 13:56:34.07ID:OXdmWprY
getenv
0199デフォルトの名無しさん
垢版 |
2024/04/19(金) 05:42:28.44ID:uD5nyH4z
C言語はUNIXを作るために作ったんだから、それを流用したせいで、アプリケーションの作成には合わないところがあるのは当然。
0200デフォルトの名無しさん
垢版 |
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のカーネルを記述するために使われるようになるのは後の展開である。
レスを投稿する


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