C言語なら俺に聞け 141 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2017/07/17(月) 21:06:47.63ID:J4JGo3XO
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.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/


http://mevius.2ch.net/test/read.cgi/tech/1494508803/
http://www.geocities.jp/c_cpp_cs/about_c/
2017/07/29(土) 05:34:46.32ID:u24XiLoF
>>337
> 他の文法要素でリストばたくさんあるぞと指摘してやったんだろ
そんなもんは既に>>267で指摘されてるのに周回遅れでなにドヤッてんだよ w
2017/07/29(土) 05:39:01.00ID:u24XiLoF
>>335
まあLL知らなかったアホが悔し紛れにマウンティングしようとして自爆してるだけだから w
2017/07/29(土) 05:47:56.72ID:vlC06Wfm
>>338
そういうツール作ればいいじゃん。
2017/07/29(土) 07:17:17.25ID:N+YJafLA
>>338
全自動は厳しそう
文字のchatと文字以外のcharの区別が出来ない
2017/07/29(土) 07:28:56.29ID:N+YJafLA
>>337
その指摘の意図が不明
他にあるから何?
2017/07/29(土) 07:55:34.60ID:TpFswTs0
>>340
バーカ それもオレなんだが
往生際悪く日が変わってID変わったID:WViVOgsqが絡んできたから止めを刺してやったに過ぎないが
バカには理解できないようだ さすが救いようのないバカ
2017/07/29(土) 08:00:46.31ID:ULoSSJ2b
>>339
くさるほど連結リストを作るのに、いちいち特定の型に対応させてられないよ
2017/07/29(土) 08:04:41.41ID:N+YJafLA
>>345
で結局何のリストなの?
2017/07/29(土) 08:09:17.20ID:N+YJafLA
ていうか、
>>228の書き込み自体が皮肉なわけだけど
C言語自体にリスト構造なんて物はないっていう
本気で初期化リストだと主張してると思ったわけじゃ無いよな?
「初期化リスト?」だし
2017/07/29(土) 08:10:22.22ID:N+YJafLA
皮肉に対してトンチンカンな指摘をしてるアホが
一人いるみたいだけど
2017/07/29(土) 08:11:51.02ID:N+YJafLA
>>346
腐るほど連結リストを作るプログラムって何だ?
2017/07/29(土) 08:15:35.54ID:zJVnUUbX
>>345
ひょっとして同じこと繰り返してるバカって言われてることに気づいてないのか?
>>265>>280 でわざと同じように指摘してやったのに w
2017/07/29(土) 08:17:38.69ID:zJVnUUbX
>>346
>>290
2017/07/29(土) 08:25:35.65ID:N+YJafLA
>>289
使う側でいちいちメモリ確保、解放をするの?
それとも、Data自体が実体でキャストして使う?

いずれにしろ使いにく過ぎる
2017/07/29(土) 08:25:56.47ID:ULoSSJ2b
>>352
連結リストの型ごとにアルゴリズムを生成するの?それこそミスの元じゃない?
2017/07/29(土) 08:26:55.49ID:ULoSSJ2b
>>353
いちいちmalloc()/free() するんだよ
malloc()/free() でミスするようでは仕事にならん、というか検査用ラッパぐらい手持ちでもっとけよ
2017/07/29(土) 08:29:08.33ID:N+YJafLA
使いにく過ぎる

>>354
型ごとに同じコードを何度も記述する必要はないぞ
そのためのマクロだ
2017/07/29(土) 08:31:19.71ID:ULoSSJ2b
連結リストの中に連結リストとか自由にやりたいのだったら void *data 一択だよ
2017/07/29(土) 08:31:57.23ID:N+YJafLA
構造体名と型をdefineしてからインクルード
2017/07/29(土) 08:33:04.08ID:zJVnUUbX
>>354
> まあいろんな型が必要だとテンプレートが欲しくなるけど
マクロでもそこそこ行けるしね
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
2017/07/29(土) 08:35:18.93ID:ULoSSJ2b
どっちが書きやすいか試せば一発だが‥これは二分木でも一緒
誰か三重の連結リストなり二分木なりを自分のやりかたで書いてくれないか?
2017/07/29(土) 08:36:09.59ID:N+YJafLA
リストのノードとは別にメモリ確保が必要なら、パフォーマンスにも影響するし
2017/07/29(土) 08:40:17.35ID:N+YJafLA
腐るほど使うなら使いやすくないと

