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.5ch.net/test/read.cgi/tech/1509107288/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
C言語なら俺に聞け 144
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 838a-3nWA)
2017/12/23(土) 19:33:43.89ID:dghfoRy20402デフォルトの名無しさん (ワッチョイ f5bb-nLHG)
2018/01/21(日) 22:55:33.96ID:uqlpy0wi0 今、何が出来るのか
これから、何がしたいのか
↑
による
これから、何がしたいのか
↑
による
403愛知人
2018/01/21(日) 22:55:40.90ID:TYCBS/Jo K&R
404デフォルトの名無しさん (ワッチョイ f5bb-nLHG)
2018/01/21(日) 22:57:28.52ID:uqlpy0wi0 K&Rの役割を他の本で代替したあとの話だな
405愛知人
2018/01/21(日) 22:59:34.82ID:TYCBS/Jo Cって何のためにやるの?組み込みしかなくね?そんなの極める必要ある?
C++やろうぜ
C++やろうぜ
407愛知人
2018/01/21(日) 23:05:45.96ID:TYCBS/Jo じゃあC++やろうぜ
って言ってるけどな
って言ってるけどな
408愛知人
2018/01/21(日) 23:06:44.66ID:TYCBS/Jo >>401
C++やろうぜ
C++やろうぜ
409デフォルトの名無しさん (アウアウカー Sa21-/TBa)
2018/01/21(日) 23:07:08.18ID:9sfTI4Pla410愛知人
2018/01/21(日) 23:09:24.66ID:TYCBS/Jo ダイレクトエックス?テン?か知らないけどそれの本は?
411デフォルトの名無しさん (アウアウカー Sa21-/TBa)
2018/01/21(日) 23:13:00.05ID:9sfTI4Pla >>410
探してるんですけど、なかなか本やにないので
探してるんですけど、なかなか本やにないので
412デフォルトの名無しさん (ワッチョイ 85c3-iX8K)
2018/01/21(日) 23:19:00.70ID:oGuWm1pn0 ますますよく分からんが
少なくとも「その前に」ってレベルじゃねぇ
少なくとも「その前に」ってレベルじゃねぇ
413デフォルトの名無しさん (アウアウカー Sa21-/TBa)
2018/01/21(日) 23:37:23.07ID:WHQpxhYLa >>412
自作ゲームを作るのが目的で、自分の性分として元祖からやっていきたいと思って、、、、
ファミコンの実機はパソコンx86とDirectXで作ったとかなんとか、、、、
要領が小さい横スクロールアクション(ロックマンの亜種)を作ってみたいのです。
自作ゲームを作るのが目的で、自分の性分として元祖からやっていきたいと思って、、、、
ファミコンの実機はパソコンx86とDirectXで作ったとかなんとか、、、、
要領が小さい横スクロールアクション(ロックマンの亜種)を作ってみたいのです。
414デフォルトの名無しさん (ワッチョイ 759f-HMlX)
2018/01/21(日) 23:38:09.13ID:I2+B/hhs0 うーん。K&Rを知らないか・・・
415デフォルトの名無しさん (ワッチョイ 3d8a-OBdR)
2018/01/21(日) 23:49:01.75ID:hGg1UGRI0416デフォルトの名無しさん (ワッチョイ c58a-68Hl)
2018/01/21(日) 23:51:41.82ID:KmWcS8tF0 >>413
>ファミコンの実機はパソコンx86とDirectXで作ったとかなんとか、、、、
何処からそんなデマを聞いたんだ?
ファミコン実機の中身はx86どころか8bitCPU(6502ベースのカスタム品)だということ知ってる?
>ファミコンの実機はパソコンx86とDirectXで作ったとかなんとか、、、、
何処からそんなデマを聞いたんだ?
ファミコン実機の中身はx86どころか8bitCPU(6502ベースのカスタム品)だということ知ってる?
417デフォルトの名無しさん (ワッチョイ 759f-GP+B)
2018/01/21(日) 23:52:37.13ID:I2+B/hhs0418デフォルトの名無しさん (ワッチョイ f5bb-nLHG)
2018/01/21(日) 23:53:43.48ID:uqlpy0wi0419デフォルトの名無しさん (アウアウカー Sa21-/TBa)
2018/01/22(月) 00:08:27.82ID:o5sZqJ+pa >>416
Vipでゲーム機の進化の話があ出たときに、スーファミの開発環境がDirectXだって書いてあった
Vipでゲーム機の進化の話があ出たときに、スーファミの開発環境がDirectXだって書いてあった
420デフォルトの名無しさん (ワッチョイ c58a-68Hl)
2018/01/22(月) 00:23:02.56ID:FvAm1M5e0 >>419
DirectXはその前身のGame SDKでさえWin95(1995年)と同時期にリリースされてる
スーパーファミコンの登場はそれより前のWin3.1(1992年)すら登場していない時期
まだMS-DOSの全盛期だよ、タイミング的に有り得ない
DirectXはその前身のGame SDKでさえWin95(1995年)と同時期にリリースされてる
スーパーファミコンの登場はそれより前のWin3.1(1992年)すら登場していない時期
まだMS-DOSの全盛期だよ、タイミング的に有り得ない
421デフォルトの名無しさん (アウアウカー Sa21-/TBa)
2018/01/22(月) 00:42:19.17ID:o5sZqJ+pa422デフォルトの名無しさん (アウアウエー Sa93-JCrA)
2018/01/22(月) 06:53:09.36ID:1d4s07YIa 木屋さん元気かな
423デフォルトの名無しさん (アウアウウー Sad9-vZoh)
2018/01/23(火) 09:06:26.50ID:oQb/6sLaa >>152
遅くなったが、なかなか難しいがその難しさ含めアイデア次第でとても面白いな!
ツイやらインスタみたいのがもてはやされとるけどやっぱこういう反リアルタイムで半匿名性保持したものって必要なんだと思うし、2hは仰るとおりこのまま行くと5年後10年後にはホントの過疎化で存続危ういし、今からテコ入れして人の誘導図るのは大賛成!
よし、俺もC本気出してやるかw
遅くなったが、なかなか難しいがその難しさ含めアイデア次第でとても面白いな!
ツイやらインスタみたいのがもてはやされとるけどやっぱこういう反リアルタイムで半匿名性保持したものって必要なんだと思うし、2hは仰るとおりこのまま行くと5年後10年後にはホントの過疎化で存続危ういし、今からテコ入れして人の誘導図るのは大賛成!
よし、俺もC本気出してやるかw
424デフォルトの名無しさん (アウアウウー Sad9-vZoh)
2018/01/23(火) 09:07:59.18ID:oQb/6sLaa おまいらやっぱり電卓も早いの?
425デフォルトの名無しさん (ワッチョイ c58a-68Hl)
2018/01/23(火) 09:34:15.34ID:K+ggfGT70 電卓が早い、とは一体なんのこっちゃ
426デフォルトの名無しさん (ササクッテロル Spb1-u0QZ)
2018/01/23(火) 10:39:49.81ID:tgopM6GQp 挿入から射精までなら素早いぞ。
427デフォルトの名無しさん (ワッチョイ 8b2b-pQa0)
2018/01/23(火) 22:14:31.29ID:ksGxN6tV0 https://ideone.com/Jhbm7n
グラムシュミット計算して結果をそのまま出力するって課題が出て、一応出来はしたんだけど出力で変になったんだ
リンク先に書いてる奴が正しい出力で、最後のコメントみたいにすると違う結果が出てくる
具体的に言えばcmdで
「 f3 1.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 1.000」ってやると
「 1.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 1.000」が出力される(リンク先はコレ)はずなんだが
コメント通りにすると
「1.000 1.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000」になっちゃう
環境はVSCodeでコンパイラはVS2017のcl
グラムシュミット計算して結果をそのまま出力するって課題が出て、一応出来はしたんだけど出力で変になったんだ
リンク先に書いてる奴が正しい出力で、最後のコメントみたいにすると違う結果が出てくる
具体的に言えばcmdで
「 f3 1.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 1.000」ってやると
「 1.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 1.000」が出力される(リンク先はコレ)はずなんだが
コメント通りにすると
「1.000 1.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000」になっちゃう
環境はVSCodeでコンパイラはVS2017のcl
428片山博文MZ ◆T6xkBnTXz7B0 (スフッ Sd43-FVlE)
2018/01/23(火) 22:50:42.81ID:vdlPoDuDd >>427
Cは複数の値を返却値として返すことはできない。関数の引数リスト以外で、カンマを書くとカンマ演算子として解釈される。
Cは複数の値を返却値として返すことはできない。関数の引数リスト以外で、カンマを書くとカンマ演算子として解釈される。
429デフォルトの名無しさん (ワッチョイ 3d8a-ajZX)
2018/01/23(火) 22:51:42.86ID:tTVD5Gwd0 len_u3の値は?
430デフォルトの名無しさん (ワッチョイ 8b2b-pQa0)
2018/01/24(水) 08:13:51.80ID:DWaVEiCq0431デフォルトの名無しさん
2018/01/24(水) 08:36:54.65 >>427
見た感じ、エンディアン問題っぽい
見た感じ、エンディアン問題っぽい
432デフォルトの名無しさん (ワッチョイ 35a8-u0QZ)
2018/01/24(水) 09:37:36.28ID:9sUL+M6u0 >>428
構造体を型宣言して戻り値にすれば、複数の値を実体返し出来るけどね。
構造体を型宣言して戻り値にすれば、複数の値を実体返し出来るけどね。
433デフォルトの名無しさん (ワッチョイ 3d8a-68Hl)
2018/01/24(水) 09:51:46.57ID:aKjSawsU0 結局、質問者は問題点が何処にあるか理解できたのかな?
カンマ演算子の評価結果は、最後の式の評価結果だからね
余計なお世話かも知れないけど、どうしても結果を戻り値で返したい場合は構造体に纏めれば出来るよ
というか、ベクトル自体を配列ではなくて構造体に纏めた方がプログラムの見通しがすっきりすると思う
カンマ演算子の評価結果は、最後の式の評価結果だからね
余計なお世話かも知れないけど、どうしても結果を戻り値で返したい場合は構造体に纏めれば出来るよ
というか、ベクトル自体を配列ではなくて構造体に纏めた方がプログラムの見通しがすっきりすると思う
434デフォルトの名無しさん (ワッチョイ 3d8a-68Hl)
2018/01/24(水) 09:52:11.69ID:aKjSawsU0 被った、ごめん
435デフォルトの名無しさん (アウアウエー Sa93-JCrA)
2018/01/24(水) 14:24:18.70ID:vECYoCmia 皮
436デフォルトの名無しさん (ワッチョイ 3d8a-68Hl)
2018/01/24(水) 17:11:55.26ID:aKjSawsU0 もう駄目だ
>>427のコードを構造体に纏めて書き換えてみたけど、ideoneのコマンドライン入力がどうやってもエラーを吐く
もう諦めたのでテストデータ埋め込みでコードを晒す(数学的には意味のないテストデータだけど)
誰か原因分かる人確認お願いします
手元のVC++2017ではコマンドライン入力でも正常動作することは確認してる
https://ideone.com/IEGKl0
>>427のコードを構造体に纏めて書き換えてみたけど、ideoneのコマンドライン入力がどうやってもエラーを吐く
もう諦めたのでテストデータ埋め込みでコードを晒す(数学的には意味のないテストデータだけど)
誰か原因分かる人確認お願いします
手元のVC++2017ではコマンドライン入力でも正常動作することは確認してる
https://ideone.com/IEGKl0
437デフォルトの名無しさん (ワッチョイ 3d8a-68Hl)
2018/01/24(水) 17:21:25.19ID:aKjSawsU0 もしかして勘違いしてた?
ideoneの標準入力stdinってプログラム実行開始前のコマンドライン入力としては使えないのか?
もうどうでもいいけど…
ideoneの標準入力stdinってプログラム実行開始前のコマンドライン入力としては使えないのか?
もうどうでもいいけど…
438デフォルトの名無しさん (ワッチョイ 0bea-RHqN)
2018/01/24(水) 17:25:37.49ID:cUo2YGui0 fscanf(stdin,...) とかの 入力ストリームにこれを与えるってだけ
実行時引数を渡すしくみはなかったような
実行時引数を渡すしくみはなかったような
439デフォルトの名無しさん (ワッチョイ 3d8a-68Hl)
2018/01/24(水) 17:30:33.41ID:aKjSawsU0 やっぱりそうかー
無駄な時間を使ったわー
無駄な時間を使ったわー
440デフォルトの名無しさん (ワッチョイ 559f-x16F)
2018/01/24(水) 19:49:04.30ID:5oCpuwxD0 >>436
ちなみに初心者だよな?
だとすると、一般的にはCでは構造体の値渡しは(特に理由がある場合以外は)しないので、
ポインタ渡しで書くことに慣れた方がいい。 . はほぼ使わず、 -> ばかりになる。
具体的に言うと、
void gram_schmidt(BASIC3* bas, VECT3* v_1, VECT3* v_2, VECT3* v_3);
として、
BASIS3 bas;
gram_schmidt(&bas, &v_1, &v_2, &v_3);
とする。
値渡しする場合の理由だが、通常は、以下のどちらか。
・中で一時期的に書き換えるため、どうせコピーが必要。
・中で何度も使う場合、値渡しの方が速い場合がある。
値渡しはスタック上に置かれるためイミディエートオフセット命令が出る。(Read1回でデータを読み込める)
ポインタ渡しは間接参照になるため、アクセス速度が少し遅い。(2回Readが必要)
ただし値渡しは呼ぶ際と戻る際に構造体の中身を全コピーするので、それとの兼ね合いになる。
単純には、値渡しはコピーが2回発生するのだから、確実に速くなるとしたら3回以上使う場合で、
逆に言えば、2回以下のときはポインタ渡しにしておけ、となる。だから大体ポインタ渡しになる。
個人的には、このくらい自動で最適化してくれとも思うが、
Cは「書いたように動かせ、余分なことはするな」の文化だから、手動で切り替える方が好まれているのだろう。
(C++の場合はコピーコンストラクタが動くことになっているので、自動で切り替えたら違反になり、出来ないはず。)
ちなみに初心者だよな?
だとすると、一般的にはCでは構造体の値渡しは(特に理由がある場合以外は)しないので、
ポインタ渡しで書くことに慣れた方がいい。 . はほぼ使わず、 -> ばかりになる。
具体的に言うと、
void gram_schmidt(BASIC3* bas, VECT3* v_1, VECT3* v_2, VECT3* v_3);
として、
BASIS3 bas;
gram_schmidt(&bas, &v_1, &v_2, &v_3);
とする。
値渡しする場合の理由だが、通常は、以下のどちらか。
・中で一時期的に書き換えるため、どうせコピーが必要。
・中で何度も使う場合、値渡しの方が速い場合がある。
値渡しはスタック上に置かれるためイミディエートオフセット命令が出る。(Read1回でデータを読み込める)
ポインタ渡しは間接参照になるため、アクセス速度が少し遅い。(2回Readが必要)
ただし値渡しは呼ぶ際と戻る際に構造体の中身を全コピーするので、それとの兼ね合いになる。
単純には、値渡しはコピーが2回発生するのだから、確実に速くなるとしたら3回以上使う場合で、
逆に言えば、2回以下のときはポインタ渡しにしておけ、となる。だから大体ポインタ渡しになる。
個人的には、このくらい自動で最適化してくれとも思うが、
Cは「書いたように動かせ、余分なことはするな」の文化だから、手動で切り替える方が好まれているのだろう。
(C++の場合はコピーコンストラクタが動くことになっているので、自動で切り替えたら違反になり、出来ないはず。)
441デフォルトの名無しさん (ワッチョイ 3d8a-68Hl)
2018/01/24(水) 20:17:50.04ID:aKjSawsU0 >>440
うーん、まあそうなんだけどね
今回はそんなに大きなデータでも無いので手抜きしてる
元々のコードは次元もパラメータとして持っていたので、基底空間の構造体そのものをベクトル構造体のリスト構造で構成するのが正解なんだろうね
ポインタでベクトル構造体を引き渡すことになるとは思う
ただそこまでやるのが面倒くさかったので、3次元ベクトル空間に限定して無理やりデータを小さくまとめてしまってる
この程度なら値渡しでもいいかと手抜きしてるのが裏事情、ぶっちゃっけて言うとまともに実装するのが面倒臭かった
まあ、あんまり細かいこと突っつかないで><
うーん、まあそうなんだけどね
今回はそんなに大きなデータでも無いので手抜きしてる
元々のコードは次元もパラメータとして持っていたので、基底空間の構造体そのものをベクトル構造体のリスト構造で構成するのが正解なんだろうね
ポインタでベクトル構造体を引き渡すことになるとは思う
ただそこまでやるのが面倒くさかったので、3次元ベクトル空間に限定して無理やりデータを小さくまとめてしまってる
この程度なら値渡しでもいいかと手抜きしてるのが裏事情、ぶっちゃっけて言うとまともに実装するのが面倒臭かった
まあ、あんまり細かいこと突っつかないで><
442デフォルトの名無しさん (ワッチョイ 559f-x16F)
2018/01/24(水) 20:58:24.14ID:5oCpuwxD0 >>441
やれば分かるが、そんなに記述量は変わらないぞ。
. が -> に変わるのが大半で、それ以外はほぼそのままで済むはず。
主に計算用途で、Python -> Cを目指しているのか?
だとしたら速い書き方が出来ないと意味無いだろ。
そして、ベクトルの値渡しとかスタックを余計に食う=再帰したら悲惨なことになるから止めとけ。
->の表記が気に入らないのなら、C++の「参照」を使えば . のままでも書ける。
この場合は、ソース自体の書き換えは呼び出し部分だけで済む。
(ただし、非const参照は推奨されていない場合もある。例:googleのコーディングルール)
やれば分かるが、そんなに記述量は変わらないぞ。
. が -> に変わるのが大半で、それ以外はほぼそのままで済むはず。
主に計算用途で、Python -> Cを目指しているのか?
だとしたら速い書き方が出来ないと意味無いだろ。
そして、ベクトルの値渡しとかスタックを余計に食う=再帰したら悲惨なことになるから止めとけ。
->の表記が気に入らないのなら、C++の「参照」を使えば . のままでも書ける。
この場合は、ソース自体の書き換えは呼び出し部分だけで済む。
(ただし、非const参照は推奨されていない場合もある。例:googleのコーディングルール)
443デフォルトの名無しさん (ワッチョイ 3d8a-68Hl)
2018/01/24(水) 21:18:35.41ID:aKjSawsU0 >>442
このスレには珍しく数学的な背景に詳しそうだな
ちょっと聞きたいけど、基底空間の拡張そのものはベクトル構造体をリスト化すれば簡単なんだけど、ベクトルの要素の拡張で簡単な方法ないかな?
実は最初にそれを考えたんだけど要素もリスト化するとポインタの連鎖が大変なことになりそうで、躊躇した結果がVECT3やBASIS3などの次元決め打ちになってしまってる
あとは演算部も際限なく項が増えていくので再起でも使わなければとても実装できそうもない
これもポインタの実装が大変なことになるのが容易に想像できる
参考までに先のコードを拡張するにあたって何か良さそうなアイディアないかな
このスレには珍しく数学的な背景に詳しそうだな
ちょっと聞きたいけど、基底空間の拡張そのものはベクトル構造体をリスト化すれば簡単なんだけど、ベクトルの要素の拡張で簡単な方法ないかな?
実は最初にそれを考えたんだけど要素もリスト化するとポインタの連鎖が大変なことになりそうで、躊躇した結果がVECT3やBASIS3などの次元決め打ちになってしまってる
あとは演算部も際限なく項が増えていくので再起でも使わなければとても実装できそうもない
これもポインタの実装が大変なことになるのが容易に想像できる
参考までに先のコードを拡張するにあたって何か良さそうなアイディアないかな
444デフォルトの名無しさん (ワッチョイ 559f-x16F)
2018/01/24(水) 21:52:33.93ID:5oCpuwxD0 >>443
いや俺は多分君よりは詳しくないが。
ただ、君はだいぶ勘違いしてると思うぞ。
1. まず、値渡しをポインタ渡しにしたところで、記述量は大して変わらない。
これはやってみれば分かるし、どのみち通る道だろうからやっとけ。
大変なことになんてならない。
2. 次に、Cのポインタは配列のサイズは気にしてない。
だからベクトル要素の拡張とか、最初から気にする必要が無い。
強いてコツを言うなら、ド頭を「長さ」にして、データは末尾にしとけ、という程度。
(大体これで上手くいく)
typedef struct {
int num;
// int elemSize;
double* elems;
} VECTX;
typedef struct {
int num;
// int elemSize;
VECTX* vectors;
} BASISX;
多分これで全て事足りる。
混乱するようなら num を dim(ension) なり rank 等に変えてもいいが、
ダックタイプ的に手抜きする気なら num に統一してついでに int elemSize も構造体に入れとけ。
そしたらコピー等は同じ関数が使えるようになる。
(void*にキャストしてmemcpyするにしてもサイズが無いと無理。
Cには実行時型情報(RTTI)が無いから、必要なら自前で用意するしかない)
或いは、VECTXとBASISXを分けずに、どちらもvoid*にキャストして1種類の構造体で扱ってもいい。
いや俺は多分君よりは詳しくないが。
ただ、君はだいぶ勘違いしてると思うぞ。
1. まず、値渡しをポインタ渡しにしたところで、記述量は大して変わらない。
これはやってみれば分かるし、どのみち通る道だろうからやっとけ。
大変なことになんてならない。
2. 次に、Cのポインタは配列のサイズは気にしてない。
だからベクトル要素の拡張とか、最初から気にする必要が無い。
強いてコツを言うなら、ド頭を「長さ」にして、データは末尾にしとけ、という程度。
(大体これで上手くいく)
typedef struct {
int num;
// int elemSize;
double* elems;
} VECTX;
typedef struct {
int num;
// int elemSize;
VECTX* vectors;
} BASISX;
多分これで全て事足りる。
混乱するようなら num を dim(ension) なり rank 等に変えてもいいが、
ダックタイプ的に手抜きする気なら num に統一してついでに int elemSize も構造体に入れとけ。
そしたらコピー等は同じ関数が使えるようになる。
(void*にキャストしてmemcpyするにしてもサイズが無いと無理。
Cには実行時型情報(RTTI)が無いから、必要なら自前で用意するしかない)
或いは、VECTXとBASISXを分けずに、どちらもvoid*にキャストして1種類の構造体で扱ってもいい。
445デフォルトの名無しさん (ササクッテロル Spb1-u0QZ)
2018/01/24(水) 22:24:53.83ID:VHi7KMpxp 構造体返しなんか、知らないうちに使ってるんだから気にするな。
君が返り値に指定したその型が実は構造体だったなんて誰も気にしてないから。
君が返り値に指定したその型が実は構造体だったなんて誰も気にしてないから。
446デフォルトの名無しさん (ワッチョイ 0b81-QoPs)
2018/01/24(水) 22:34:36.62ID:NLoTtXwc0 ファイル操作しているなら、
FILE構造体のお世話になっているはず
この構造体の中身を一度見てみると良いよ
FILE構造体のお世話になっているはず
この構造体の中身を一度見てみると良いよ
でも FILE 構造体を構造体返しや構造体渡しにはしないからなあ…
448デフォルトの名無しさん (スップ Sd43-BuBX)
2018/01/24(水) 23:07:36.68ID:78SslThOd fopen()のfpは誰の懐を指してるんだろう…
449デフォルトの名無しさん (アウアウエー Saf2-oJ1J)
2018/01/25(木) 02:11:06.70ID:KWt8t+zYa おまいら寄り道多過ぎΩ
早く本当のことを教えたれ
早く本当のことを教えたれ
450デフォルトの名無しさん
2018/01/25(木) 07:41:16.00 構造体返しやら構造体渡しやらを使ってる標準ライブラリ関数なんかあらへんやろ
451デフォルトの名無しさん (ブーイモ MM97-EQ2j)
2018/01/25(木) 07:57:34.46ID:H7d70bA2M 構造体渡しはスタック汚すからなあ
452デフォルトの名無しさん (ワッチョイ aeea-MCTD)
2018/01/25(木) 08:27:14.49ID:Wqza6sKp0 K&Rでも初期のほう
構造体の値渡し/構造体の値戻しは出来なかったわけで
標準関数に盛り込まれることはなかったんじゃなかろうかと
構造体の値渡し/構造体の値戻しは出来なかったわけで
標準関数に盛り込まれることはなかったんじゃなかろうかと
453デフォルトの名無しさん (ワッチョイ c78a-FYQJ)
2018/01/25(木) 08:40:26.67ID:8P15F8nd0 socket うんそうだね
454デフォルトの名無しさん (ササクッテロル Spab-JKdO)
2018/01/25(木) 10:31:04.17ID:SJLkFufqp いや、コンパイラの吐くコードがアホだったから解放したスタックから値をコピーする事になっちまってただけだ。
割り込み専用スタックが無いアーキテクトマシンはそこで死んだ。
割り込み専用スタックが無いアーキテクトマシンはそこで死んだ。
455デフォルトの名無しさん (ワッチョイ 5323-oJ1J)
2018/01/25(木) 11:46:50.00ID:ZxAe+MwB0 >>448
mallocじゃね
mallocじゃね
456デフォルトの名無しさん (ワッチョイ 9e23-Pdni)
2018/01/25(木) 12:45:13.85ID:roA8poOQ0 >>456
由緒正しきバークレーソケットに構造体渡し・構造体返しがあるわけがない、常識的に
由緒正しきバークレーソケットに構造体渡し・構造体返しがあるわけがない、常識的に
458デフォルトの名無しさん (ワッチョイ 5323-oJ1J)
2018/01/25(木) 13:24:05.92ID:ZxAe+MwB0 返り血の話してるのになんで引数持ち出すかなぁ
459デフォルトの名無しさん (ワッチョイ ea96-4xH4)
2018/01/25(木) 15:57:29.77ID:O5EWej8a0 返り血の話はチャンバラスレでやってくれ
460デフォルトの名無しさん (ワントンキン MMaa-FYQJ)
2018/01/25(木) 16:44:30.46ID:ID0HK2lBM 旧K&Rにないからな
461デフォルトの名無しさん (ワッチョイ 539f-fPTX)
2018/01/25(木) 23:05:29.63ID:BSIOcXgH0 構造体の値渡しについては440に書いたとおりだが、
構造体の値返しは通常はあり得ないだろ。
理由は何らメリットがないから。
構造体の値返しは通常はあり得ないだろ。
理由は何らメリットがないから。
462デフォルトの名無しさん (ワッチョイ e39f-rgA5)
2018/01/25(木) 23:50:39.80ID:MvglAbIb0 ないな。呼ぶ側で何らかの方法で領域確保してそのポインタを渡せばいいし。
まあ物凄く良い感じで最適化されて無駄がなくなるならあってもいいが。
まあ物凄く良い感じで最適化されて無駄がなくなるならあってもいいが。
463デフォルトの名無しさん (アウアウウー Sa77-fQjY)
2018/01/26(金) 00:42:46.48ID:d5sN0H9Ta >>443
よほど高次元を扱わない限り決め打ちコピペ、マクロ、キャストを駆使する方法とかある
変態仕様だから俺はおすすめしない
typedef struct {
int element_sz;
int elements[2];
} VEC2;
typedef struct {
int element_sz;
int elements[3];
} VEC3;
#define INIT_VEC(name, size) \
VEC##dim name = {.elements_sz = size}
よほど高次元を扱わない限り決め打ちコピペ、マクロ、キャストを駆使する方法とかある
変態仕様だから俺はおすすめしない
typedef struct {
int element_sz;
int elements[2];
} VEC2;
typedef struct {
int element_sz;
int elements[3];
} VEC3;
#define INIT_VEC(name, size) \
VEC##dim name = {.elements_sz = size}
464デフォルトの名無しさん (ワッチョイ 539f-fPTX)
2018/01/26(金) 00:48:01.29ID:KrxIIzDl0 >>462
それ、ちょっと考えたんだけどさ、無理矢理1行に書けばいいだけなんだよね。
BASIS3 bas;
gram_schmidt(&bas, &v_1, &v_2, &v_3); // (A)
BASIS3 bas = gram_schmidt(&v_1, &v_2, &v_3); // (B)
BASIS3 bas; gram_schmidt(&bas, &v_1, &v_2, &v_3); // (C)
(A)が一般方式だ。
(B)が宣言的な記述で、関数型()な奴らが「美しい」と主張する書き方だ。
とはいえ俺も(A)よりは(B)の方がいいと思ってはいるんだが、
それなら(C)って書けばいいだけなんだよな。
あまり一般的ではないけど、確保&初期化に関してはありかなと思えてきてる。
実はマクロで(B)を(A)に変更することを考えていたのだけど、
そんなことやるなら(C)でいいじゃんってね。
コンパイラが(B)を(A)相当にするのも簡単だとは思うんだけど、(C++のクラスがこれだし)
(C)が出来るんだからこれでいいじゃん、で終わりだよなと。
basを2回書かないといけないのは何とかならんのか、というのはあるが。
それ、ちょっと考えたんだけどさ、無理矢理1行に書けばいいだけなんだよね。
BASIS3 bas;
gram_schmidt(&bas, &v_1, &v_2, &v_3); // (A)
BASIS3 bas = gram_schmidt(&v_1, &v_2, &v_3); // (B)
BASIS3 bas; gram_schmidt(&bas, &v_1, &v_2, &v_3); // (C)
(A)が一般方式だ。
(B)が宣言的な記述で、関数型()な奴らが「美しい」と主張する書き方だ。
とはいえ俺も(A)よりは(B)の方がいいと思ってはいるんだが、
それなら(C)って書けばいいだけなんだよな。
あまり一般的ではないけど、確保&初期化に関してはありかなと思えてきてる。
実はマクロで(B)を(A)に変更することを考えていたのだけど、
そんなことやるなら(C)でいいじゃんってね。
コンパイラが(B)を(A)相当にするのも簡単だとは思うんだけど、(C++のクラスがこれだし)
(C)が出来るんだからこれでいいじゃん、で終わりだよなと。
basを2回書かないといけないのは何とかならんのか、というのはあるが。
465デフォルトの名無しさん (ワッチョイ 539f-fPTX)
2018/01/26(金) 01:18:33.62ID:KrxIIzDl0 >>463
ちなみにそれはちょっと違う。決め打ちにするのであれば、以下の方がいい。
typedef struct {
double x;
double y;
} Vec2;
typedef struct {
double x;
double y;
double z;
} Vec3;
決め打ちのメリットは、
・分かりやすい名前を使える
・型チェックが有効になる
ことだから。
上はそのままだから分かるだろ。下は、例えば内積計算関数が、
3次元*2次元とかの違法の場合に書きようがなく、コンパイル以前にIntellisenseで落とせる事。
elementsが配列になっていると、当然ループになり、3次元*2次元でも書けてしまう。
ただし決め打ちの場合はその後のコンパイラの型チェックで落とされるが。
VecXとして一般化した場合は、この辺が全部通ってしまうわけでね。
ただまあ、C言語は、コンパイラにバグ取りを手伝ってもらう言語ではなく、
そもそもおめーがバグなく書きゃいいだけだろ、というノリなんだが。
ちなみにそれはちょっと違う。決め打ちにするのであれば、以下の方がいい。
typedef struct {
double x;
double y;
} Vec2;
typedef struct {
double x;
double y;
double z;
} Vec3;
決め打ちのメリットは、
・分かりやすい名前を使える
・型チェックが有効になる
ことだから。
上はそのままだから分かるだろ。下は、例えば内積計算関数が、
3次元*2次元とかの違法の場合に書きようがなく、コンパイル以前にIntellisenseで落とせる事。
elementsが配列になっていると、当然ループになり、3次元*2次元でも書けてしまう。
ただし決め打ちの場合はその後のコンパイラの型チェックで落とされるが。
VecXとして一般化した場合は、この辺が全部通ってしまうわけでね。
ただまあ、C言語は、コンパイラにバグ取りを手伝ってもらう言語ではなく、
そもそもおめーがバグなく書きゃいいだけだろ、というノリなんだが。
466デフォルトの名無しさん (ブーイモ MMda-EQ2j)
2018/01/26(金) 01:37:49.07ID:aTHTXGTcM467デフォルトの名無しさん (ワッチョイ 539f-fPTX)
2018/01/26(金) 01:46:48.74ID:KrxIIzDl0468デフォルトの名無しさん (ブーイモ MMda-EQ2j)
2018/01/26(金) 01:56:56.10ID:aTHTXGTcM469デフォルトの名無しさん (ブーイモ MMda-EQ2j)
2018/01/26(金) 01:59:16.78ID:aTHTXGTcM470デフォルトの名無しさん (ワッチョイ 539f-fPTX)
2018/01/26(金) 02:06:14.02ID:KrxIIzDl0 >>469
typedef double[3] VEC3;
で VEC3をvoid*にキャストするのは止めた方がいい。使い物にならないから。
void*で一般化するには何にしてもサイズが必要だから。
サイズ無しで型を一般化したいのなら素直にテンプレート使っとけ。
typedef double[3] VEC3;
で VEC3をvoid*にキャストするのは止めた方がいい。使い物にならないから。
void*で一般化するには何にしてもサイズが必要だから。
サイズ無しで型を一般化したいのなら素直にテンプレート使っとけ。
471デフォルトの名無しさん (ブーイモ MMda-EQ2j)
2018/01/26(金) 02:13:45.05ID:aTHTXGTcM472デフォルトの名無しさん (ワッチョイ 539f-fPTX)
2018/01/26(金) 02:35:47.82ID:KrxIIzDl0 >>471
それは使い勝手の問題だが、
VEC3 v0 = {1,2,3};
VEC3 v2;
v2[0] = 1; // 添字で指定
と
Vec3 v0 = {1,2,3};
Vec3 v1 = {.x=1,.y=2,.z=3}; // 名前が付いているからこれも出来る
Vec3 v2;
v2.x = 1; // 名前で指定
とどっちが見やすいかと聞かれたら、普通は後者と答えるだろ。
個別にした場合はループが回せないが、
2次元と3次元の決め打ちだけで済むならいらんだろ、ってことだよ。
(どうしてもループ回したければ double* p = &v1.x; で行けるし)
ただまあここら辺は外野の俺らが言い合っても意味がない。
使用者が決めればいいだけ。好みの範疇だからね。
それは使い勝手の問題だが、
VEC3 v0 = {1,2,3};
VEC3 v2;
v2[0] = 1; // 添字で指定
と
Vec3 v0 = {1,2,3};
Vec3 v1 = {.x=1,.y=2,.z=3}; // 名前が付いているからこれも出来る
Vec3 v2;
v2.x = 1; // 名前で指定
とどっちが見やすいかと聞かれたら、普通は後者と答えるだろ。
個別にした場合はループが回せないが、
2次元と3次元の決め打ちだけで済むならいらんだろ、ってことだよ。
(どうしてもループ回したければ double* p = &v1.x; で行けるし)
ただまあここら辺は外野の俺らが言い合っても意味がない。
使用者が決めればいいだけ。好みの範疇だからね。
473デフォルトの名無しさん (ブーイモ MMda-EQ2j)
2018/01/26(金) 02:44:51.96ID:aTHTXGTcM474デフォルトの名無しさん (スプッッ Sd7a-pvFI)
2018/01/26(金) 06:55:20.33ID:pq/m69bPd 変数名とかって付けるときなんかルール決めてます?
475デフォルトの名無しさん (ワイモマー MM77-1FxY)
2018/01/26(金) 07:57:07.70ID:CM24TKAOM476デフォルトの名無しさん (ササクッテロル Spab-JKdO)
2018/01/26(金) 10:35:41.57ID:uizSPI6cp 戻り値が構造体ってのは、型宣言に構造体が使えるから言語仕様的に出来なきゃならないんだよ。本当はな。
でも関数内オート変数に一旦格納した型後でreturn オート変数ってやると、コンパイラがアホだからポインターだけ渡してスタック破棄した後に領域コピーしちまうんだ。
運が良ければ残ってるかもね。的な綱渡りさ。割り込みが掛かった時点で死ねる。
でも関数内オート変数に一旦格納した型後でreturn オート変数ってやると、コンパイラがアホだからポインターだけ渡してスタック破棄した後に領域コピーしちまうんだ。
運が良ければ残ってるかもね。的な綱渡りさ。割り込みが掛かった時点で死ねる。
477デフォルトの名無しさん (ワッチョイ 56e7-Tfxv)
2018/01/26(金) 11:39:53.54ID:ogezCzi+0 localtimeは変な奴
478デフォルトの名無しさん (ドコグロ MM3b-dVd5)
2018/01/26(金) 12:58:41.58ID:ZfLE6UH1M479デフォルトの名無しさん (アウアウカー Sa33-bnsf)
2018/01/26(金) 13:00:59.90ID:eO6EE38Oa >>476
それはどう実装されるかの問題。
まあしかし後付け感はあるな。配列はポインタにされちゃうのに構造体の中に配列入れると丸々渡せたりして。
まあ昔々に考えられて互換性を考慮して拡張されてきた言語なので仕方がないようにも思うが。
それはどう実装されるかの問題。
まあしかし後付け感はあるな。配列はポインタにされちゃうのに構造体の中に配列入れると丸々渡せたりして。
まあ昔々に考えられて互換性を考慮して拡張されてきた言語なので仕方がないようにも思うが。
480デフォルトの名無しさん (アウアウエー Saf2-oJ1J)
2018/01/26(金) 13:28:01.67ID:qmyxD0D3a >>477
最近のは引数NULLで桶
最近のは引数NULLで桶
481デフォルトの名無しさん (アウアウエー Saf2-oJ1J)
2018/01/26(金) 13:34:27.88ID:qmyxD0D3a >配列はポインタにされちゃうのに構造体の中に配列入れると丸々渡せたり
あほか
あほか
482デフォルトの名無しさん (ワッチョイ 3a12-fPTX)
2018/01/26(金) 13:45:10.76ID:x7oC2VaJ0 >>427
構造体が話を難しくしているのではないか?
単純に最初から二次元配列を使うだけでいいのでは
Ideone.com - i9PcuN - Online C Compiler & Debugging Tool
ttps://ideone.com/i9PcuN
gram schmidt {{2, 3, 4, 5},{ 7, 8, 9, 10},{ 20, 90, 78, 3},{6, 6, 7, 7}} - Wolfram|Alpha Results
ttp://m.wolframalpha.com/input/?i=gram+schmidt+%7B%7B2%2C+3%2C+4%2C+5%7D%2C%7B+7%2C+8%2C+9%2C+10%7D%2C%7B+20%2C+90%2C+78%2C+3%7D%2C%7B6%2C+6%2C+7%2C+7%7D%7D
>gschmidt 2 3 4 5 7 8 9 10 20 90 78 3 6 6 7 7
これで試すとwolframのと同じになる
構造体が話を難しくしているのではないか?
単純に最初から二次元配列を使うだけでいいのでは
Ideone.com - i9PcuN - Online C Compiler & Debugging Tool
ttps://ideone.com/i9PcuN
gram schmidt {{2, 3, 4, 5},{ 7, 8, 9, 10},{ 20, 90, 78, 3},{6, 6, 7, 7}} - Wolfram|Alpha Results
ttp://m.wolframalpha.com/input/?i=gram+schmidt+%7B%7B2%2C+3%2C+4%2C+5%7D%2C%7B+7%2C+8%2C+9%2C+10%7D%2C%7B+20%2C+90%2C+78%2C+3%7D%2C%7B6%2C+6%2C+7%2C+7%7D%7D
>gschmidt 2 3 4 5 7 8 9 10 20 90 78 3 6 6 7 7
これで試すとwolframのと同じになる
483デフォルトの名無しさん (ワッチョイ 3ad5-WBz1)
2018/01/26(金) 14:03:06.38ID:Q8oR1nja0 スタックがどうたら言ってるやつ
ジジイの昔話をそのまま受け売りしてるだけだな
ジジイの昔話をそのまま受け売りしてるだけだな
484デフォルトの名無しさん (アウアウカー Sa33-bnsf)
2018/01/26(金) 15:18:50.21ID:lz5gZOTMa >>481
何をアホと思ったのか詳細よろしく
何をアホと思ったのか詳細よろしく
485デフォルトの名無しさん (JP 0Haf-5dAg)
2018/01/26(金) 17:02:38.76ID:pySevT5fH 基本型とユーザー定義型の概念が理解出来てないところかな
486デフォルトの名無しさん (JP 0Haf-5dAg)
2018/01/26(金) 17:06:19.25ID:pySevT5fH 小手先のテクニックだけでなく概念そのものしっかり理解した方が良い
487デフォルトの名無しさん (スッップ Sdda-ZRsY)
2018/01/26(金) 17:12:00.37ID:ghv3+z6qd488デフォルトの名無しさん (ブーイモ MMaf-FYQJ)
2018/01/26(金) 18:02:06.76ID:rEWh5MIPM 主にDOS時代の話だなぁ
Sparcのアセンブラで説明する勇者は居らぬか
Sparcのアセンブラで説明する勇者は居らぬか
489愛知人
2018/01/26(金) 20:24:07.81 配列で要素間をまたいで先頭からnビットの位置から6bit取り出してintに入れるにはどうしますか?
490デフォルトの名無しさん (ブーイモ MMaf-xvHi)
2018/01/26(金) 20:31:38.70ID:QZv+kGezM 課題を丸投げするな。
自分なりの解を出して、もっと効率化できるかと聞くならあり。
自分なりの解を出して、もっと効率化できるかと聞くならあり。
>>489
一度に扱う便利な記述法はないから、地道に自分で 1 ビットずつ切り出すしかないのでは?
http://mevius.2ch.net/test/read.cgi/tech/1514772904/111
一度に扱う便利な記述法はないから、地道に自分で 1 ビットずつ切り出すしかないのでは?
http://mevius.2ch.net/test/read.cgi/tech/1514772904/111
492愛知人
2018/01/26(金) 20:35:58.71 >>491
ナカーマ(^人^)
ナカーマ(^人^)
493デフォルトの名無しさん (ササクッテロル Spab-JKdO)
2018/01/26(金) 20:47:46.02ID:uizSPI6cp 組み込み系のヒープってなーに?の環境だと、まだまだ自動変数はスタックに置かれてたりするぞ。
494デフォルトの名無しさん (ササクッテロル Spab-JKdO)
2018/01/26(金) 20:51:44.02ID:uizSPI6cp >>489
ビットフィールドを使う組み合わせ分だけunionしろ。
ビットフィールドを使う組み合わせ分だけunionしろ。
495デフォルトの名無しさん (ワッチョイ c78a-5dAg)
2018/01/26(金) 20:55:00.97ID:nXJEVt+40 C言語の登場当時に画期的だったのは構造体として自由に新しいデータ型を作り出すことが出来たことだった
C++では更にデータだけでは無くて関数まで含めたデータ型がクラスに発展してオブジェクトの概念にまで到達した
要は構造体は新しい概念をプログラムの世界に持ち込むための手段
ベクトルや多次元空間といった概念も構造体によってプログラム内で直接取り扱うことが出来る様になる
C++では更にデータだけでは無くて関数まで含めたデータ型がクラスに発展してオブジェクトの概念にまで到達した
要は構造体は新しい概念をプログラムの世界に持ち込むための手段
ベクトルや多次元空間といった概念も構造体によってプログラム内で直接取り扱うことが出来る様になる
496デフォルトの名無しさん (ワッチョイ b3b3-MCTD)
2018/01/26(金) 20:55:55.12ID:Qu3DLo0l0 配列の任意のところからの 6bit の抜出しってーと
Base64エンコードの実装か?
Base64エンコードの実装か?
497デフォルトの名無しさん (アウアウウー Sa77-rgA5)
2018/01/26(金) 20:57:29.63ID:UUEYCaGha498デフォルトの名無しさん (ワッチョイ b3b3-MCTD)
2018/01/26(金) 20:59:05.70ID:Qu3DLo0l0 まんま 491 だったのか
499デフォルトの名無しさん (ササクッテロル Spab-JKdO)
2018/01/26(金) 21:07:37.65ID:uizSPI6cp >>496
BASE64は3バイトを4つの文字に置き換えるんだから、3バイトづつ処理するコードを書けばいいんだよ。
4文字を3バイトに変える方も同じく4文字づつ処理するコードを書く。
そーすれば、必ず同じ位置からビットフィールド取り出す処理だけになる。
BASE64は3バイトを4つの文字に置き換えるんだから、3バイトづつ処理するコードを書けばいいんだよ。
4文字を3バイトに変える方も同じく4文字づつ処理するコードを書く。
そーすれば、必ず同じ位置からビットフィールド取り出す処理だけになる。
500デフォルトの名無しさん (アウアウウー Sa77-rgA5)
2018/01/26(金) 21:16:02.15ID:UUEYCaGha あれ?もしや俺の書いたお題を解くために質問してたのか?
ま、頑張れ。調べていけば何れわかる。
ま、頑張れ。調べていけば何れわかる。
501デフォルトの名無しさん (ワッチョイ 539f-fPTX)
2018/01/26(金) 22:04:34.58ID:KrxIIzDl0■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 双子パンダ、中国返還を発表 東京都 [少考さん★]
- 【東京】わずか9平方メートル…都心に近い「極小」アパートが若者に人気 狭くても“住めば都” ★2 [煮卵★]
- 【△】コンビニの鮭おにぎり、価格にネット衝撃「ついに…」 驚き続々「これはキツい…」「日本人を殺しに来てる」 ★3 [ぐれ★]
- 「外国人はもう日本を選ばなくなる」経営者たちが抱く深刻な懸念 ベトナム人実習生なしでは「成り立たない街」…【多文化共生企画】★3 [少考さん★]
- 【議員定数削減】維新・吉村代表「高市さんは約束を守ってくれている…信頼関係は裏切られてない」「野党がちゃんと審議してくれよ」 [Hitzeschleier★]
- 【訃報】『スタンド・バイ・ミー』ロブ・ライナー監督の自宅で2人の遺体が発見される [Anonymous★]
- 🍜ハゲラーメン中卒🏡
- 【悲報】検察「山上徹也が安倍晋三さん狙った理由が全く分かんねー。自分の人生が終わってるからといって人に当たんな!」 [616817505]
- 「三つ編み、メガネ、読書好き」→1つ足して人気キャラにしろ! [189987783]
- ジャップの人手不足、限界突破wwwwwwwwwwwwwwwww34年ぶりの高水準 [271912485]
- ハラペーニョとかいう辛いきゅうり
- 全員抱いた
