C言語なら俺に聞け 161 at TECH
[2ch|▼Menu]
204:デフォルトの名無しさん
23/06/06 21:43:27.13 t5k+pzJSM.net
switchは良くないと思うよ
利用側でそれぞれの型用に別々の関数を書いて使う人が使い分ける感じじゃないかな
それこそ知らんけどレベルで申し訳ないが

205:デフォルトの名無しさん
23/06/06 22:36:35.79 QLr+SdPOd.net
>>203
毎回関数を作る
だってリングバッファだぞ
目をつぶっていても作れるぞw

206:デフォルトの名無しさん
23/06/07 07:49:00.73 uhVmgr37a.net
>>203
お手本の定番は qsort() だろ

207:デフォルトの名無しさん
23/06/07 08:29:44.13 MtVH7DHg0.net
>>205
そういうのはライブラリ化しておくべき

208:デフォルトの名無しさん
23/06/07 09:26:39.45 PykR7vOnd.net
fread(void *buf, size_t size, size_t n, …
の順もあれば
qsort(void *base, size_t num, size_t size, …
の順もあって
行き当たりばったり感

209:デフォルトの名無しさん
23/06/07 12:34:45.81 hQs7a5Jyd.net
>>207
じゃあ、ほい
struct CUE{
int size;
int max;
int inp;
int out;
char buf[1];
};
struct CUE *create_cue(int size, int max)
{
struct CUE *cue =malloc(sizeof(struct CUE)+size*max);
if(cue){
cue->size=size;
cue->max=max;
cue->inp=cue->out=0
}
return cue;
}
int cue_get(struct CUE *cue, void*data)
{
if( cue->inp ==cue->out )
return 0;//buffer empty
memcpy(data,&cue->buf[cue->out* cue->size],cue->size);
if(++cue->out>=cue->max) cue->out=0;
return 1;
}
int cue_add(struct CUE *cue, void*newdata)
{
int index = cue->inp;
if(++index>=cue->max) index=0;
if( index ==cue->out ) return 0;//buffer full
memcpy(&cue->buf[cue->inp* cue->size],newdata,cue->size);
cue->inp=index;
return 1;
}
目をつぶって作ったのでバグがあっても知らない
要するにこういうことでしょ
他の人が言ってるように型チェックがまったく働かないので俺は使いたくない

210:デフォルトの名無しさん (スッップ Sda2-NC7J)
23/06/07 13:05:36.32 xTW5tL3jd.net
memcpyは余計だな。ポインタを返して後は使用者(自分)に委ねるね俺は

211:デフォルトの名無しさん
23/06/07 14:05:23.13 lsOQP3og0.net
見てないけどCUEって時点でもう程度が知れる

212:デフォルトの名無しさん
23/06/07 15:08:50.29 hYVl7Kw10.net
重箱の鬼の首をとる応用例
・(Perlを)Pearl って時点でもう程度が知れる
・(Daemon を)Demon って時点でもう程度が知れる

213:デフォルトの名無しさん
23/06/07 16:05:48.27 e1NBMLRC0.net
Luciferの事もたまには思い出してあげて

214:デフォルトの名無しさん
23/06/07 21:46:42.98 xi4mV2dDp.net
ダブルスラッシュがコメントに採用されたのどの版から?

215:デフォルトの名無しさん
23/06/07 22:41:36.55 JgjHIelbd.net
>>210
概念的にはgetした瞬間にリングバッファから取り除かれてるはずなので
実際にはバッファが一回りするまで残っているが
消えてるかどうか曖昧で気持ち悪いのでコピーで返したほうが望ましい
まあ好みかもしれんが

216:デフォルトの名無しさん
23/06/08 11:06:02.87 rxjbLVG0a.net
>>214
MSVC じゃなくて MS-C の 3 くらいからあったかも

217:デフォルトの名無しさん (スプッッ Sd02-w9Bk)
23/06/08 12:46:07.00 m0+KFU8md.net
C99から
それ以前でもコンパイラ拡張で//コメントをサポートしてるのはあるらしいけど
以下のようなエッジケースで解釈が変わる

b=a//**/ 2
;

//コメントを認めないならb=a/2;
//コメントを認めるならb=a;

218:デフォルトの名無しさん (ワッチョイ 916e-aXLw)
23/06/08 12:55:42.05 ldHYl5bi0.net
> 目をつぶって作ったのでバグがあっても知らない

そういうのは「作った」とは言わない

219:デフォルトの名無しさん (ワッチョイ 5146-rNJ6)
23/06/08 13:01:02.12 5qYvg3Wg0.net
盲者のモノ作りなど認めない。

220:デフォルトの名無しさん (ワッチョイ 4297-UW6r)
23/06/08 13:06:43.94 2i+h5Gbt0.net
目開けても何も見てない奴いるからな

221:デフォルトの名無しさん
23/06/08 13:39:09.53 JhrUsqpHd.net
野良審査員には餌をやらん主義

222:はちみつ餃子
23/06/08 14:35:42.49 Iro3x2NJ0.net
>>214
C99 からだが経緯としては先に C++ で採用されていたという事情がある。
C with Classes から C++ になる 1984 年頃に BCPL 風を参考にして
スラッシュふたつで始めるコメント記法が導入され、
更に 1998 年にそのコメント記法も含めて ISO の規格として確立した。
C と C++ でプリプロセッサは共用することも多いだろうし
コメントはプリプロセッサで除去するだろうから
C++ で採用された段階で実際には C でもスラッシュふたつのコメント記法を
使えていた環境は割と有ったのだと思う。

223:デフォルトの名無しさん
23/06/08 14:52:55.41 ldHYl5bi0.net
マイクロソフトが独自拡張で当時C++のみのはずの//をCでも許していた
言わずと知れた屈指の大手がやっているので規格が追認することとなった

224:デフォルトの名無しさん
23/06/08 16:45:48.60 JA9B62300.net
gccも使えてた気がする


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

349日前に更新/59 KB
担当:undef