メモリ確保、解放を自分でやれ?
あり得ない
2017/07/29(土) 08:41:10.70ID:ULoSSJ2b
>>362
それはCの基本だよ、お前さんC++に慣れきっているんじゃない?
2017/07/29(土) 08:41:31.77ID:zJVnUUbX
>>357
せっかくの静的型付を安易に捨てるのはバカにありがちな行動
struct List_t {
struct List_t *Previous;
struct List_t *Next;
union {
struct List_t *Child;
double Double;
} Data;
};
2017/07/29(土) 08:44:54.55ID:N+YJafLA
>>363
使いにくくてバグの元でパフォーマンスも悪いモジュールを強要する

お前とは仕事をしたくない
2017/07/29(土) 08:52:21.05ID:ULoSSJ2b
>>364
出た!union 野郎が出た!
そんなところで共用体をつかってコードを一本化できるのか?続きを書いてみろよ
2017/07/29(土) 08:53:25.58ID:ULoSSJ2b
>>365
ふん、それはCを知らないといっているようなものだよ‥
>>360を書けばわかる
2017/07/29(土) 08:54:11.31ID:TpFswTs0
> そこそこ行けるしね
と書くとアンダーラインになるのか?
2017/07/29(土) 08:55:16.84ID:TpFswTs0
マクロでもそこそこ行けるしね

そこそこ行けるしね

行けるしね
2017/07/29(土) 09:20:46.96ID:zJVnUUbX
>>366
続きってなんだよ w
2分木なら双方向リストと同じだぞ w
struct List_t {
struct List_t *Left;
struct List_t *Right;
double Data;
};
2017/07/29(土) 09:21:39.47ID:zJVnUUbX
>>368
アンダーライン w
2017/07/29(土) 09:28:06.03ID:14mINgXT
ん?
二分木なら3個とつながってるから、
普通3個リンクを張る
2017/07/29(土) 09:29:28.03ID:dTbBo9oQ
>>364
お、標準ライブラリのソート全否定か?
Cではちょいちょい捨てるよちょいちょいね
常に型を保存したかったらC++使うしかない
2017/07/29(土) 09:29:42.67ID:14mINgXT
あと、色情報も普通はつける
2017/07/29(土) 09:43:22.80ID:N+YJafLA
>>364>>370 も、何の構造?

親をたどれないとポインタを一個進めることも出来ない

C++でいうsetの話をしたわけじゃないの?
2017/07/29(土) 09:43:31.26ID:zJVnUUbX
>>372, >>374
赤黒とかの前に2分木の基礎からやり直せ
2017/07/29(土) 09:45:52.74ID:zJVnUUbX
>>373
> お、標準ライブラリのソート全否定か?
>> 安易に捨てるのは
の意味もわからないアホ w
2017/07/29(土) 09:49:09.48ID:zJVnUUbX
>>375
>>364 に対して親とか知ったかが背伸びするなよ w
根や親を各ノードに持つか別に管理するかは要件次第
2017/07/29(土) 09:54:12.77ID:N+YJafLA
ポインタを進めたり戻したりする必要がなければ
親にリンクを張らなくてもいいけどさ

std::setと同等なものをイメージしたけど、
まったく違うものが突然出てきたわけね
2017/07/29(土) 09:59:21.62ID:N+YJafLA
>>364はそもそも二分木では無いのか

>>357のリストの中にリストっていうのはそういう意味なのか?
2017/07/29(土) 09:59:54.86ID:N+YJafLA
おれの読解力が無さすぎるのか、
説明がなさすぎるのか、
2017/07/29(土) 10:08:25.24ID:RY+TGg1x
>>381
>>286 >>287 にある通り、previousとnextと書いてると、大抵は双方向リストを意味してるものだと取る
ここがleftとrightと書いてると、意味上は全く同じなんだけれども、単語の上からはまずは二分木を連想する
next一つだけだと、一番単純な連結リストであることを期待する
2017/07/29(土) 10:11:31.61ID:dTbBo9oQ
>>377
それいうならリストの中身void*にするのもそこまで安易な選択ってわけでもあるまいに
2017/07/29(土) 10:14:10.31ID:gxbujSGs
>>379
君以外はみんな「リスト」の話をしている。
君もそうだったのだがなぜか勝手に君だけsetだと言い出してる。

>>380
「リストの中のリスト」ってのは、配列で言うとジャグ配列、
つまりジャグリスト。(という言い方は普通しないが)

>>381
君の頭が悪すぎるだけ。
君以外はみんな噛み合っている。つまり、必要十分な説明はなされている。
つか、>>364,370を読めない奴が議論参加するな、という話でしかないが。

個人的には>>364でunionは使わない。マクロで量産だね。(手動テンプレート)
2017/07/29(土) 10:17:23.70ID:N+YJafLA
>>286は、
双方向を利用して作ったから名前が変なのかと思った
でも、追加したのが Child なのはどっちみち変だな
2分木だとしたら

>>370は2分木だろうけど、
これで何をしたいのかわからん
双方向と2分木が同じ発言の意味も不明
2017/07/29(土) 10:20:56.53ID:N+YJafLA
>>370で二分木の話が出た
もっと上ではsetの話が出ている
2017/07/29(土) 10:22:31.80ID:N+YJafLA
>>357
リストの中のリストって
list < list < int > >
こういう意味かと思ったけどこれも違うのね
2017/07/29(土) 10:26:44.77ID:N+YJafLA
まあいずれにしろ、>>289 は無いな
2017/07/29(土) 10:31:03.43ID:zJVnUUbX
>>383
ソート使うのにmalloc/freeは要らんだろ
2017/07/29(土) 10:35:15.55ID:dTbBo9oQ
>>389
リストなんてどうせmalloc/free使って運用するし別によくね?
2017/07/29(土) 10:36:49.65ID:gxbujSGs
>>385
>>286は「双方向リスト」だぞ。名前もかなり妥当。
つか、君だけまったく付いて来れてないが。

> 双方向と2分木が同じ発言の意味も不明
抽象化して「ポインタの数」という意味で捉えると同じ、ってことだよ。
これについてこれてないのは、「抽象思考出来ない馬鹿」だね。最近はよく見かけるが。

>>387
いや、そういう意味だぞ。


ふむ、なるほど、君は「リスト」を作れない馬鹿のようだ。君は何言語使いなんだ?
C言語使いなら、ド頭>>230でも否定されている通り、普通はリスト程度ならサクッと作れる。
(ただしそもそもリストなんて使わないが)
2017/07/29(土) 10:37:38.60ID:zJVnUUbX
>>384
> 個人的には>>364でunionは使わない。マクロで量産だね。(手動テンプレート)
ん?
ノードに値とリストのどちらかを入れられるリストと言う要件だと思ったが?
2017/07/29(土) 10:37:49.78ID:N+YJafLA
>>289
intのリストに1, 2, 3, ... , 10 を追加
するだけでもイヤになる
2017/07/29(土) 10:39:22.96ID:N+YJafLA
>>392
なんだ、結局おれ以外も会話が通じてないんじゃん
2017/07/29(土) 10:40:24.22ID:zJVnUUbX
>>390
まあお前がいいと思うならそうすればいいんじゃね?
2017/07/29(土) 10:41:41.06ID:N+YJafLA
>>391
あ、ごめん
>>385の一行目は >>364 の間違い
2017/07/29(土) 10:42:46.56ID:N+YJafLA
>>391の真ん中
>>364のコードはそうなってない
2017/07/29(土) 10:47:50.62ID:N+YJafLA
>>391の上半分

トポロジーがまったく違う
よって必要な処理もまったく違う
ポインタの数も、普通は2分木は3方向にリンクを張る
2017/07/29(土) 10:48:39.76ID:N+YJafLA
「普通は」とか書くと反論がくるのかな
「多くは」くらいにしておくか
2017/07/29(土) 10:58:06.68ID:N+YJafLA
>>370
結局これで何をしたいのかわからん

親へのリンクが無い、色が無い
って時点で汎用化とは程遠い
2017/07/29(土) 11:00:17.42ID:gxbujSGs
>>392
> ノードに値とリストのどちらかを入れられるリストと言う要件だと思ったが?
いや、そう明示されているわけではないよな?
次に、それが要件だったとして、或いは汎用化するために void* だろってのが皆の意見だ。
ここについては俺はいちいちキャストがウザいからデータはめ込み派(君と同じ)だが。
2017/07/29(土) 11:09:28.10ID:VkCqDRe3
Cばかり使っていると頭がこんなんなっちゃいます。
2017/07/29(土) 11:11:38.53ID:N+YJafLA
void* の問題はキャストもそうだけど
外部でメモリを管理する必要があるってところが大きいかと

多重リストだろうがunionだろうが
マクロでどうにでもなるんで
わざわざ不便な作りにする必要は無いかと
2017/07/29(土) 11:13:16.21ID:N+YJafLA
>>402
C++が使える環境なら素直にC++を使えって話だけど
いまだにCしか使えない環境ってのもあってね
2017/07/29(土) 11:14:41.46ID:eThbJX9n
(単方向)リストは先頭から終端の方向へ順にポインタを辿る、逆方向のポインタは無くても可(逆方向があるのは双方向リスト)
二分木は根から葉の方向へ再帰でポインタを辿る、親方向のポインタは無くても可(むしろ無いのが普通)
2017/07/29(土) 11:16:39.02ID:gxbujSGs
>>398
何度も言っているが君だけ付いて来れてない。いちいち全部なので端折るが、

> ポインタの数も、普通は2分木は3方向にリンクを張る
これについては既に回答済みで、引用すると、
> 根や親を各ノードに持つか別に管理するかは要件次第 (>>378)
で、全くその通りだ。

俺は君が何故これを理解出来ないのかもわかるが、
君は俺の質問に答える気がないようだから、教えてやらないことにする。
馬鹿のままで死ね。
2017/07/29(土) 11:16:58.24ID:N+YJafLA
Cってパフォーマンスを落としてまで汎用化するような使い方ってあまりしないしね
基本組み込み用

リストも片方向で済むなら片方向にするし、
そもそもリスト構造自体頻繁に使うようなものじゃない
2017/07/29(土) 11:18:34.04ID:N+YJafLA
だから、
Cで挫折する理由が「リスト」とかいう主張、
まったくチンプンカンプンで
2017/07/29(土) 11:19:32.62ID:zJVnUUbX
>>401
> いや、そう明示されているわけではないよな?
で、君は
> 連結リストの中に連結リストとか自由にやりたい
をどう解釈してマクロでやるって言ってるの?

> 次に、それが要件だったとして、或いは汎用化するために void* だろってのが皆の意見だ。
皆の意見? w
2017/07/29(土) 11:21:33.18ID:N+YJafLA
>>406
要件次第で変わるのに「同じ」と言ってしまう
2017/07/29(土) 11:23:02.49ID:N+YJafLA
>>406
>>400
2017/07/29(土) 11:26:20.62ID:gxbujSGs
>>409
俺なら型ごとにstructを用意、つまりテンプレートと同じことをする、ということ。

ただしvoid*にしろって言う意見も分かるし、C的にはそれもありだと思うぞ。
ここら辺は好みの範囲だとは思うが。
2017/07/29(土) 11:30:42.93ID:N+YJafLA
>>405
無いのが普通って
世の中を知らなすぎる

汎用のコンテナとしての2分木で
そういう実装な例があるなら
示していただけると
出来れば有名どころで

親がないと、ポインタを一個進めるのもコストがかかる
挿入した時に左右のバランスを保つのにもコストがかかる

もちろん、そういう処理がいらない
コンテナとして使わないような
特殊用途の2分木ならいくらでもあるだろうけど
今はコンテナの話だよね
2017/07/29(土) 11:30:53.18ID:zJVnUUbX
>>412
マクロの話がよくわからんがまあいいや
あんたが要件どう解釈したかもわからんからどうしようもないしな
2017/07/29(土) 11:32:58.28ID:N+YJafLA
例えばstd::setの実装はすべて親へのリンクがある
2017/07/29(土) 11:36:13.86ID:gxbujSGs
>>414
インラインマクロでゴリゴリに対応するのではなくて、
structの宣言部分をマクロ化して、
MyList(MyListDouble, double)
MyList(MyListInt, int)
で量産する、ということ。つまりテンプレートだろこれは。
2017/07/29(土) 11:44:36.57ID:N+YJafLA
コードサイズが大きい時は、
名前と型をdefineしてからinclude
とか良くやる
defineやincludeは上のMyListみたいなマクロで
2017/07/29(土) 11:59:50.67ID:ODSH1Ehs
>>416
ごめん意味わからん
union の代わりになるって言うことなんだよね?
2017/07/29(土) 12:00:47.71ID:EGnuLLJd
いつからコンテナの話になったんや
2017/07/29(土) 12:09:46.80ID:14mINgXT
>>418
型ならなんでも良い
2017/07/29(土) 12:10:50.91ID:14mINgXT
>>419
最初からずっと
2017/07/29(土) 12:13:39.65ID:14mINgXT
ていうか
コンテナじゃない2分木はあるけど、
コンテナじゃないリストなんて無いだろ

初期化リストか?
2017/07/29(土) 12:22:33.90ID:EGnuLLJd
コンテナの定義に詳しくないんだけど、Lispのリストはコンテナなん?
424デフォルトの名無しさん
垢版 |
2017/07/29(土) 12:24:27.13ID:vlC06Wfm
このスレは1000までリストの話で埋まりそうだね。物凄いスピードで。
2017/07/29(土) 12:35:38.98ID:gxbujSGs
>>418
俺は>>286派だって事。(>>370もあり。)
>>364は無し。てかどうでもいいところでunion使ってもろくな事にならないし。
void*も無し。主にキャストが面倒だから。でもunionよりはvoid*を選ぶ。

とはいえここら辺は好みの問題でしかないが。
俺なら、型固定>void*>unionだね。
2017/07/29(土) 12:48:00.97ID:TYuY3Yui
>>420
単にunion使わずに(メモリー気にせずに)struct使うって話?
2017/07/29(土) 12:51:34.43ID:QBDV3ETd
あんなあおまいら・・
これ、コレクションをライブラリとして持てという
あるいはそれをどう作るかという話なんだわ
例をあげれば、AppleのCFMutableArray
Win32ならなんだ?
2017/07/29(土) 13:02:32.44ID:14mINgXT
>>426
型ごとに作るってこと
2017/07/29(土) 13:09:06.48ID:TYuY3Yui
>>425
> 俺は>>286派だって事。(>>370もあり。)
> >>364は無し。
要件違うものを持ってきてそんなことを言われてもなぁ

> てかどうでもいいところでunion使ってもろくな事にならないし。
> void*も無し。主にキャストが面倒だから。でもunionよりはvoid*を選ぶ。
unionになんかトラウマでもあるのか?
まあ好みの問題と言うのには同意する
2017/07/29(土) 13:09:40.87ID:14mINgXT
MyList(MyListDouble, double)
MyList(MyListMyListDouble, MyListDouble)
2017/07/29(土) 13:11:30.55ID:gxbujSGs
>>427
C的には、
> コレクションをライブラリとして持て
いらんわ
> あるいはそれをどう作るか
必要なら自分で作るし苦労もしない

だと思うぞ。もちろんC++使ってもいいし、今更だろ。
ただそれ以前に、現実として、動的キー(辞書)が必要な用途はあまりないだろ。
Cの担当範囲なら、ほぼ全ての場合で構造体(静的キー)と配列で間に合う。(鶏と卵ではあるが)
もちろんこれら含めて汎用化したほうが楽だが、その分遅いのがLL言語な訳で。
2017/07/29(土) 13:17:05.76ID:QBDV3ETd
>>431
まあC++使えば済む話でもあるからな
2017/07/29(土) 13:27:26.48ID:gxbujSGs
>>429
> unionになんかトラウマでもあるのか?
いやお前少しは他言語もやれよ。
unionは他言語では廃止されている。理由はいろいろまずいから。
ググれば出て来るからやってみ。

まあそれ以前に君はunionの使い方を間違っている。
あれは、リード/ライトで型が違うときに使うものであって、
型違いだがサイズが同じだから突っ込む、という為の物ではない。
というか後者ならvoid*で受けていちいちキャストするというのが正しい。
しかしこれだと型チェックできなくなるからテンプレートにしろというのがC++だ。
2017/07/29(土) 13:29:31.36ID:N+YJafLA
形別 > union > void*

こうだな
もちろんサイズにもよるが
2017/07/29(土) 13:30:38.44ID:N+YJafLA
>>433
goto嫌いと同じにおいが
2017/07/29(土) 13:32:15.53ID:N+YJafLA
何度も書くけど、
外でメモリ確保解放強制はあり得ない
2017/07/29(土) 13:33:45.21ID:N+YJafLA
>>433
サイズが同じ?
2017/07/29(土) 13:34:53.52ID:N+YJafLA
unionの使い方は1つじゃないよ
2017/07/29(土) 13:41:10.88ID:gxbujSGs
>>432
Cは大前提としてそれがあるんだよ。
不満があればC++で大体事足り、それがbetterCだ。(俺の認識では)
つまり、リストが欲しいけど自分で作るのは面倒、だったらここだけC++使うか、って場合。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。