[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/12 01:51 / Filesize : 317 KB / Number-of Response : 1019
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け 147



1 名前:デフォルトの名無しさん [2018/08/16(木) 23:36:02.22 ID:fOCSKLtw.net]
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
codepad.org/

C11
www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


C言語なら俺に聞け 146
https://mevius.5ch.net/test/read.cgi/tech/1525031257/

2 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 02:03:10.65 ID:itWjjCCs.net]
>>1
乙なんだな

3 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 04:59:04.13 ID:xjFqJl5K.net]
>>1
乙ってんね

4 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 07:32:18.55 ID:TtX4VAeH.net]
前スレ992
https://mevius.5ch.net/test/read.cgi/tech/1525031257/992

ちょっと何言ってるかわからん
983はナマポと何の関係があるのかと聞いているんだが??

5 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 09:26:07.17 ID:VdqNpuZ9.net]
>>1
おC

6 名前:デフォルトの名無しさん [2018/08/17(金) 10:07:35.20 ID:hKcJGgnp.net]
>>1
乙curry

7 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 20:50:45.41 ID:dgg8VvhO.net]
>>4
ちょっとはググって言え。

使い道のないはずのイテレータをC++ではどう活用してるのか、
何故そんなことになるのか、考えてみろ。

8 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 20:54:30.35 ID:dgg8VvhO.net]
というかこのスレワッチョイ外されているんだな。
最近この手の荒らし多いな。

俺はワッチョイ無しのスレは気に入らないから、
>>4の疑問について、ワッチョイ無しのスレ(=このスレ)では答えないことにする。
まあもうヒントは十分に与えたし、馬鹿でなければ辿り着けるはずだが。

9 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 21:23:33.04 ID:oMyhNvCc.net]
イテレータへのこだわりは確かに謎。結局ローレベルな話なんだよね。
foreachという切り口だとイキるのが難しいということか。

10 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 21:26:26.11 ID:2ZlVaol+.net]
ナマポとプログラム言語の関係性はさっぱりわからない



11 名前:デフォルトの名無しさん mailto:sage [2018/08/17(金) 21:41:35.78 ID:zrmK36kH.net]
アホ? list<T>::iteratorがナマポ撲滅のためとか本気で言ってるのか?

12 名前:デフォルトの名無しさん mailto:sage [2018/08/18(土) 00:42:04.17 ID:JHZyD4lZ.net]
改めて明解C読んだけどどう考えても入門者向けじゃねえなこれ
これ最初に読んだせいで挫折した人多そう

13 名前:デフォルトの名無しさん mailto:sage [2018/08/18(土) 01:38:53.00 ID:MBfkrj0T.net]
その教科書は教師を再生産するための商品
独学でどうにかするアイテムじゃあない

教科書の肝心のところに教師から教えてもらうフェイズがひっそりとしのばせてある
だから教師の関与が深い
補助の人間が必要な物品だよ
教科書を誰が買うかっていうと、先生がより先生っぽい演技・活躍を出来るアイテムを買うだろ
だから教師の再生産をするためのアイテムを教師が生徒に買わせるんだよ

教科書は生徒が買うんじゃなくて先生が買う、
そのフェイズでは教師の介在があってはじめて理解できるようなひっかけがなくちゃあならない、
だから「入門者向けじゃねえ」になる

14 名前:デフォルトの名無しさん mailto:sage [2018/08/19(日) 16:42:31.78 ID:Gtfg19Vf.net]
C言語の入門書を読み終えて文法をある程度理解したところなんですけどこの次はどうしたらいいんでしょうか・・・

15 名前:デフォルトの名無しさん mailto:sage [2018/08/19(日) 16:48:10.98 ID:mbogTHsz.net]
何かを作って見る
何を作るかは自分で決める
決められないときは、みんなに相談してみる

16 名前:デフォルトの名無しさん mailto:sage [2018/08/19(日) 16:58:14.33 ID:PTySIHXJ.net]
>>14
アルゴリズムとデータ構造の本を一冊買って勉強しとけ
もちろんコードを書くんだ
コードを書かないならそんな本は買わなくてよろしい

17 名前:デフォルトの名無しさん mailto:sage [2018/08/19(日) 17:25:20.88 ID:ko+uHAy8.net]
>>14
標準ライブラリの関数の仕様を調べつつ、自分で実装してみる

18 名前:デフォルトの名無しさん mailto:sage [2018/08/19(日) 18:06:47.62 ID:WWHW9JqB.net]
printf と scanf のフォーマット処理は勘弁してください

19 名前:デフォルトの名無しさん mailto:sage [2018/08/19(日) 18:41:28.69 ID:vfinpyXk.net]
ありがとうございますとりあえずアルゴリズムとやらの本を買います

20 名前:デフォルトの名無しさん [2018/08/19(日) 21:04:33.17 ID:FQWxbBlW.net]
これどう?初心者だとちょっと難しいかも知れないが。

[改訂新版]C言語による標準アルゴリズム事典 Software Technology https://www.amazon.co.jp/dp/B07CG4RMT5/ref=cm_sw_r_cp_taa_xEvEBbAEA1JNT



21 名前:デフォルトの名無しさん mailto:sage [2018/08/19(日) 21:44:56.14 ID:inem1Ikz.net]
だめでしょ。
アルゴリズムイントロダクションがいいよ

22 名前:デフォルトの名無しさん mailto:sage [2018/08/19(日) 22:58:10.05 ID:akAD1DPm.net]
事典は事典。最小限の解説読んであぁなるほどねって思える人用。

23 名前:デフォルトの名無しさん mailto:sage [2018/08/19(日) 23:13:09.55 ID:wM6XArJ0.net]
詳説 Cポインタ、2013、オライリー・ジャパン

ポインターだけで1冊、本が書けるw

24 名前:デフォルトの名無しさん mailto:sage [2018/08/19(日) 23:22:19.21 ID:lk0ey+5M.net]
引数に配列をとるとき
f(int* data)とf(int data[])の両方が有りだということは分かったのですが、基本的に後者の書き方をしてるコードはほとんど無くて大体前者な気がします。
これはなんででしょうか。後者の方がはっきり配列だとわかります。前者は配列を求められているのかただのint型のポインターを求められてるのか判断つかないと思うんです

25 名前:デフォルトの名無しさん mailto:sage [2018/08/19(日) 23:23:37.77 ID:mbogTHsz.net]
ポインターってそんなに難しかったっけ?

26 名前:デフォルトの名無しさん mailto:sage [2018/08/19(日) 23:26:29.60 ID:6TZ29Z92.net]
ポインタ本ならこっちの方がいい

新・標準プログラマーズライブラリ
C言語 ポインタ完全制覇 大型本
前橋 和弥 (著) 2017/12/7

27 名前:デフォルトの名無しさん mailto:sage [2018/08/19(日) 23:55:12.29 ID:wM6XArJ0.net]
>>24
[ ] は、サイズが変わらない

* は、単なる先頭アドレスで、サイズが変わるかも知れない

28 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 00:01:28.25 ID:FDfJ6Eqh.net]
>>24
配列表記はアドレス表記のエイリアスだから区別するという発想がそもそもない
配列アクセスするコードならアドレスと配列のサイズを引数で渡す

29 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 00:03:41.14 ID:OvqDIJZn.net]
関数の引数としては配列であろうがポインタであろうが、ただのアドレスとしての意味しかない

30 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 00:12:09.78 ID:V9a8ZDkH.net]
>>29
配列でもポインタでも同じってことは分かってるでしょ
それでも元が配列なら配列で受けたほうが分かりやすいのでは?
という疑問だと思う

>>24
ぶっちゃけ、Cに慣れてくるとどっちでもたいして変わらない
配列で受けたいのならそうすればいい。
実際のところ、両方それなりに使われてる。
例えば、main() は int *argv[] にすることが多いんじゃないかな
多分だけど



31 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 00:19:11.88 ID:houfzDz0.net]
>>24
配列っぽい表記に惑わされて、sizeofして長さを求めようとしたというバグを何度か見ました。

32 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 00:26:25.44 ID:ftO9aq8g.net]
 
f(int data[100]) なんて渡し方だと、どう?

33 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 01:02:08.56 ID:houfzDz0.net]
そんな文法はない。
宣言としては有効かな。でも意味はないだろうね。ただのポインタ。

34 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 01:20:33.12 ID:ftO9aq8g.net]
>>33
じゃあ、これをポインタ表記に置き換えて見てください、お願い

35 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 03:08:45.92 ID:k5zLgYIW.net]
>>24
なるほど、じゃあ君は
void swap_int(int lhs[], int rhs[]);
と書いてもらえれば判断つきやすいんだな

36 名前:デフォルトの名無しさん [2018/08/20(月) 04:14:23.20 ID:GHO1XUgy.net]
なんというか、Cならではの問題かな。
Javaもちょっと似てるか。

37 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 06:23:59.34 ID:W9GZumqR.net]
下のようなコードを書くとコンパイルエラーになるでしょ。
int ary[100];
int val;
val = ary++;
このaryは配列だから、ary自体の値を変化させる操作は出来ない。
それの類推で関数の仮引数はポインタで受けるんじゃないかな。
関数の中でポインタ風に使う変数はポインタの形で宣言。

関数内で値を変化させず [] によるインデクスだけでアクセスするなら
仮引数を配列の形で宣言するのも分かりやすい書き方かも。

後は歴史的な事情。
配列風に書くとインデクス計算に掛け算を使われて遅かった名残り。


>>30 俺はmainの引数は main(int argc, char *argv[]) だな。
保守的だけど、こんな場面で独自色出すことないしね。

38 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 07:23:53.30 ID:iMQAgpc+.net]
>>24
あんたの感覚は正しいと思う
同じだと言ってる奴もいるけど
foo(int a[]){
a = … /* エラー */
とか微妙に違う
ただそこまで気にする人があまりいないだけ

39 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 07:29:22.22 ID:OvqDIJZn.net]
関数の引数では配列の要素数は無視されるだけ
変数としての配列とポインタは別物だけど、関数の引数では全く同じもの

40 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 08:10:21.73 ID:iwav6OWh.net]
理由は既出だけど、C言語では配列とポインタは明確に違うよ。
相互変換可能なだけ。



41 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 09:01:16.78 ID:KJZ73X54.net]
ぶっちゃけ、相互変換可能ならその二つは同じじゃねえか?
数学的に

42 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 09:09:43.44 ID:zNROsdOB.net]
同じ点もあるし違う点もある
同じ点を強調したいときに「同じ」
違う点を強調したいときに「違う」
と言うだけ

具体的に語らないと何の意味もない

43 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 09:30:29.85 ID:W9GZumqR.net]
>>38
そのコード片、エラーになるかな?
仮引数のa(intへのポインタ)に
関数内で値を代入することは許されるはずだけど。

44 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 10:24:22.53 ID:B6E8iGMG.net]
代入ではエラーにならんと思うよ。
lvalueとして使えると思う。配列っぽく書けるがあくまでポインタ。

45 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 10:37:33.39 ID:iMQAgpc+.net]
>>43-44
すまん、お前らの言う通りだ
なんか勘違いしていたみたい

46 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 11:31:29.94 ID:mV0yla1z.net]
>>20
パクリで儲かる成功例

47 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 11:46:22.27 ID:B6E8iGMG.net]
引数の配列がホンモノだとすると、非NULLが保証されてないとあかん。
というか構造体渡しと同様の配列渡しが必要だな。まあ使わんか。

48 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 13:08:43.61 ID:k5zLgYIW.net]
>>37
その例は
void func(int ary[100])
{
int val;
val = ary++;
}
との違いを示そうとしているのだとしたら
int *val; じゃないとおかしいだろ

>>37
[]で書くべきと主張するんなら
char argv[][]にしなきゃねえ
もちエラーだけどw

49 名前:デフォルトの名無しさん [2018/08/20(月) 13:28:58.98 ID:HLNtX2wQ.net]
>>47
ま、必要なら構造体の中に入れて渡すと。

50 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 16:12:09.36 ID:K5YeoIjy.net]
配列をパラメータにするのは
サイズが決まってる時にそれを明示したい場合くらいだな

ポインタの方が汎用性が高いから



51 名前:デフォルトの名無しさん mailto:sage [2018/08/20(月) 16:14:24.46 ID:K5YeoIjy.net]
構造体みたいに
値渡しやコピーもあると(たまには)便利

52 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 07:18:10.26 ID:gERn4ySS.net]
>>50
void func(int ary[100]); これと
void func(int *ary); これが
意味が違うと思っているのか?

53 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 07:20:36.44 ID:hlK4Wy69.net]
設計意図を示すコメント的な意味ならあると思う
中身は同じだけど

54 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 07:38:47.67 ID:Xgm2Pp2D.net]
初心者に対して誤解を与えるだけじゃね?
必ずそのサイズで呼ばれると保証されるわけでもないし。

55 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 08:20:0 ]
[ここ壊れてます]

56 名前:7.94 ID:FuTngql1.net mailto: >>52
意味は違うね

要素が100個以外の時に前者を使ってるコードを見たら気持ち悪いだろ?
そういうこと

コンパイラによってはary[1000]にアクセスすれば警告が出る
[]
[ここ壊れてます]

57 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 08:40:04.69 ID:ZsMFgi2m.net]
ほんとに警告出るのか?
サイズ指定に意味がないというのが規格だし、コメント程度の役割しか持たせたらあかんという気が

58 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 08:48:21.68 ID:Y1HyydAv.net]
gcc8でもclang6でも警告でなかったょ…

59 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 09:13:57.61 ID:GIXT+l9b.net]
お高い静的解析ツールだと警告出るかもね。
やってないから知らんけど。

そういう環境で開発できるならコメント以上の意味はあるかも。
仮定で申し訳ない。

60 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 09:28:29.44 ID:gERn4ySS.net]
>>55
おまえの主観は聞いてない
プログラムの実行結果が違ってくる例を示せ



61 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 09:30:24.31 ID:Y6yN+LUK.net]
>>59
屁理屈乙

62 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 09:31:42.61 ID:hk/Hf9fq.net]
>>48
多次元配列なら
void func(int ary{}[100])
{
}
とか
void func(int (*ary){}[100])
{
}

63 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 09:35:21.28 ID:hk/Hf9fq.net]
>>61
間違えた

void func(int ary[][100])
{
}
とか
void func(int (*ary)[100])
{
}

64 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 10:40:22.58 ID:gERn4ySS.net]
>>60
もう一度言う、おまえの主観は聞いてない
正論か屁理屈かはおまえの主観だ
客観的事実を示せ、理屈はそれからだ

65 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 10:57:00.63 ID:vnB4usre.net]
>>63
だれも機械の解釈の違いには言及してない定期

66 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 10:59:30.05 ID:gERn4ySS.net]
>>62
void func(int ary[][100]); これはできるのに
int func(void)[][100] これはできない
{
int ary[][100]; これもできない
ary = 0;
return ary;
}
extern int ary[][100]; と
extern int (*ary)[100]; は意味が違う
結局、[]で書くべきなんて主張は
通用しないところが多すぎる戯れ言だ

67 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 11:01:09.20 ID:gERn4ySS.net]
>>64
プログラム言語は機械に解釈させるためのものだ
自明なことを誰も言ってないなんてことこそ屁理屈そのものだろうが

68 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 11:01:29.60 ID:+F/9g7TB.net]
>>66
糖衣構文

69 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 11:02:23.89 ID:gERn4ySS.net]
>>67
全然関係ねえぜ
暑さで気が触れたか?

70 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 11:05:05.84 ID:eIEuxTun.net]
>>68
機械の解釈が同じでも人間には違う意味に見えるのはあるよな?



71 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 11:55:44.43 ID:gERn4ySS.net]
>>69
void func(int ary[100]); これのどこが
void func(int *ary); これの構文糖衣なんだ?
書いた奴の頭を疑わせる以外にどんな意味があるんだよ

72 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 11:56:39.26 ID:gERn4ySS.net]
サイズが100でなければならない関数なら
void func(int (*ary)[100]); こう書いて
int ary[100];
func(&ary); こう渡せよボンクラ

73 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 12:10:27.14 ID:QteKsmYB.net]
まあ多次元配列を引数にするのは良くないと思うわ

74 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 12:28:57.33 ID:GIXT+l9b.net]
>>71
どうした?
コードレビューで上司にボコボコにされた腹いせか?
こんなとこでイキっても虚しいだけやで。

75 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 12:29:15.96 ID:GIXT+l9b.net]
>>71
どうした?
コードレビューで上司にボコボコにされた腹いせか?
こんなとこでイキっても虚しいだけやで。

76 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 12:47:09.71 ID:EQ4qcC3V.net]
>>72
なぜ?

77 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 12:53:55.98 ID:gERn4ySS.net]
>>73
ここがム板ってことを忘れたか?
技術的な話で来い

78 名前:デフォルトの名無しさん [2018/08/21(火) 12:54:14.69 ID:m1oFA/yA.net]
多次元配列の型は typedef で型名作っておけば楽なのでは?

79 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 12:56:41.15 ID:Fhw28p93.net]
>>68
>>76
この書き込みのどこが技術的な話なんだw
単にイキってるだけじゃん。

80 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 13:04:39.72 ID:gERn4ySS.net]
>>78
構文糖衣の話をしたんだが
構文糖衣と書いてないと読めないオツムなのか?
アホw バカwww



81 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 13:05:57.10 ID:gERn4ySS.net]
さて、買い物に行くぜ
妻子の夕飯を作らにゃならん

82 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 13:09:48.25 ID:O6Fgkzwj.net]
>>75
そりゃわかりにくいからだよ。
引数にするとCの多次元配列の嘘くささがよく表れるわ。
せめて構造体で包むとかして名前を付けた方がいいね。

83 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 13:09:58.77 ID:EQ4qcC3V.net]
>>71
無駄なコスト

84 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 13:10:23.54 ID:RiLuNws8.net]
>>70
それを糖衣構文というかどうかどうでもいいけど
だれも機械の解釈の違いには言及してない定期

>>50>>52
明示とは機械に対してではなく人間に対してのことを言ってるからこの返信は意味がずれてる

85 名前:デフォルトの名無しさん [2018/08/21(火) 14:09:26.92 ID:Xve8S0h8.net]
超初心者です。
シミュレーターで動かしながら独学で学んでいるのですが、
scanfが動かない(スルーされる)ので困っています。scanfが動くシミュレーターってあります?

86 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 14:13:40.03 ID:Xve8S0h8.net]
今はpaiza.ioを使っています

87 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 14:16:15.27 ID:Hz7fBosn.net]
下の入力欄が空白じゃないの?

88 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 14:27:50.04 ID:Xve8S0h8.net]
解決しました。ありがとうございました。

89 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 20:15:22.43 ID:FwleoeVd.net]
for文でこんなのを発見したのです。
for(;;)
ご覧のとおりセミコロンがカッコ内に2つあるだけ。
これはどういうfor文でしょうか。
ググり方も分からないです。

90 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 20:17:35.28 ID:bAEvazF4.net]
無限ループ



91 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 20:22:25.64 ID:i/CPlprw.net]
昔からその書き方の無限ループを好む人は多い
俺が知ってる範囲だとカーニハンもその書き方を好んでいた

92 名前:88 mailto:sage [2018/08/21(火) 20:22:27.49 ID:FwleoeVd.net]
>>89
(*´Д`)ありがとうございました。

93 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 20:27:12.52 ID:mIqstMqN.net]
無限ループって言っても
大概は何かの条件で脱出するわけだから
while (条件) が一番わかりやすいと思う
あ、好みだろうから、反論は不要です

94 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 20:34:59.42 ID:8p839GFL.net]
>>92
俺も無限ループはwhile(TRUE)派だな。
静的解析で怒られるから使うなって人もいるけど。
これも個人の好みなので反論不要です。

95 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 20:45:15.49 ID:FwleoeVd.net]
無限ループには
for(;;)
while(1)
while(true)
などがあるようですが、驚いたことにfor(;;)がC言語の伝統的スタイルなんだそうで。

96 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 20:50:55.87 ID:mIqstMqN.net]
goto 笑

97 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 21:07:06.74 ID:FuTngql1.net]
do {
} while (true);

だな

98 名前:デフォルトの名無しさん [2018/08/21(火) 21:12:46.13 ID:xHZnBR+z.net]
true って新しいCだと使えるの?

99 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 21:15:49.80 ID:Bspmt0aQ.net]
_Bool

100 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 21:18:05.52 ID:mIqstMqN.net]
while (1==1)
なんて



101 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 21:21:39.51 ID:WLqP+HZB.net]
for(;;)は無条件であることを的確に表現してる
条件が書いてないのはこれだけ

102 名前:デフォルトの名無しさん [2018/08/21(火) 21:30:40.05 ID:xHZnBR+z.net]
そういややったことないけど while () はできないのかな?
できたらできたでなんか怖いがw

103 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 21:35:16.36 ID:8p839GFL.net]
>>100
冷静に考えると、何でfor(;;)の真ん中の条件式のとこ空欄でも正しい構文になるんだろうね。
for以外に条件式省略できる構文ってないよね?

104 名前:デフォルトの名無しさん [2018/08/21(火) 21:39:06.78 ID:xHZnBR+z.net]
if () ができたらなんか嫌だな

105 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 22:56:19.30 ID:7hn0MDmO.net]
>>102
確かに…

106 名前:さまよえる蟻人間 mailto:sage [2018/08/21(火) 23:14:00.83 ID:H0lJZ+G5.net]
左右の式が省略できるから、ついでに真ん中の式も省略可能にしたんだろう。

107 名前:デフォルトの名無しさん mailto:sage [2018/08/21(火) 23:18:17.02 ID:mIqstMqN.net]
二つのセミコロンも省略して良いことにしようw

108 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 01:03:40.03 ID:Vm7yolE7.net]
ループの話でふと思い出したんだけど、この書き方キモいと思う?

LOCK();
while (条件) {
  UNLOCK();
  LOCK();
}
UNLOCK();

109 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 01:07:46.55 ID:srSdeWyK.net]
きもいけどきもいだけだから必要ならそうする
Cだしね

110 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 01:11:58.05 ID:+gfjb8L8.net]
condwaitみたいなの、たまに書くと混乱するわ



111 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 01:18:33.81 ID:J6lVaoNe.net]
LOCKして、何かして、UNLOCKして解放する
わけではないんだ?

112 名前:デフォルトの名無しさん [2018/08/22(水) 02:53:55.25 ID:wb9Zg9xS.net]
for (\(^o^)/)

113 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 06:53:07.59 ID:Vm7yolE7.net]
>>108
while (条件) で統一したいと思いつつ、この手の場合LOCK, UNLOCKのインデントがズレててキモいなといつも気になってしまう
まあどーでも良すぎていつも放置するが

>>110
アトミックな条件チェックの話

114 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 07:33:35.95 ID:RPMrdt6N.net]
>>112
手動でインライン展開する必要がなければ、普通は、

while (check_func()) {
}

bool check_func(){
LOCK();
bool retval = XXX; // check something here
UNLOCK();
return retval;
}

とする。
C++なら inline を付ければインライン展開時(元のコード)と似たようなオブジェクトコードが出ることになっている。

115 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 09:35:21.99 ID:ULC6Ul0L.net]
>>107
do {
LOCK();
UNLOCK();
} while (条件);

116 名前:114 mailto:sage [2018/08/22(水) 09:36:42.99 ID:ULC6Ul0L.net]
ごめん、ちがた

117 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 09:52:30.97 ID:2YTphjWh.net]
>>107
条件を判断するためだけにLOCK/UNLOCKを行うコードだとしたら最悪のコードだ

do {
LOCK
判断
UNLOCK
if (!判断結果)break;
} while (1);

素直にこうしなさい

118 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 11:11:08.70 ID:yAP1ongv.net]
条件判断が目的じゃないと思うぞ

119 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 11:35:04.81 ID:yJL450CM.net]
どこが素直なんだ
締め切りが迫ってバグが取れず
なりふり構ってらんなくなったやつが書く
イカレたコードでしかない

120 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 11:58:31.90 ID:DbwOmzYq.net]
>>116
これは酷いw



121 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 12:04:07.83 ID:MGgq/0yt.net]
イカれたコードを紹介するぜ

122 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 12:27:28.23 ID:2YTphjWh.net]
ん?
一番素直だろうが
条件判断の為だけにLOCKしてるという前提で

判断を関数に分ける?
分けるかどうかはこんなちっぽけな理由で判断するべきじゃないよ
判断の度に関数にしてたら意味不明な関数で溢れるぞ

もちろん意味が明瞭で他にも同じ判断を使う可能性があるのであれば
関数やマクロでパッキングすべきだが

123 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 12:36:44.83 ID:yJL450CM.net]
LOCK
判断
UNLOCK
というアトミックなシーケンスを関数にする理由はちっぽけじゃない
LOCK/UNLOCKが必要な具体的な場面を想定しての発言には見えない

124 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 12:50:05.96 ID:2YTphjWh.net]
どういう場面かなんて>>107では判断不能だし
分けるべきか分けないべきかも>>107では判断不能

判断出来ないのに
「わざわざ関数構成を変えるべき」
なんて主張をすべきじゃない

125 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 13:02:48.20 ID:Xk7aTjF/.net]
>>123
いやー、わからんのはあなたに実務もしくは勉強の経験がないからよ

126 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 13:14:18.16 ID:yJL450CM.net]
昨日のvoid func(int ary[100]);にしても
ary[1000]を警告する処理系の具体的な例が挙がってないしな

127 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 13:39:37.67 ID:2YTphjWh.net]
>>124
わからんねえ
エスパーじゃないんだから

経験が少なくて
分けないべき場面が思い浮かばないんだろうねえ

128 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 14:01:43.77 ID:yJL450CM.net]
間違いない、昨日のバカだ
NGIDっと

129 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 14:12:07.92 ID:JOaq3c53.net]
>>127
そういうあなたは昨日のイキってた方の人?

130 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 14:15:28.00 ID:J6lVaoNe.net]
パッと見て何をしているか分からないソースって
後の人が取っても苦労するし、気の毒



131 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 14:19:13.21 ID:J6lVaoNe.net]
多分書いた人の意図は 
while文内の判定時に
LOCKしたいのかとは思うが

132 名前:デフォルトの名無しさん [2018/08/22(水) 14:26:31.81 ID:TfhbroeT.net]
while ( ^∀^)

133 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 15:10:17.96 ID:44OVOulF.net]
check_func()というアドホックっぽい関数名が誤解のもとかな
get条件atomically()にすれば意図が明白

134 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 15:19:38.80 ID:yJL450CM.net]
atomicallyって文言いるかねえ
いちいち全部につけて回るより
LOCK/UNLOCKしてることは
忘れたフリができるほうがいいと思うが

135 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 16:17:52.89 ID:BT6ndhEb.net]
英語圏の人には for (;;) をまとめて熟語的に "forever" と読めて
座りがいいのかも知れん。
カーニハンとパイクの『プログラミング作法』に
それに近いようなことが書いてあった。

136 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 16:25:37.12 ID:6OOlmfSC.net]
>>133
条件取得の関数がすでにあってそれがアトミックでないケースも想定

137 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 16:31:28.34 ID:UfcjGeQr.net]
>>134
なるほどforeverか
そういう風にも読めるな

138 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 16:44:34.35 ID:AU3mefLA.net]
>>134
そう言われると確かに座りが良いかもしれんが、(;;)をeverと読むのか。。。
今の時代では顔文字の失敗作にしか見えんなw

139 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 16:54:07.40 ID:yJL450CM.net]
>>134
#define ever (;;)
とかやんの?

だったら
#define forever for (;;)
のほうがマシだと思う

>>135
空想論なら付き合ってらんねえぜ

140 名前:134 mailto:sage [2018/08/22(水) 17:01:35.42 ID:BT6ndhEb.net]
「その部分のループ、終了条件が色々なんでとりあえず for (;;) で回して」
みたいな口答でのやりとりで for (;;) を forever と読めば手っ取り早いでしょ。
while (1) で…よりも言いやすいんじゃないかと。

これは空想論だけどね。



141 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 17:28:26.65 ID:yJL450CM.net]
無限ループで済むことを
forの第2式を空欄で
なんて回りくどい言い方しねえよ

142 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 17:52:35.43 ID:l5cdWJfA.net]
>>140
別に回りくどくないし
良く見るコードだよ

いろんな人のコードを見たりしないの?
みんないろんなポリシーでいろんなコードを書くから

いろんな書き方を知っていた方が良いよ

143 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 17:59:10.07 ID:l5cdWJfA.net]
while (条件)
でしかループが組めないのはちょっとさみしい

無理やりこの形にするために
>>107みたいな意味不明なコードになる

144 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 18:07:38.93 ID:yJL450CM.net]
>>141
口頭でのやり取りつってんだろ
流れを読めよ

145 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 18:22:36.66 ID:PnEe4J3b.net]
マウント取りたくて必死なアスペだから仕方ない

146 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 18:30:03.99 ID:l5cdWJfA.net]
口頭で
forの第2式を空欄で
なんて発想は出て来なかった

147 名前:デフォルトの名無しさん [2018/08/22(水) 20:52:31.01 ID:ROURn6Ut.net]
for ( ;∀;)

148 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:21:35.96 ID:yJL450CM.net]
> while (条件)でしかループが組めないのはちょっとさみしい

ここは同意
while(1) であろうが for(;;) であろうが同じこと
どっちかが好みで他方で書かれたからって可読性が落ちたとか騒ぐ
救いようのないドアホには付き合ってらんね
それだけだ

149 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:23:43.06 ID:82KbBjx+.net]
>>116を認めないお前も同じようなものかと

150 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:26:52.07 ID:MwkxeX8r.net]
whileで無限ループする場合、0じゃなければ1以外を
使ってもいいわけだがどうする?
電話番号とか使えばオシャレかもしれないよ



151 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:27:18.15 ID:JglTnHlJ.net]
とりあえず、おかしなのに絡まれた >>134 に同情を禁じ得ない。

152 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:28:19.40 ID:yJL450CM.net]
別にiocccのコードが読めろとか言ってない
int *aryがint ary[100]じゃなきゃ読めないとかぬかしたり
while(1)がfor(;;)じゃなきゃ読めないとかぬかす
想像を絶するアホには付き合ってらんねつってるだけ
lock/doit/unlockを関数化する必要性がわからないアホも含まれる

153 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:33:30.14 ID:Jjipv9/i.net]
>>151
「じゃなきゃ読めない」ってどこかに書いてたっけ?
そんな気はしてたが、やっぱり日本語不自由な人だったらしい。

154 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:42:00.39 ID:yJL450CM.net]
じゃあ喚くのやめろ
うるせえんだよ

155 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:43:08.30 ID:Jjipv9/i.net]
>>153
やっぱり日本語不自由な人なんだw

156 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:51:19.93 ID:Vzjpb7lE.net]
何がじゃあなのかわからない
思考がbool値しかないのか

157 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:51:23.19 ID:wgajpaTM.net]
アトミックな操作の意味がわかってたらああはならんのですよ

158 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:52:48.42 ID:Vzjpb7lE.net]
世の糞コードのほとんどはコミュニケーションの失敗により発生する

159 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:54:35.09 ID:Jjipv9/i.net]
C言語以前に日本語もちゃんと理解できない人と議論が噛み合うわけない。
相手しただけ損したわ、アホらしい。

160 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 22:02:56.29 ID:yJL450CM.net]
勝手に損してろ
誰にも賠償請求できない
泣き寝入りだな
アホw バカwww



161 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 22:05:01.83 ID:Jjipv9/i.net]
はいはい、ちゃんとにほんごをべんきょうしてりかいできるようになってから、かきこんでくださいね。

162 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 22:13:51.56 ID:RPMrdt6N.net]
まあ概ね ID:yJL450CM が言っていることは正しい。

>>107のコードは、かなり特殊で、普通はあり得ない。
キモイかと問われれば、キモイと答えるのが正しい。
(必要ならやればいいが)

>>116
それはdo-whileの標準的使い方とは異なるので、混乱を招く。

>>132
check_func()は、107を書き直した場所がすぐに分かる名前にしただけ。
実際、問題なく伝わってるだろ。
本番コードでこの名前はあり得ない。名前が被るから。


ただ、正直、こんなどうでもいいところで拘るのは止めた方がいい。上達しなくなる。
どれでもいいから自分が好きなのを選び、グダグダ言わずにどんどん書いた方がいい。
なお、Goにはwhileが無い。廃止されて、forだけになっている。

ちなみに、俺は
固定長ループ(単純ループ): for … for (int i=0;i<num;i++) 程度の簡単な場合は常にこれ
可変長ループ(複雑なループ): while
無限ループ: while (1)
do-while: 使わない
にしているが、正直、ここら辺は好みだし、自分がどう決めるかだけ。(上記は標準的だとも思っているが)
それよりは、自分の中で統一するほうが重要だ。
(少なくとも自分が書いたコードを読むときに混乱しなくなる)

業務なら、グダグダ言わずコーディングルールに従えばいい。
場所によってはwhileとforのどちらかが禁止とかもある。(どっちかは忘れた)
理由はバグって無限ループにしてしまったときにコード上から判定しづらいとかだったはず。

163 名前:107 mailto:sage [2018/08/22(水) 22:19:27.48 ID:Vm7yolE7.net]
非常にくだらない質問にレス付けてくれてサンクス
なんか荒れる原因つくってスマンかった

やっぱりあの書き方きめえよなあ・・・

164 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 22:57:41.03 ID:RPMrdt6N.net]
>>112
> LOCK, UNLOCKのインデントがズレててキモい
これは諦めろ。
酷い話、インデントがぴったり合ってないと駄目な奴はプログラマに向いてない。
どうやってもずれるからだ。
googleのコーディングルールにも昔は
・インデントを揃える努力は、キリがないしやるだけ無駄だから諦めろ
と書いてあったはず。(今見る限りないが)


ちなみにキモイ理由は、インデントではなくて、完全に入れ子になっていないからだ。
最近はこの「入れ子」の厳密さも増していて、XML(HTML等)では入れ子しか文法的に認めないだろ。
例えば、

<while>
</while>

ならありだが、

<lock>
<while>
</lock>
</while>

は駄目で、

<while>
<lock>
</lock>
</while>

にしなければならない。

165 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 00:15:44.74 ID:wxGNRrqx.net]
>>161
do while の標準的な使い方?
無限ループも標準的な使い方ですよ

do whileはforやwhileに比べてパフォーマンスが良いことがあるので
使える時には積極的に使う人もいます

do whileを一切使わない人もいますが

166 名前:デフォルトの名無しさん [2018/08/23(木) 00:29:51.18 ID:qYtPM3Ou.net]
>>107
対称性保たれてるし、よくあるコードだぞ。
俺はキモイと思わん。

167 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 00:38:41.07 ID:wxGNRrqx.net]
ロックしたい対象がわかりづらい
同じ用途のロック/アンロックが2箇所ずつある

168 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 00:40:13.64 ID:wxGNRrqx.net]
C++の場合だと
無駄にロック期間が長くなる可能性がある

169 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 00:53:05.68 ID:/qY100we.net]
>>167
なんで?

170 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 00:59:32.58 ID:HinwMmX/.net]
頭が良い人ならすぐに意図がくみ取れるけど
メンテする人が必ずしも頭が良いとは限らない
コメント書いてもバグではまって始めて読まれたりするからね
ワザと作られた落とし穴なんて受けとられる危険もありそう

バカでも分かるような書き方をする方が安全かなと思う



171 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 01:59:34.18 ID:y9Wx8uZn.net]
>>164
>>116のコードは、while (1) で開始しても同じだし、(=do-whileを使う意味がない)
そもそも>>113に比べてメリットもないだろ。
そこで do-while 使う奴なんて皆無だと思うぞ。

まあそれでもやりたければやればいい。
個人開発ではメチャやって、その失敗を業務に生かした方がいい。

ただ、上達したければ、ある程度普通のコーディングルールで組んだ方がいい。(世間に合わせる)
自分と相手のルールが一致してたら、相手のコードも読みやすく、
結果、同じ時間、同じ努力でも読める量に違いが出てくるから。

あと、初心者はよく
・色々文法を知ってて、様々な書き方が出来る奴が偉い
と勘違いしがちのようだが、これは明確な間違いだ。(これは他言語では本当に酷い)
こんな糞どうでもいいところを様々な書き方をしているような奴は雑魚だ。
上手い奴は、そいつが決めたやり方に従って、一定の書き方で書く。


172 名前:から、後で読み直すときも楽だってこと。
自分の手書き文字なら相当汚くても読めるだろ。それに近い。

基本的には意味のない手動インライン展開は止めた方がいい。
それは無駄に関数を大きくする。
関数呼び出しのコストが気になるなら、C++なら inline が用意されてる。
そもそもロックなんて糞遅いから、そこでCPU命令数個ケチる意味もないはずだが。

可読性を上げる為に最初にやるべきなのは、関数を分割して小さくすることだ。
呼び出しコストは考えず、分割しまくった方がいい。
結果、抽象度が上がり、読みやすくなる。(全体を読まなくても済むようになる)
[]
[ここ壊れてます]

173 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 03:30:32.78 ID:w8vcpguW.net]
あくまで、プログラマが初心者の場合の話だけど。

いろいろなソースを見てきたけど。
仕事としてやるなら、初心者は、なるべく関数化してほしくないかな。
練習としてなら、いいけどね。

関数化する等して、抽象化した方が見やすいソースになるかというと、
間違いじゃないけど、正しくもない。

有能なプログラマーが書いたソースは素晴らしいし、可読性も申し分ない、うん。
でも、クソなコードは、関数化しちゃいけないものが、関数化されているなどが原因で、
追跡が難くなるんだな。
オブジェクト指向を謳う言語のソースなんか、C以上にプログラマーの手腕によって、
可読性の差が生じてしまう。関数だけでなく、クラスの設計が腐ってて、どうしもないとかね。
そうゆうソースの追跡は辛いわ。

Cの場合、ぐちょくちょなソースの場合、関数化されていない方が、
コードのメンテ等で、強引に追跡する際は苦労が少ない、そんな感じ。

174 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 04:08:27.50 ID:rN/Im7Tc.net]
そんなこたねえよ
関数を作った方がいいしファイルを分けた方がいい
ネストは浅い方がいい

175 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 05:49:50.39 ID:OJr5a4rA.net]
>>116
なぜわざわざbreakなんて使うんだ?
素直にこれでいいでしょ
do {
LOCK
判断結果 = 判断
UNLOCK
} while(判断結果)

176 名前:デフォルトの名無しさん [2018/08/23(木) 06:27:06.53 ID:OG65bZxS.net]
>>173
breakしないと条件が偽の時にも処理が動いてしまうからでは
きっとループの中になんらかの処理があるはず

177 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 06:33:10.57 ID:HkL3Bs+i.net]
>>174
> きっとループの中になんらかの処理があるはず
書いてもないものが見える謎の病気w

178 名前:デフォルトの名無しさん [2018/08/23(木) 07:24:39.71 ID:qYtPM3Ou.net]
>>172
分割しすぎも考えものだけどな。
>>113も視点移動が増える書き方で、可読性やメンテナンス性が悪いという人もいる。

179 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 07:52:07.91 ID:wxGNRrqx.net]
>>170
do while のが軽い場合がある
って常識だと思ったが

>>175
私も当然他の処理があると思った
無いとするとビジーループか?
これだと気持ち悪いとかいう以前の問題になる

180 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 08:12:35.84 ID:wxGNRrqx.net]
>>172
行数やファイルの数で値段が決まる業界の人?



181 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 08:16:18.32 ID:wxGNRrqx.net]
全てのLOCK/UNLOCKのペアはそれだけで関数にする
2重ループやループ内のswitch caseは使わないで関数に分ける

いろんな人がいるね
自分では本当に例外なく実践してるんだろうか

182 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 08:31:20.08 ID:wxGNRrqx.net]
宗教の例

gotoは使ってはいけない
2重ループは使ってはいけない
3項演算子は使ってはいけない
インデントは全て揃える
全てのリテラルは別途定義する
変数名に型情報を埋め込む
関数の途中でreturnしてはいけない
関数は小さいほど良い
条件分の中に関数コールや副作用のある文を書いてはいけない
インクルードファイルをネストしてはいけない
コメントは全て /* */ で (// や #if 0 を使ってはいけない)
全ての演算子のネストに対して ( ) をつける
全てのロック、アンロックのペアは関数に分けなければいけない

183 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 08:38:21.29 ID:NBx27jJF.net]
>>180
宗教の集大成がMISRAだな。
ほとんどがルールにあるわ。

184 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 08:41:48.74 ID:KjqMFLSY.net]
switch caseはは無駄にカラムを消費する。から嫌い。

185 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 09:21:50.49 ID:itriZIP9.net]
>>176
視点移動になるのは下手な関数化だ
サブルーチン呼び出しを1命令と読めるようにするのが
構造化プログラミングの本質

186 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 09:48:06.49 ID:O7XDpWhz.net]
>>183
ある程度の規模の関数になると結局その1命令に見えるはずの処理が正確に何してるかを理解するためには関数内を覗くはめになっちゃう。
覗かないですむほど関数仕様を単純化すると今度は関数が増えて管理の手間が増える矛盾。
後者のほうが正解なんだろうけど、なかなか理想通りには行かないよね。

187 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 09:52:28.00 ID:XUhqK5T4.net]
その方向性の行き着く先がオブジェクト指向

188 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 09:52:54.19 ID:itriZIP9.net]
>>184
ある程度の規模ってLOCK/UNLOCKの話だぜ?

189 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 10:01:30.20 ID:O7XDpWhz.net]
>>186
あ、そなの?
一般論かと思ってた。

190 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 10:11:39.46 ID:rN/Im7Tc.net]
>>178
ファイル数とか初めて聞いたよ。
疎結合高凝集は大抵の場面で正義だよ。トータル1000行のソースだったら好きにすればいいが。
あと関数にもファイルにも「意味のある名前をつける」
ある意味大変難しいんだがこれができれば保守性が全然違う。



191 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 10:34:14.06 ID:3bgfj1QZ.net]
規模は覗かないとわからんよ

1個の関数からしか呼ばれないたった3行の、
ただ単に特定のループの終了条件を示す為の関数
結局両方見ないと意味不明

こんな関数が山ほどあるプロジェクトは悪夢だ

192 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 10:36:26.67 ID:rN/Im7Tc.net]
エディタが悪いんじゃないか?

193 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 10:40:50.31 ID:3bgfj1QZ.net]
たった3行の為に
関数名を考え
関数ヘッダを作成し
プロファイリングや静的解析ツールやMAPの項目も増える

大きく依存した関数なのに
グローバル関数とローカル関数を分けて書くという宗教を理由に
全然別の場所に書く

最悪ですねえ

こういう人は
ifなども含め、複数文からなる全ての条件判断を関数にするんでしょうか
あり得ないですね

もちろん単なる1個のループの終了条件ではなくて
その条件に意味があって
他でも使う可能性があるなら関数に分けるべきですが

194 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 11:09:24.18 ID:itriZIP9.net]
>>187
改めて一般論をしても構わんが

195 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 11:29:56.84 ID:rN/Im7Tc.net]
プロファイリングのときってstaticな関数も同列に扱うもんなの?

196 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 11:40:17.42 ID:HinwMmX/.net]
ある程度の規模、って
サイトによって違うんだし
一般化はできないんじゃ

197 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 12:10:32.95 ID:O7XDpWhz.net]
>>194
地雷臭がするから煽るのやめとけってw

198 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 12:48:09.07 ID:iNuWULI+.net]
>>177
> 私も当然他の処理があると思った
> 無いとするとビジーループか?
> これだと気持ち悪いとかいう以前の問題になる
君のレベルが低いだけ
最近のプロセッサはロック/アンロックをハードウェアレベルで行うようになってるけどビジーループ自体は使われてる
スピンロック でググれ

199 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 15:13:34.14 ID:HinwMmX/.net]
>>195
アリガトス、鼻の敏感なお方

200 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 15:40:21.02 ID:/qY100we.net]
>>191
行数の問題じゃないんだよなあ



201 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 16:15:45.18 ID:rN/Im7Tc.net]
「長いから分割する」という発想で関数作ってる人は割といるんだよ。
そうするとまあコンテクストが広い範囲に分散してつらい。

202 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 16:28:54.58 ID:EgEtgRif.net]
そういえば昔客とソースレビューしてて、
引数チェックのための早期returnしてたら、

客「途中returnはやめてください」
俺「そうするとネストが深くなりすぎますよ?」
客「それなら関数に分けて下さい」
俺「分けた関数の先でも引数チェックするので同じですよ?」
客「それならその先の関数も別の関数に分けて下さい」
俺「…(反論するのめんどくせえ、言うとおりに作ってしまえ)」

結果、思い出すのも恐ろしい意味不明な関数ばかりのコードが出来上がったわ。

203 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 16:54:56.17 ID:rN/Im7Tc.net]
途中リターン禁止ってほんとアホだよね。要はreturnの否定だからな。
最近はMISRAからも外れてるらしいが

204 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 17:00:42.78 ID:itriZIP9.net]
>>191
単なる1個のループの条件に意味がないことなんてあるのか?
たった3行というがlock/unlockという2行で
他のタスクが干渉しないようにガードする必要がある条件だぞ
干渉されるとしたら何でだ? それでも意味がないのか?

205 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 18:14:09.43 ID:wxGNRrqx.net]
>>196
CASもLL/SCもアトミックなR-M-Wも使うけど
どう考えてもそんなコードじゃないだろ
知らない癖に書くなよ

206 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 18:30:50.97 ID:9jasVWpA.net]
そこまでローレベルの話じゃないと思うよ
無関係ではないけど

207 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 19:15:54.01 ID:iNuWULI+.net]
>>203
> 最近のプロセッサはロック/アンロックをハードウェアレベルで行うようになってるけど
って書いてあるのにCASとか出してくるアホ乙

208 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 19:28:43.42 ID:k97Awv43.net]
じゃあハードセマフォか?
それスピンロックじゃないよな

恥の上塗りwww

209 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 19:51:18.42 ID:iNuWULI+.net]
>>206 が必死にググって見つけて来た関係ありそうな(でも全く頓珍漢な)言葉 → ハードセマフォ
自爆志願者かよ w

210 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 19:59:05.89 ID:k97Awv43.net]
>>196自体がとんちんかんなわけだがwww



211 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 19:59:23.06 ID:EgEtgRif.net]
な、ここのスレは読解力が乏しいのにお互いにマウント取り合って傍から見たらアホちゃうのって奴が多いだろ?
よくもまあLOCK/UNLOCK如きで生産性のカケラもない議論できるわ。
よほど暇なんかな?

212 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 20:01:59.92 ID:k97Awv43.net]
LOCK/UNLOCKごとき
だよねえ

213 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 20:17:25.18 ID:e3M4pNLl.net]
ハードセマフォってなに…?

214 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 20:24:14.60 ID:k97Awv43.net]
ハードウェアセマフォ

215 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 20:25:47.93 ID:HinwMmX/.net]
C言語のはなしに戻ってくるのはあと何日先かな

216 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 20:27:03.48 ID:k97Awv43.net]
話題があれば

217 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 20:28:12.68 ID:EgEtgRif.net]
初心者でもベテランでも新しい気付きがあるような内容に早く戻るといいね。

218 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 20:49:36.75 ID:EgEtgRif.net]
400メートルなら連続で泳げるけど、800メートルはよほどペース落とさないと無理だわ。

219 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 20:49:53.03 ID:EgEtgRif.net]
あ、ごめんなさい。
誤爆しましたm(_ _)m

220 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 20:50:49.19 ID:Uo7RxZ0m.net]
400も800も違わんだろう



221 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 21:08:53.97 ID:wxGNRrqx.net]
違うだろ

222 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 21:13:49.03 ID:ZsFwDbjK.net]
>>200
客「(コイツらには二度と仕事頼まんとこ、無能すぎ)」

223 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 21:41:28.27 ID:OJr5a4rA.net]
>>208
ハードセマフォには敵わないよ w

>>211
ググればどんだけ頓珍漢かよくわかる

224 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:03:27.73 ID:ZsGoqTtC.net]
>>220
多分両方ともそれなりに正しい方法を知ってるのに
会話の祖語からとんでもないところに着地するケースだな

225 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:13:17.45 ]
[ここ壊れてます]

226 名前: ID:y9Wx8uZn.net mailto: >>176
> 視点移動が増える書き方で、可読性やメンテナンス性が悪いという人もいる。
それは正しく分割出来てないから。(同じ抽象度で分割する)
読まなくても分かる名前を付けて、結果的に読まないから、視点移動はしない。例えば、以下。

while (1) {
int idx = get_data_idx();
if (idx<0) break;
int* data = prepare_data(idx);
calculate_data(data);
write_back_data(data, idx);
}

この部分はマルチスレッドでのデータ処理だとしよう。
get_data_idxは未演算のデータのインデックスを返し、ない場合は、-1を返すとしよう。
単純に、「インデックスを受け取り、チェックし、データを用意して演算して書き戻す」と読めるだろ。
そこでget_data_idxの中身を見ると、マルチスレッド用だからロックされてる、というだけ。
(余談だが>>107にはこういう具体性が見えないので、
> LOCK/UNLOCKが必要な具体的な場面を想定しての発言には見えない (>>122)
と言われている。これも当たっている)

「視点移動ガー」は読み方を間違っている。
プログラムが階層構造のツリーとして、
縦に掘るのではなく、横に読んで、必要であればその部分だけ縦に読むんだよ。
まず最初は同階層で全体の流れを把握して、必要であればその実装を読む。
実装を読む場合、名前と実装が一致しているかだけのチェックしかしない。

家を建てるとして、
全ての柱が設計図通りに組み上げられているか(全体のチェック)と、
それぞれの柱が設計図通りの仕上がりになってるか(ほぞ穴が正しく加工されてるか)は別にチェックするだろ。
プログラミングも同じで、上位と下位は別にチェックするんだよ。
同時に読まないからいちいち子関数に視点移動なんてしないし、視点移動しなくて済むように同抽象度で分割するんだよ。
[]
[ここ壊れてます]

227 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:16:11.26 ID:y9Wx8uZn.net]
>>177
> do while のが軽い場合がある
> って常識だと思ったが
それはお前が何も知らない初心者だから。

do while は初回のチェックが入らない分速い。(逆に言えば、その分だけしか速くない)
君は「なんだか知らないが do-while は速いんだ!」位の理解しかしてないだろ。
そんな馬鹿はC界隈にはいない。

問題は、この「初回チェックしない分速い」のをいちいち取り上げる必要があるか、という点で、
殆どの場合はどうでもいいから do-while は使われない。
ただし、どうしてもケチりたい場合は使われる。
(ルール等で駄目なら手動で初回部分だけインライン展開しても同じだが、それよりは do-while 使った方がいい)

禁止する必要はないけど、使う局面もない、といったところだと思うよ。

初回のチェックが必要ない=その前か上位で初回チェックが必要ないことを保証している、であって、
全くチェックしていないわけではないんだよ。
結果、処理を整理して集約していくと、while文に吸収されることもある。
或いはそうならないとして、ど頭でチェックだけして不要ならショートカットしたい等の場合、
別にチェック+ do-while になるが、それはメトリックスを増やしてしまう。(静的コールグラフ)
どのパスを通るかがデータ依存になり、それがかなり大きな区画になってしまうだろ。
それよりはショートカット出来ないけどどんなデータでも同じパス、
whileで弾かれて空振りするだけ、のほうがメンテナンスが遙かに楽なんだよ。
ここら辺はさんざんメンテナンスしてれば分かるようになるし、してないうちには分からない。
お前は相当それ以前だが。

「僕はdo-whileの方が速いケースもあるのを知ってるんだ!」ってのは痛いだけだから止めとけ。
自分でアホだと言っているようなものだ。
そんなことはみんな知ってて、その上で議論している。
コード分岐を増やすのが、1回のチェックを端折るのと釣り合うか?なんだよ。

228 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:18:42.67 ID:wxGNRrqx.net]
長文から悔しさがにじみ出てますよ

229 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:19:37.23 ID:ZsGoqTtC.net]
成功するまでリトライみたいなのってdo-while使わない?

230 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:20:37.13 ID:wxGNRrqx.net]
do {
} while (0);

こんなのもごくたまに



231 名前:さまよえる蟻人間 mailto:sage [2018/08/23(木) 22:22:18.83 ID:Z2Fii0dD.net]
do-whileはマクロで文をまとめるのによく使うよ。

232 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:23:48.32 ID:wxGNRrqx.net]
>>227のセミコロンを取ったヤツ

233 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:26:06.91 ID:y9Wx8uZn.net]
ただマジで、初心者はこの手の話に首を突っ込まない方がいい。
時間の無駄で、上達を阻害するだけ。

コードの美しさ/抽象レベル/分割/隠蔽/疎結合が必要なのは少なくとも200-1000行程度であって、
50行程度ならグダグダ言わずにベタで密結合で書き下した方が分かりやすい。
10行のプログラムを動かすにも苦労する初心者にも、
理解に少なくとも200行程度書ける腕前が必要な内容を教えるから空回りする。
(とはいえ、初段階の洗脳は必要悪だ、というのがJava教団であるが。
そしてFizzBuzzはイテレートするクラス、判定クラス、表示クラスに分割され、
イテレータがインタフェースとして活用される、というのが件の悪ノリだった)

1000行程度も書けない初心者は、まず1000行書けることを目指せ。(1000行程度なら勢いで書ける)
コードの美しさその他はその辺になればだんだん分かってくる。
その後に、自分で「コードを減らす」練習をした方がいい。
(コードを「書く」よりも「減らす」方が上達する、と言う奴は居て、俺もそう思う)

それまでは自分でコーディングルールの優劣を判定する頭もないのだから、(これはちゃんと認めた方がいい)
オレオレルールではなくて、コードを書いている連中のルールをそのまま使った方がいい。
俺はgoogleがいいと思うが。
(なお意識高い系C++erはgoogleのルールはもう古い!と言いだした模様。
俺は布教用のルールなんてゴミだと思っているが、まだチェックはしてない)


>>180-181
MISRAは「自分でどのルールが無駄か判断出来る人向け」であって、
お前らみたいな「自分では判断出来ない初心者向け」ではないんだよ。
素直にとりあえずgoogle使っとけ。

234 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:27:16.39 ID:wxGNRrqx.net]
こいつNG

235 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:28:37.43 ID:y9Wx8uZn.net]
>>184
> 覗かないですむほど関数仕様を単純化すると今度は関数が増えて管理の手間が増える矛盾。
管理の手間は増えないと思うが。

もし増えていると感じるのなら、それはCには階層がないことの弊害だ。
関数内関数が普通に使える状況であれば、
関数切り出しは「処理を纏めて名前を付けただけ」でしかなく、
外部からその関数が呼ばれることが文法的にないことを保証出来るから、手間は増えない。

そしてこの点に、妥協的だが現実的なのは「名前に階層も付けてしまう」だ。
つまり、AAA階層内の関数はAAA_get_data_idx()等にし、
もし仮にAAA_get_data_idx内でさらにローカル関数が必要な場合は、AAA_get_data_idx_BBBにしてしまう、というものだ。
関数名が長くなる点を除いて問題はないし、「grep出来るから便利」 by Linus。
OOPも実質同じで、フルパスで呼ぶなら AAA->get_data_idx->BBB()等、_ が -> に代わるだけだが、
実際はオブジェクトポインタ=途中のポインタだから、obj->BBB()となり、長くならずに済む。
(ただし、grep出来なくなる)

俺もCに階層記述能力がないのは問題だと思っているが、
現実的に分割/疎結合化が必要なのは200-1000行単位であり、
ここは「ファイル」(=モジュール)で分割しろ、というのがCだ。
だから不満ではあるが結果的に何とかなってしまうのも事実で、だからこそCがまだ生きながらえている、というのはある。

それにしても「関数内関数」は欲しいんだけどね。あと、ラムダも。
(gccでは前者は標準、後者はマクロで対応出来るが)

236 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:34:14.90 ID:za+Z/fW8.net]
>>230
1000業かけるお題を教えてください(。・´_`・。)

237 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:35:46.52 ID:4VjbPjMt.net]
親切に俺condwaitって書いたのに…

238 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:37:11.87 ID:ZsGoqTtC.net]
関数のレベル感あわせるのむずい
あわないだろ

239 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:49:21.25 ID:OJr5a4rA.net]
>>224
> do while は初回のチェックが入らない分速い。(逆に言えば、その分だけしか速くない)
違う、>>177はコンパイラがあまり賢くない時代の知識で止まってるロートルってだけ

240 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:50:32.61 ID:/xlV6A++.net]
現在通過中
風はそれほどでも無いが雨量がヤバい、尋常じゃない



241 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:50:52.78 ID:/xlV6A++.net]
誤爆した

242 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:50:52.87 ID:wxGNRrqx.net]
「軽い場合がある」

243 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:52:49.79 ID:wxGNRrqx.net]
デメリットは数文字ソースコードが増えるだけ
生成されるバイナリが悪くなることは無い
良くなる可能性はある

244 名前:デフォルトの名無しさん [2018/08/23(木) 22:54:11.95 ID:qYtPM3Ou.net]
>>223
> それは正しく分割出来てないから。
そう。だから、>>113は正しく分割できていない、という人がいると書いたんだが。

245 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:54:57.75 ID:wxGNRrqx.net]
do while を使わない(使えない)人っているよね

246 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 22:57:34.92 ID:wxGNRrqx.net]
常に正しく分割されてるコードしかいじらないわけでも無いだろうし
常に正しく分割出来るとも限らないし
正しいか正しくないかは視点によっても違う

理想だけ語るだけで実際にコードを組んだ事が無さそうな人がいるようだけど

247 名前:デフォルトの名無しさん [2018/08/23(木) 23:01:12.83 ID:FIun2PeI.net]
>>237
気圧申告しないと!

248 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 23:01:58.95 ID:wCnARv+4.net]
ワッチョイないのに結局レスするんか

249 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 23:03:30.31 ID:NMfUyUL+.net]
>>230
>FizzBuzzはイテレートするクラス、判定クラス、表示クラスに分割され、イテレータがインタフェースとして活用される、というのが件の悪ノリだった
どんなコードになるのでしょうか?一度みてみたいものです…

fizzbuzz はこんなコードを書いたことがあります
https://mevius.5ch.net/test/read.cgi/tech/1434079972/25
https://ideone.com/i8wMea

250 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 23:18:47.64 ID:y9Wx8uZn.net]
>>226
具体例あるか?
それ以前に「成功するまでリトライ」自体がよろしくないが。


>>236
do-whileに対して何か特殊な最適化がかかるという話なら、
俺は知らんから突っ込めない。
が、そうだとしても、それでコードを汚すこと自体が間違いだが。


>>241
そう思うんならそれでいい。
平行線だし、議論しても結果は出ない。
君のコードを見て他の人がどう思うかはそれぞれの自由だ。

俺はこの場合関数に括り出す方を選択する。
同様の連中もここにいるだろ。それだけの話さ。

ただそれ以前に、アトミックなんて最初から関数に括り出されていると思うが。
インラインアセンブラを使う気でなければそもそも無理だし。例えば、以下。
https://msdn.microsoft.com/ja-jp/library/dd78zt0c(v=vs.110).aspx


>>245
あー、8は俺だ。
ワッチョイありで立て直してくれればそっち行くわ。
(俺が立て直してもいいが)



251 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 23:43:58.22 ID:y9Wx8uZn.net]
>>246
俺の記憶では、「FizzBuzz Implementation in Java」みたいなタイトルでGitHubに在ったはず。(だが出てこない)
★も2000位ついていたと思った。
クレームついて取り下げるとも思えないから、検索順位下げられたんじゃね?

そんなに見たければ自分で探せよ。多分まだそのまま公開してると思うぜ。

252 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 23:45:37.65 ID:Ml8TmHvL.net]
1000行書けるお題を教えてください

253 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 23:49:35.97 ID:HinwMmX/.net]
宿題で出されているの?

254 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 23:52:07.74 ID:NMfUyUL+.net]
>>248
キーワードありがとうございます
これですね
https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition

255 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 23:55:52.97 ID:0/a4zf/K.net]
>>249
RPGゲーム
これは26万行

ttps://github.com/naota/hengband/tree/master/src

256 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 23:59:12.07 ID:y9Wx8uZn.net]
>>251
それだ。
(俺のキーワードが役に立ったようには見えないが…まあ辿り着けたようだしよしとしよう)

257 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 00:05:09.13 ID:iMeaBiRp.net]
>>247
> ただそれ以前に、アトミックなんて最初から関数に括り出されていると思うが。
そうだな。すでに atomic 実装されていたら俺も使うわ。

関わっているプロジェクトや文化にも依存するから、絶対はない。
例えば Kernel とかだと大半は関数化していない。俺は見た記憶がない。
まあそれだけの話。

258 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 00:16:45.53 ID:O3WQJa8X.net]
>>254
> 例えば Kernel とかだと大半は関数化していない。俺は見た記憶がない。
それソース出せるか?さすがに嘘だと思うぜ。

> C 言語ではアトミック操作を保証できないことから、Linux は基礎となるアーキテクチャーに依存してアトミック操作を提供します。
> https://www.ibm.com/developerworks/jp/linux/library/l-linux-synchronization.html
いちいちインラインアセンブラでは設計効率が悪すぎる。
APIにも当然用意されてるし、普通の人ならそれを使うし、Linusも当然そうだと思うけど。

根本的に「ロック」自体を勘違いしている気がするが。

259 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 00:18:45.88 ID:iMeaBiRp.net]
>>255
俺は見たことがないだけ。気になったら探してくれ。

260 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 00:34:08.73 ID:O3WQJa8X.net]
>>256
grepすれば出てきそうだが探す気はない。

linux kernel内でひたすらインラインされているとしたら、
おそらくスタック容量(1スレ当たり256バイトだったか?)の為だろう。
「関数化」はされていなくても「マクロ化」されていて、
ソースコード的には意味が同じという落ちじゃないか?
それなら君の噛みつき方は悪質だと思うがね。(意図的に議論を空回りさせててる)



261 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 00:37:30.88 ID:iMeaBiRp.net]
>>257
わざわざ自前で関数化していない、という話だぞ。

262 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 00:43:06.32 ID:O3WQJa8X.net]
>>258
それが論点のすり替えなんだよ。
分かってないようだからそれでいいが。

というわけでこの件は終わりだ。

263 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 00:44:16.19 ID:iMeaBiRp.net]
>>259
>>113 が自前で関数化する意図でしか読み取れないからな。
あれが自前実装でないというのであれば、それまでだ。

264 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 00:49:47.27 ID:VJLc5wt0.net]
ソースを示して、突っ込んだ話になることを期待w

265 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 00:53:41.22 ID:ljcg8c0k.net]
wktk

266 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 00:53:57.99 ID:TjDOkMEc.net]
そしてまた質問者が置き去りになるのであった

267 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 01:26:32.42 ID:VJLc5wt0.net]
C言語なら俺に聞け(答えるとは言っていない)ですか?

268 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 01:28:36.02 ID:A5L5xSI8.net]
>>253
「github にある」が重要なヒントとなりました

269 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 05:28:07.79 ID:Nyovr5Qp.net]
>>242
> do while を使わない(使えない)人っているよね
このスレでも>>161とかな
while(){}に比べたら使用頻度は低いけど使用する機会があるから多くの言語で使えるようになってるのになぜかdo〜while使わない俺かっけーとか思ってそうw
ただ今どきパフォーマンスがいいからdo〜whileにすると言うのはナンセンス

270 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 05:50:10.13 ID:Nyovr5Qp.net]
>>247
> 俺は知らんから突っ込めない。
知らないなら突っ込むなよ…
> do while は初回のチェックが入らない分速い。(逆に言えば、その分だけしか速くない)
とか馬鹿丸出しだぞ



271 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 05:54:34.00 ID:Nyovr5Qp.net]
>>255
あん

272 名前:たの言ってるアトミック操作が>>107のLOCK/UNLOCKに相当する
わざとなのか理解してないのかは知らんけどレイヤーの違うものを混ぜて語られてもそりゃ噛み合わんよw
[]
[ここ壊れてます]

273 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 07:43:07.97 ID:ZkSPfVdV.net]
>>247
コードを汚す?
do whileに慣れてないと
無限ループでdo whileを使うのがコードを汚す
になるのか?

274 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 07:52:13.74 ID:ZkSPfVdV.net]
>>266
> ただ今どきパフォーマンスがいいからdo〜whileにすると言うのはナンセンス

forやwhileを選ぶ理由がある所でも
パフォーマンスを気にしてdo whileを選ぶべき
なんて話はしていない

どれを選んでも良いときに
forを選ぶ人、whileを選ぶ人、do whileを選ぶ人がいると言うだけ

275 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 07:57:40.75 ID:ZkSPfVdV.net]
わざわざCを使うってことは
8bitのチープなマイコン、チープなコンパイラだったり
OSやドライバの開発だったり

アセンブラも混ぜて使うこともありそうな
一番低級な高級言語

他の言語よりも記述方法によるパフォーマンスの差
が語られても良いと思う

276 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 07:58:09.19 ID:KrjEv78J.net]
自己防衛のためだけのレスになってきたな
そろそろこの話題も終わりかな

277 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 08:00:01.51 ID:Hnd+Ihtp.net]
ソース見て do {...} while (1); で無限ループになってたら
さすがに「なんで for (;;) や while (1) にせんの?」と尋ねるわ。

…でも「ループ先頭の(決して成立しない)終了判定が入らないから速いんだ」
と言われたら受け入れるかも。分かってやってるんだな、という意味で。
実際のところ for (;;) は無論のこと while (1) でも判定しないと思うけど。

278 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 08:06:02.46 ID:ZkSPfVdV.net]
>>273
3個とも超基本構文だと思うけど

そのレベルだと
「なんでfor(;;)なの?」って聞く人もいそうだな

279 名前:デフォルトの名無しさん [2018/08/24(金) 08:10:04.46 ID:29l6jjMs.net]
そういやループの話でgoto使うってレスないな
ネストが浅くなるし好んで使う人は・・・さすがに居ないか

280 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 08:12:56.91 ID:LUWnMn3S.net]
無限ループって怖くね?



281 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 08:14:01.23 ID:LUWnMn3S.net]
>>274
K&R以来の伝統のCのイディオムだから?

282 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 08:16:04.10 ID:ZkSPfVdV.net]
goto label2

label1:
処理

label2:
条件判断
if (偽) goto label 1;

----
コンパイル結果的にはforやwhileはこんな感じ
条件が無かったとしても goto label2が入る
最適化しない場合やチープなコンパイラだと
このまま最適化されないかもしれない

goto label2
が不要な時にこれを除いたのがdo while
これのほうがバイナリはシンプル

283 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 08:18:32.35 ID:ZkSPfVdV.net]
>>175
多重ループから抜ける時
関数の終了処理
ガシガシに最適化をする時

使いどころはこんな感じ

284 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 08:18:56.33 ID:ZkSPfVdV.net]
アンカーミス
>>275
でした

285 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 08:30:42.38 ID:ZkSPfVdV.net]
gotoを使わない(使えない)人だと
多重ループから抜ける為だけにフラグを使ったり
多重ループから抜ける目的の為だけの理由で
関連する複数のループを分けたりする

double data[4][4];

例えばこんな構造のデータのある統計情報を返す関数
ただし、データに非有限値が入っていたらNaNを返す
デバッグ用に計算結果を出力するコードが入っている
どういうコードにする?

286 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 08:42:44.31 ID:srP6ovAZ.net]
>>270
> どれを選んでも良いときに
無限ループ以外にそんなケースあるか?
かつそれでdo〜whileの方が効率的になるケース示してみ

287 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 09:30:50.97 ID:L5DguHRe.net]
マウント取りたくて必死w

288 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 10:27:50.33 ID:tx++RsbT.net]
do…whileの方が初回の判定がないから速いとしてもループ回数が多いと誤差レベルだし無限ループならコンパイラで最適化されて差がなくなると思う

289 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 10:54:27.69 ID:ZlD+iWMs.net]
4.3BSDのccを-Oなしで使った場合の話をまだしてるやついるのか

290 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 11:04:28.35 ID:Cl8BSI3h.net]
いろいろ誤解が多いので口出ししておく。

アセンブリ言語に手で変換してみるとすぐわかるんだが、
whileは先頭付近に条件分岐が必要な他に、末尾に必ず無条件のジャンプが必要。
対してdo-whileは末尾の条件分岐だけでいい。
このおかげでループ1回あたり命令実行が一つ減る。

しかしコンパイラはwhile文をif文とdo-while文相当に置き換えて最適化するから、差は出ない。
ヘボコンパイラなら最適化しないかもしれないが、
その場合は他の部分も最適化されるはずもないので、速度云々いうだけ無駄。



291 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 11:18:54.46 ID:ZlD+iWMs.net]
そんな誤解しかねないやつ
いるとしたらおまえだけ

292 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 11:36:54.26 ID:/2nrSUYs.net]
do whileは最後に条件を書くのが気に入らないので使わないです

293 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 11:38:27.58 ID:C22mUEBr.net]
環境に依る 以上

294 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 11:40:55.91 ID:7MrYBE0R.net]
使いどころを知らない自慢

forはwhileの上位互換だからwhileを使わない
ていうならまだわかる

295 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 11:44:59.31 ID:7MrYBE0R.net]
>>282
1回目が必ず条件TRUEになることがわかっているwhileループ全て

話題は無限ループだけど

296 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 12:22:55.87 ID:srP6ovAZ.net]
>>286
> しかしコンパイラはwhile文をif文とdo-while文相当に置き換えて最適化するから、差は出ない。
if文?
do 〜whileに置き換えて単に最後の条件文に飛ぶジャンプ命令入れるだけだぞ

297 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 12:29:41.83 ID:9+ua1c/R.net]
アセンブラのジャンプ命令や条件分岐の使い方が分かってない様子だね
ループ全体で命令が1回増えるだけなのにループ1回当たりの命令実行回数が増えるとか言ってるし

298 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 12:30:27.52 ID:7MrYBE0R.net]
----gotoの使用例----

for (y = 0; y < 9; y++){
. . for (x = 0; x < 9; x++){
. . . . if (判定) goto break_loop;
. . . . 処理
. . }
}
break_loop:


----do whileの使用例----

if (FindFirst()){
. . do {
. . . . 処理
. . } while (FindNext());
}

299 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 12:31:56.80 ID:srP6ovAZ.net]
>>291
> 1回目が必ず条件TRUEになることがわかっているwhileループ全て
それ1回目は必ず実行してその結果で2回目以降を実行するかどうかを決めるってことだよね?
典型的なdo〜whileパターン w
むしろそのパターンでwhile(){}使ってるなら単なるアホとしか思えない

300 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 12:34:47.80 ID:7MrYBE0R.net]
>>295
>>294の上のようなループを書くことない?
この場合はforだけど



301 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 12:35:02.93 ID:srP6ovAZ.net]
>>293
昔の話をしてるなら>>286の前半読め
今の話をしてるならそんなことみんなわかってるからいちいちドヤるな

302 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 12:38:53.07 ID:srP6ovAZ.net]
>>296
それは実行結果でループ制御してるわけじゃないだろ
x, y の値はループに入る時には条件満たしているべきだからdo〜whileなんて使っちゃダメ

303 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 12:39:50.18 ID:TJU8554I.net]
do whileってそんな語ることあるの?良くも悪くも単なる構文だと思うけど

ダラダラと長いループだと継続条件が下方に隠れるので嫌ってのはある
それ以外は正直どうでも良い

304 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 12:40:30.21 ID:7MrYBE0R.net]
>>297
今とか昔とかじゃなくて...

PCのプログラムしかしたことが無い人は分からないだろうけど
組み込みのチープなマイコンのコンパイラは
いまだに糞なのはたくさんあるよ

あと、
様々な事情により最適化をOFFにして出荷する事もある

305 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 12:40:57.41 ID:7MrYBE0R.net]
>>298
その条件、何か関係ある?

306 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 12:42:26.92 ID:7MrYBE0R.net]
>>299
単なる構文を無条件で悪とする人がいるって話

307 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 12:53:42.33 ID:90B7//Ue.net]
みんな議論に夢中で楽しそう w

308 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 13:07:51.92 ID:sQPXKPEp.net]
>>299
gotoも単なる構文だしね
あるものは便利に使っていこう

309 名前:デフォルトの名無しさん [2018/08/24(金) 13:32:55.56 ID:Dz3bxc41.net]
https://twitter.com/kondo_orange/status/1032690721822633985


俺は毒舌だから〜、ズバッと切れ味鋭いことも言っちゃうよ〜w、みたいな人、その意見が的を射ていない場合マジでイタイ奴だから気をつけろよ。

勘違いしてる奴けっこういるぞ。

斜に構えて逆張りするならそれなりに思考深めて来ないと。

田端さんとか意見が的外れだったらただのイヤな人だ(笑)
https://twitter.com/5chan_nel (5ch newer account)

310 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 13:41:35.51 ID:B0ktSP35.net]
構造体はメモリのスタックとヒープのどちらに格納されるのでしょうか?



311 名前:デフォルトの名無しさん [2018/08/24(金) 13:53:06.07 ID:MEArwTdw.net]
>>306
書き方次第でどちらにもなりうる。
ポインタ変数作って自分で malloc() 等で初期化すればヒープになる。
関数の中で stastc 付けたり関数外で宣言すると data や bss 領域になると思う。
関数内で static 付けずに自動変数として宣言すれば多分スタックになる。

しかし、必ずそのようなコードを作るコンパイラにしなければならないという決まりはない。

312 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 16:55:09.53 ID:MmiOMKcQ.net]
「C言語」の名前の由来はB言語の後継だからというのは有名だけど、B言語って何でB言語?A言語はないのに。

313 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 17:04:10.98 ID:YufcJqyf.net]
BCPLが元だからB

314 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 17:05:27.92 ID:MmiOMKcQ.net]
>>309
BCPLってどんなん?
PL/Iなら知ってるけど。

315 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 17:15:25.56 ID:ZlD+iWMs.net]
>>310
世話のやける子やなあ
https://ja.wikipedia.org/wiki/BCPL

316 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 17:15:27.99 ID:sQPXKPEp.net]
>>310
CPLの簡単版

317 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 17:15:41.51 ID:C/3CctmU.net]
BCPLの元となったのはCPL
経緯は、CPL→BCPL→B言語→C言語

https://ja.wikipedia.org/wiki/CPL_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)

318 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 17:31:50.43 ID:MmiOMKcQ.net]
へー、BLCLってぱっと見Fortranぽいね。
時代を感じるわ。
C言語みたいにnotationが基本lowercaseになったのって画期的だったのかもね

319 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 17:41:34.02 ID:C/3CctmU.net]
つ EBCDIC

320 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 17:51:17.23 ID:srP6ovAZ.net]
>>300
だからそういう話なら
> 昔の話をしてるなら>>286の前半読め
って書いてあるだろ
応用力ないのかよ w



321 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 17:51:17.53 ID:MmiOMKcQ.net]
うちの会社って、まだHungarian notationを強制しようとする人がいるんだけど、make excessiveせずに説得するにはどうしたら良いでしょうか?

322 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 17:53:50.92 ID:srP6ovAZ.net]
>>301
あんたにはないのかもね
別に全てに人に同意してもらおうとは思ってない
色々おかしい人はいくらでもいるし

323 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 18:14:41.54 ID:ZkSPfVdV.net]
>>316
昔話じゃないって言ってるの
そもそも>>286が間違ってる

324 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 18:40:16.19 ID:1mvArulW.net]
>>319
どこが?

325 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 1 ]
[ここ壊れてます]

326 名前:9:11:10.10 ID:s18ZTF9u.net mailto: >>317
なんだよその不自然な英語混じり文は
なんか変わり者っぽいな
[]
[ここ壊れてます]

327 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 19:16:16.69 ID:C/3CctmU.net]
>>320
これだろ
>whileは先頭付近に条件分岐が必要な他に、末尾に必ず無条件のジャンプが必要。

whileの処理構造ならループ開始直後に条件判定の個所に(1度だけ)無条件ジャンプしてしまえば、あとは条件分岐を繰り返すだけで無条件ジャンプを再び使うことはない
ぶっちゃけ条件判定が先頭付近にあろうが末尾にあろうが何処でもいい
(do-whileの構造だと必ず一度は処理を実行する必要があるのでそんなことは出来ないけど)

328 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 19:23:07.44 ID:YufcJqyf.net]
先頭のほうがええやろ

329 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 19:28:22.47 ID:MmiOMKcQ.net]
>>321
日本人なんだけど日本育ちじゃないのでニュアンスをどう伝えたら良いのか分からないのですみません

330 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 19:30:09.95 ID:1mvArulW.net]
>>322
それがdo-while構造に最適化してるってことでは?



331 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 19:37:04.31 ID:C/3CctmU.net]
>>323
C言語のソースと直接対応させるならそのほうがその方が素直といえば素直だけどね
条件分岐命令はジャンプ範囲に制限があることがある(-128〜+127byte程度)ので下手すれば多段ジャンプを強いられることがある
アセンブラレベルでギリギリの調整をするときはループ構造が制約されることもあるよ

332 名前:デフォルトの名無しさん [2018/08/24(金) 19:50:21.18 ID:rXR3rzpw.net]
条件分岐で飛び先を相対で1バイトで指定しなければならないがそれ以上飛ばしたいなら逆の条件で無条件ジャンプによるループを抜けるようにすれば良いだけでは?

333 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 19:52:23.26 ID:s18ZTF9u.net]
>>324
マジかよ

334 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 19:59:34.12 ID:ZkSPfVdV.net]
>>320
>>278

わざわざ普通のコンパイラの結果を書いてあげてるのに

335 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 19:59:55.12 ID:C/3CctmU.net]
>>327
その方が適切な場合であればそうする
結局のところコンパイラの吐き出したバイナリをアセンブラでチューニングするような状況だと少しでも所要クロックが少なく命令バイト長が短くなるようにロジックを弄るんだよ

336 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 20:05:00.35 ID:s18ZTF9u.net]
ぼくのコードを評価してください
https://ideone.com/YEOWVY

337 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 20:11:20.96 ID:ZkSPfVdV.net]
>>331
趣味の押し付け合いを望んでる?

338 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 20:11:35.07 ID:s18ZTF9u.net]
>>332
はい

339 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 20:13:15.06 ID:YufcJqyf.net]
いや、後ろにあると見づらいだろ

340 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 20:13:19.64 ID:ZkSPfVdV.net]
弱すぎて話にならん



341 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 20:15:18.17 ID:dK+ILFnq.net]
>>331
関数にコメント書いてない
0点

342 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 20:18:15.07 ID:s18ZTF9u.net]
>>336
なるほど

343 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 20:18:52.05 ID:s18ZTF9u.net]
>>335
コーディングを評価してください

344 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 20:21:05.45 ID:ZlD+iWMs.net]
コメントする必要がないのが100点満点なんだが

345 名前:デフォルトの名無しさん [2018/08/24(金) 20:27:27.38 ID:rXR3rzpw.net]
これはダメだ。もう何を言っても無駄だろう。
と思わせれば100点である、と。

346 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 20:30:03.18 ID:QHdFlAyZ.net]
>>331
ネスト不快

347 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 20:33:17.73 ID:s18ZTF9u.net]
>>341
なるほど

348 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 21:19:21.07 ID:ZkSPfVdV.net]
関数分け
いまいち

STATE *state
const でいいところもconstが無い

COL/ROW
名前がサイズじゃなくて位置っぽい

board[x][y]
board[y][x]の方が良いことあるかも

key
ifの羅列よりもswitch case

ways
static constをつけよう

directions
return で8個orしてるのがいやだ

名前
規模のわりに名前が長い

srand
なんで何回もよぶ?

349 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 21:21:50.11 ID:s18ZTF9u.net]
>>343
ありがとうございます

350 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 21:27:17.08 ID:ZkSPfVdV.net]
ROW *2 + 7
同じ式を何度も書かない

state
色の持ち方が変
黒 : user or com
白 : user or com
じゃないの?

directions
意味的にBOOLだよね?



351 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 21:30:34.34 ID:s18ZTF9u.net]
>>345
なるほど

何故でしょうか

C言語にもBOOLがあるのですね

352 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 21:31:42.96 ID:ZkSPfVdV.net]
UIとデータ処理を切り離せるといいね

内容的に、
C++のクラス設計のいい練習になりそう

353 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 21:32:12.09 ID:s18ZTF9u.net]
>>347
切り離したつもりだったのですが不十分のようですね

354 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 21:34:40.57 ID:ZkSPfVdV.net]
>>346
どれが「なぜでしょうか?」

355 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 21:35:17.53 ID:s18ZTF9u.net]
>>349
二番目です。

356 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 21:36:50.13 ID:s18ZTF9u.net]
理解しました。

357 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 21:39:53.18 ID:ZkSPfVdV.net]
com/user が1人ずつ限定なら片方の情報は冗長
データ的にはどっちも黒とかどっちも白とか設定できちゃうので無駄な判別が発生したり

com vs com とか user vs user とか
comアルゴリズム1 とか
将来を考えても
白と黒に対してプレーヤーデータを持つのが良い

358 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 21:42:16.32 ID:s18ZTF9u.net]
>>352
ありがとうございます

359 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 21:57:27.71 ID:O3WQJa8X.net]
結局俺があらかじめ言ったとおりだろ。再掲するが

> あと、初心者はよく
> ・色々文法を知ってて、様々な書き方が出来る奴が偉い
> と勘違いしがちのようだが、これは明確な間違いだ。(これは他言語では本当に酷い)
> こんな糞どうでもいいところを様々な書き方をしているような奴は雑魚だ。
> 上手い奴は、そいつが決めたやり方に従って、一定の書き方で書く。 (>>170)

do-while 知ってる俺ツエーなんてやってるうちは初心者だし上達しない。
そういう勘違いしている奴も(特に他言語では)多いのも事実だし、Cですらそういう馬鹿が押し寄せてきた、というだけだが。
これも既に言ったが、

> なお、Goにはwhileが無い。廃止されて、forだけになっている。 (>>161)

お前らの定義ではGo言語を使う限り上級者ではないことになるだろ。
それはお前らの頭でもおかしいと気づけるだろ。


昨今の問題は、お前らみたいな馬鹿が嘘デタラメを書いて、全くの初心者がそれに惑わされてしまうことだ。
コードの美しさについて語るのなら、10,000行書けるようになってからにしろ。

というか、お前らは「オレオレ流美しいコード」のようだが、それも間違いで、結局の所、
美しいコード=保守が楽なコード、でしかない。ある意味、これが定義だ。
だから大規模(>10,000行)のコードを数年保守すればいやでも分かるし、それをやらないと『自分の頭では』分からない。
だから1000行すら書けない初心者がコードについて語るのがそもそも間違ってる。

既に言ったが、1000行書けるようになれば、「コードの美しさ」について何を議論しているのか分かるようになる。
逆に言えば、それまでは一体何を議論しているのかすら分からないはずなんだよ。
「疎結合化しろと言われたから分割してみたけど、これって必要なの?」ってのが本音のはず。
そこを意識高い系馬鹿が「疎結合は正義」みたいなことを言うから、必要以上に細切れにして余計に分かりにくくなる。
それを揶揄したのが"FizzBuzzEnterpriseEdition"というわけだ。
実際、お前らも少なからずこれに近い状態だと思うよ。

360 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 21:58:37.52 ID:O3WQJa8X.net]
あと、ゆとり馬鹿は goto 文に何故か惹かれるようだが、それも止めとけ。
それは goto 文ではなくラベルブレークが必要なだけであり、
Cではそれが goto 文でも書ける、という話でしかない。
なお、ラベルブレークはJavaScriptでは標準だ。(ただしあまり使われていない)
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/break

ポイントは「break文自身がそのラベルブロック中になければならない」(α)という点だ。
今のリンターが「ある/ないでしか判定しないから一律禁止」の可能性はあって、
リンターの精度が上がって上記(α)の判定が出来るようになれば、その用法では許可されてもおかしくはない。

ただそれ以前に、何度も言っているが、こういうのに拘るのは止めとけ。上達を阻害する。
こんな小手先の「数行の見た目」を改善するテクニックより、既に言ったが
> それはメトリックスを増やしてしまう。(静的コールグラフ) (>>224)
とかの方が遙かに重要なんだよ。
こっちは大規模コードをメンテナンスでこねくり回さないと分からない。
さっさとどんどん規模を上げていくべきだ。
(俳句に拘っていてもラノベが書けるようにはならない)

10行しか書けない初心者だからこそ、10行内で改善が見える部分に拘る。
これ自体は自然なのだけど、
低レベルの実装コードを減らす努力はプログラミングに於いてあまり意味がないんだ。

俺の例で言うと、例えば check_func() 内が、goto文無しで15行、ありで10行で書けたとしよう。
だから何?でしかない。
既に言ったとおり、下位の実装コードなんてどうせ読まないし、読むときは名前と一致してるかだけ。
それが10行であっても15行であっても一瞬で読めるのだから、誤差の範囲。
flagが使ってあっても、「ああ、はいはい」だから問題なし。お約束的展開ならいいんだよ。
そんなことより、見慣れない意図不明のコードで???となって詰まる方が問題。

というか、初心者は『見た目でしか判断出来ないから』行数や文字数に拘ったりするけど、それが間違いで、
まずは「読むのにかかる時間」を最小にするように組むんだよ。



361 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 22:03:48.96 ID:LUWnMn3S.net]
今北産業

362 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 22:24:56.15 ID:wOXsA+Xs.net]
無限ループから
ずっと
続いてた

363 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 22:36:21.12 ID:ZkSPfVdV.net]
実はいま初めてプレイした

置ける場所「*」が非常に見にくい
これいらない

現在の個数もいらない
最後に表示すればいい

強くするには、
マスに点数をつける
駒の点数と石の数と置ける場所の数をスコアとする
スコアの重みは序盤と終盤とで変える
数手先まで読む
終盤は最後まで読む

これだけで結構強くなる

364 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 22:40:17.59 ID:O/FKuFVp.net]
ラベルブレークしたらラベルがFor文の頭にくるもんで読みづらい
ブレークしなかったときだけ値を変えるとかもやりづらい
おれはケツにGotoする

365 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 22:51:34.52 ID:s18ZTF9u.net]
>>358
おける場所マークがにくくくて点数も要らないと感じるのですね
自分の感覚ではわからなくてその感覚を理解できなくて残念です
どうすれば人のてを借りずにそういうことがわかるようにできるのでしょうか

366 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 22:53:48.04 ID:s18ZTF9u.net]
ちなみにjs版もあります
https://pre.aichi.jp/Othello/

367 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 22:55:34.09 ID:O3WQJa8X.net]
>>359
それはラベルブレーク自体ではなく文法の問題だろ。
後置ラベルであれば問題なし。
TypeScriptもGoも型は後置だし、じきにそういう言語が出てくるかもしれんよ。

label: {} // 前置
{} : label // 後置

goto は自由度が高すぎるんだよ。だからリンターには嫌われる。
ただ、お前らが goto に拘るのはさっぱり分からん。
「禁止されたらからこそ使いたくなる」という若気の至りだとしても、ちょっと行きすぎてる。

368 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 23:03:27.47 ID:QHdFlAyZ.net]
dgt:
 if(mmr!=00) free(mmr);
 return mdr;
err:
 mdr=1;
 goto dgt;

369 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 23:04:40.43 ID:ZkSPfVdV.net]
>>362
>>294 の上半分、
gotoを使わないで書いてみて

370 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 23:06:04.22 ID:ZkSPfVdV.net]
>>363
なんで8進数?



371 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 23:07:25.00 ID:QHdFlAyZ.net]
>>364
10にする

372 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 23:09:57.93 ID:QHdFlAyZ.net]
printf("メンテナンス楽しくさせたる0x%o'",>>365);

373 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 23:13:00.47 ID:ZkSPfVdV.net]
こら

374 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 23:21:50.02 ID:QHdFlAyZ.net]
for (y = 0; y < 9; y++){
. . for (x = 0; x < 9; x++){
. . . . if (判定) goto break_loop;
. . . . int nico[x+1]=(8^0^8);
. . }
}
break_loop:

375 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 23:21:54.95 ID:ZkSPfVdV.net]
8進数使わないよね
0も厳密には8進数だけど

2進数の方が欲しい
コンパイラによっては使えたりする

あと16進数の小数

376 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 23:26:13.62 ID:ZkSPfVdV.net]
>>369
顔に見えない

可変長配列?
初期化変じゃね?

377 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 23:29:02.20 ID:YufcJqyf.net]
gcc拡張にはローカルのラベルがある

378 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 23:31:23.64 ID:O3WQJa8X.net]
>>364
お前みたいな初心者には目新しいのかもしれんが、それは古典的な議論なんだよ。
https://stackoverflow.com/questions/9695902/how-to-break-out-of-nested-loops

379 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 23:34:21.43 ID:srP6ovAZ.net]
>>322
だから「前半」って書いてあるだろ
今でもしょぼい環境あるぞとか言われてもそんな特殊な環境出されても困るし

380 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 00:24:24.60 ID:Jgm8sU0X.net]
前半って具体的にどの箇所のこと言ってんの?



381 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 01:05:51.76 ID:Jgm8sU0X.net]
>>286
>しかしコンパイラはwhile文をif文とdo-while文相当に置き換えて最適化するから、差は出ない。

while文をgoto文とdo-while文相当に置き換えて最適化する

の方が正しいような気がする

382 名前:デフォルトの名無しさん [2018/08/25(土) 03:21:08.67 ID:5+GN6Il1.net]
なぜコンパイル後のアセンブリコードで話をしないのか
この辺LLVMとかだとどうなってるんだろうね

383 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 05:48:12.02 ID:r5O9PJUC.net]
>>375
> whileは先頭付近に条件分岐が必要な他に、末尾に必ず無条件のジャンプが必要。
> 対してdo-whileは末尾の条件分岐だけでいい。
> このおかげでループ1回あたり命令実行が一つ減る。

>>376
もうそれ何度も指摘されてる

384 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 06:08:11.27 ID:mKHlp3ya.net]
>>373
わざわざ検索したの?
であなたならどうやるの?

385 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 06:25:56.22 ID:mKHlp3ya.net]
. . for (y = 0; y < 9; y++){
. . . . for (x = 0; x < 9; x++){
. . . . . . if (判定){
. . . . . . . . [breakする場合だけ行う処理]
. . . . . . . . goto break_loop;
. . . . . . }
. . . . . . 処理
. . . . }
. . }
. . [ループ完了した時だけ行う処理]
break_loop:
. . [共通の処理]

386 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 06:28:41.80 ID:/11s7nnG.net]
例外処理にgotoが必要なんて話は
大昔から語り尽くされているのに
今さらドヤられても・・・・

387 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 06:33:15.79 ID:mKHlp3ya.net]
gotoの使い方を知らない人がいるようなので

388 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 08:56:32.19 ID:khOLQHnm.net]
>>379
お前は本当に無知なようだが、
この議論は昔からある有名な物で、結論も『既に』決まっているんだよ。

> No, don't spoil the fun with a break. This is the last remaining valid use of goto :)
> If not this then you could use flags to break out of deep nested loops.
> Another approach to breaking out of a nested loop is to factor out both loops into a separate function, and return from that function when you want to exit.
>
> Summarized - to break out of nested loops:
>
> 1. use goto
> 2. use flags
> 3. factor out loops into separate function calls
> Couldn't resist not including xkcd here :)
>
> enter image description here
>
> source
>
> Goto's are considered harmful but as many people in the comments suggest it need not be. If used judiciously it can be a great tool. Anything used in moderation is fun.
まさにこの通り。
その中でお前がどれを選択するかは自由だし、それは俺含めた他人の選択とは無関係だ。
○○を選択した俺ツエーとイキれる話でもない。

俺はお前がこの『既に結論が決まっている』話をどう持って行きたいのか分からない。
レス乞食なら死ね。

389 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 09:01:26.86 ID:khOLQHnm.net]
>>377
LLVMでも変わらない。
あれはコンパイラの制作を楽にするものであって、魔法の杖ではないから。
https://blanktar.jp/blog/2015/07/c-while-do-while.html

390 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 09:04:29.83 ID:qgzET8Il.net]
CにはJavaのArrayList、HashMap、TreeMapみたいなライブラリはないみたいですが、普通はどうやってデータを管理するのでしょうか?



391 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 09:12:41.48 ID:iDBA6fbU.net]
そう言ったデータ構造を標準機能で使いたいならC++を部分的に利用するのが手っ取り早いのでは?
gccもclangもC言語処理系ではあるけどC++の処理系でもある

392 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 09:15:10.60 ID:qgzET8Il.net]
>>386
C++でできるのは調べました
純粋なCではどうしているのかが分からないので

393 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 09:23:12.83 ID:iDBA6fbU.net]
>>387
標準ライブラリにそんな機能はないよ
純粋なC言語でやるなら、すべて自前で作るか適当な外部ライブラリを探すしかない

394 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 09:46:55.20 ID:Gb+uOyj2.net]
世の中には便利で高性能なライブラリがあるからね。言語自体が機能を内包してた方が迷いはないかも知れんが。
標準ライブラリのhsearchとか誰も使わんな。俺も使わない。

395 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 09:50:09.09 ID:mKHlp3ya.net]
>>383
C言語の話題はもうされ尽くしてるから
お前はこのスレに来なくていいよ

人間の結論も既に決まってる
死ぬ事だ

396 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 09:57:03.08 ID:/11s7nnG.net]
>>389
標準ライブラリってISO/IEC9899:2011か?
hsearchなんてないぞ
bsearchか、もしかして
あれは確かにイケてない関数の1つだな

397 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 10:17:18.44 ID:khOLQHnm.net]
>>390
C言語は50年近い歴史が既にあって、無知な新参がイキる余地はない。
イキりたいだけならJavaScriptかGoに行け。
あっちは馬鹿同士で楽しくやってる。

398 名前:デフォルトの名無しさん [2018/08/25(土) 10:30:26.94 ID:OV9APJVg.net]
Cのコードを自動生成するようなフレームワークもあると思うけど
そういうのが出てきたらCプログラマって必要なくないか?
最近Cのプログラマが需要がないから減ってる気がする

399 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 10:31:25.04 ID:mKHlp3ya.net]
>>392
負け宣言www

400 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 10:33:04.07 ID:/11s7nnG.net]
>>392
自己紹介乙



401 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 10:37:34.03 ID:mM6Mjb64.net]
>>388>>389
hsearchはHashMapみたいですが、確かに使いづらそう・・・
自作するってやっぱりCは初心者には厳しいですね

ちなみにこのスレの方々は自作しますか?それとも外部ライブラリ使う派ですか?
外部ライブラリ使うのであればオススメありますか?

402 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 11:02:02.19 ID:khOLQHnm.net]
>>393
https://www.tiobe.com/tiobe-index/
PC等、富豪プログラミングが許される状況では書く必要はなくなっていくだろう。
Cは必要なところのみDLLに切り出してピンポイント高速化でいい。
ただ、IoTの場合、速度=バッテリの持ち=小型化に直結するので、
今後ともCで書くのが主流ではないかな。

C++は結局の所、C程の速度は出ないし、DLLもイマイチなので主流になりきれなかった。
Rustが完全に立ち上がれば、Cが駆逐される可能性はある。
Javaがなんだかんだで主流なのは、いろんな意味でバランスが取れているからだ。

403 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 11:08:31.00 ID:mKHlp3ya.net]
C++でCの速度が出ない????

404 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 11:17:43.56 ID:mKHlp3ya.net]
ピンポイント高速化とDLLも関係ないし

Cが使われるのはほとんどが小規模組み込み
逆に小規模組み込みはCしか選択肢が無い場合が多い
他の言語と競ってもあまり意味が無い

405 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 11:23:43.36 ID:M70RZcxI.net]
>>396
俺はstringとかarrayとか自作しちゃうかな
Cやるなら他言語の標準ライブラリぐらいは自前で実装できないと話にならないよ
何にもないからね

406 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 11:25:52.08 ID:06VRwQlu.net]
必要なもの(だけ)を作る
使いたいけどないなら作る
これがC言語

407 名前:デフォルトの名無しさん [2018/08/25(土) 11:28:31.78 ID:OV9APJVg.net]
>>397
そういうことじゃなくて
C言語のコードを別の言語で書いて変換すれば
Cでかく必要ないじゃんってこと

408 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 11:30:03.25 ID:LrSeHAMC.net]
>>396
あえて言えばGlibとかですかね。機能は揃ってると思う。
オブジェクト指向っぽいCになれてないとつらいけど…

409 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 11:32:05.97 ID:/11s7nnG.net]
>>397
C++が使えません、まで読んだ

410 名前:デフォルトの名無しさん [2018/08/25(土) 11:35:24.37 ID:0r5h6/lL.net]
言語なんか関係ない
知恵遅れなクソがコード書けば
クソなコードになる

それ以外ない

すべて知恵遅れが原因



411 名前:デフォルトの名無しさん [2018/08/25(土) 11:38:10.89 ID:OV9APJVg.net]
Cで例えばメモリを操作するコードが100行あるとするよな?
そのコードを作成するフレームワークがあるなら
それ使えばいいし、Cいらなくねwwってことな

412 名前:デフォルトの名無しさん [2018/08/25(土) 11:39:19.95 ID:0r5h6/lL.net]
いちいちな
試験もされてないような知恵遅れが作ったフレームワーク()
なんかつかわないからな

障害の原因

413 名前:デフォルトの名無しさん [2018/08/25(土) 11:50:32.60 ID:0r5h6/lL.net]
知恵遅れはまとな思考してれば
まともな人間なら書けないようなコードを平気で書くからな

やばいぐらい頭悪いコードを
それも息するように書くからな

しかもその自覚がない
オツムに致命的な問題がある

アルゴリズムを実現するための言語の問題じゃない
アルゴリズムなんかどんな言語でも実現できる

言語なんかただの方言だからな
Cが畿内の方言なら
C++はエミシの方言
Javaはクマソの方言

414 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 11:57:12.59 ID:0NZIGmlJ.net]
>>400
自分は馬鹿ですって言ってるな

415 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 11:59:50.71 ID:yggGxXGy.net]
>>408
コーディングもアルゴリズムも数学も出来ない学歴コンプなアホは黙ってろ

416 名前:デフォルトの名無しさん [2018/08/25(土) 12:09:09.86 ID:0r5h6/lL.net]
javaはpascalとも混血してる

417 名前:デフォルトの名無しさん [2018/08/25(土) 12:13:02.72 ID:0r5h6/lL.net]
pascalはインチキalgol

418 名前:デフォルトの名無しさん [2018/08/25(土) 12:58:06.70 ID:OV9APJVg.net]
if文の中を抜けたい場合ってどうすればいいですか?
breakはforとwileを抜けるんですよね?
ifを抜けるには?gotoは使いたくないです

419 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 13:05:12.45 ID:Q2JYdW4P.net]
意味不明
if文の中ってどういうこと?
ただ条件式があるだけだろ

420 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 13:05:57.37 ID:J3tnFs/w.net]
goto使え
宗教的に無理ならdo while (0);で囲んでbreak



421 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 13:07:57.58 ID:YF0z4wS0.net]
continueかbreak

422 名前:デフォルトの名無しさん [2018/08/25(土) 13:08:12.82 ID:0r5h6/lL.net]
switchならbreakで抜けれる
breakで抜けなければ、続きが実行される

423 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 13:18:05.46 ID:khOLQHnm.net]
>>402
意味不明。
わざわざCのソースコードを中間出力する意味ないだろ。

>>406
もしかしてCソースなら何でも速くなると思ってるゆとり?

>>413
意味不明。
> if文の中を抜けたい場合
これを他言語でいいから書いてみて。


多分お前は相当な馬鹿で、全てピント外れだと思うぜ。
自分では賢いつもりなんだろうけど。

424 名前:デフォルトの名無しさん [2018/08/25(土) 13:25:50.33 ID:0r5h6/lL.net]
むかしのc++はcのコードジェネレーターだったからな
昔あったinfomixのesqlもインチキなcのコード書くと、それをcのコードにおきかえて出力する

昔、大量のfortranのコードをcに変換しないといけなかったことがあるが
最初は自動変換したがとても読めるシロモノじゃなかったから
ドカタに人力作業をお願いした

ドカタはこういうのは得意

425 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 13:32:40.10 ID:M70RZcxI.net]
>>409
お前ほどじゃないよ

426 名前:デフォルトの名無しさん [2018/08/25(土) 13:41:52.99 ID:0r5h6/lL.net]
cで書いとけば間違いない
なんにでも使える
luaからでも超簡単に使えてしまう

427 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 13:50:16.83 ID:yggGxXGy.net]
if や単なる {} をbreakで抜けられたら便利だと思ったことがある
この場合、多段 break もほぼセットで必要

break n
break if
break for
break switch
break while
break do

こんなのでもいいかも

428 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 13:52:19.69 ID:yggGxXGy.net]
名前付きループ
だとbreakやcontinueにも使えるけど
わざわざ名前を付けるくらいならgotoでいい

429 名前:デフォルトの名無しさん [2018/08/25(土) 13:53:56.31 ID:0r5h6/lL.net]
あいかわらず
低学歴知恵遅れは頭悪いこといってるわ
ループのbreakなのか条件のbreakなのか
コンパイラが解釈できない

コレがザ知恵遅れ

430 名前:デフォルトの名無しさん [2018/08/25(土) 13:56:46.76 ID:0r5h6/lL.net]
for (;;) {
if (!aho) {
break;
}
}

自覚がないアホが治らないからアホの仕様では無限ループから抜けれない
アホのまま無限ループ



431 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 13:57:14.09 ID:Q2JYdW4P.net]
ループならいざ知らず、ただの複文ブロックでブロック外に制御が行きつ戻りつする様ならもはや構造化プログラミングとは呼べない
立派なスパゲティプログラムだろう

432 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 13:57:35.88 ID:yggGxXGy.net]

433 名前:="../test/read.cgi/tech/1534430162/422" rel="noopener noreferrer" target="_blank" class="reply_link">>>422の1行目しか読まずに脊髄反射? []
[ここ壊れてます]

434 名前:デフォルトの名無しさん [2018/08/25(土) 13:58:01.93 ID:0r5h6/lL.net]
低学歴知恵遅れがなんかいってる

435 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 13:59:14.30 ID:yggGxXGy.net]
コーディングもアルゴリズムも数学も出来ない学歴コンプなアホは黙ってろ

436 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:00:01.87 ID:yggGxXGy.net]
日本語も読めない
も追加だな

437 名前:デフォルトの名無しさん [2018/08/25(土) 14:01:13.44 ID:0r5h6/lL.net]
まず低学歴知恵遅れは低学歴知恵遅れの自覚がないからな
cの言語構造がどうなってるかすらわかってない

438 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:01:22.38 ID:yggGxXGy.net]
>>422に対して>>425のレス
ヤバいと思わない?

439 名前:デフォルトの名無しさん [2018/08/25(土) 14:02:44.53 ID:0r5h6/lL.net]
まずどう字句解析されて
どう構文解析されてるかすら分かってない

まあ致命的

低学歴知恵遅れがバカなこと書いて
どやがおしてるワケだからな

相変わらず

440 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:04:07.49 ID:yggGxXGy.net]
>>426
戻るなんて誰か書いてたか?
ただのbreakだ
関数途中のreturnと本質的には変わらん



441 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:04:47.83 ID:XpRMjBtL.net]
短期記憶に障害があるレベル

442 名前:デフォルトの名無しさん [2018/08/25(土) 14:06:09.75 ID:0r5h6/lL.net]
break_if
とかにするならまだ少しは分かる

低学歴知恵遅れは単純になにもモノをしらなすぎる
タイムゾーンスレでも同じように

443 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:07:25.33 ID:E22oAZjP.net]
>>397
> C++は結局の所、C程の速度は出ないし、DLLもイマイチ

どこ情報よ

444 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:08:13.17 ID:yggGxXGy.net]
>>436
本当に1行目しか読んで無いんだな

445 名前:デフォルトの名無しさん [2018/08/25(土) 14:09:13.24 ID:0r5h6/lL.net]
顔真っ赤にしなくてもな
低学歴かどうかなんか
レスからすぐにわかっちゃう

残念なことに

446 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:09:42.60 ID:E22oAZjP.net]
>>396
あればなるべく外部ライブラリを使う
十分に使われてるなら自作よりそっちのほうがいい

447 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:10:54.85 ID:yggGxXGy.net]
>>439
大差でおれに3連敗したアホ
4連敗確定にされたいか?

448 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:20:36.81 ID:yggGxXGy.net]
15GBのテキストデータの解析速度
4倍の差

複数の数値データから上位3個を選ぶアルゴリズム
高速、非破壊、安定 / 低速、破壊、不安定

フィボナッチ数列の計算
計算式、計算アルゴリズム、コードいずれも大差

449 名前:デフォルトの名無しさん [2018/08/25(土) 14:21:26.04 ID:0r5h6/lL.net]
まさに阿Q正伝

450 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:32:32.93 ID:yggGxXGy.net]
>>439の恥ずかしい書き込み

795 :デフォルトの名無しさん (ワッチョイ cf80-gYkF) [] :2018/08/06(月) 23:39:21.68 ID:9v3Lf9b90
全然ずれてない
コールスタックの深さとぴったり一致してる

オツムが足りない知恵遅れのために
さらにムダな補助出力をつけてやったぞ(AとB)

 https://ideone.com/2vP2kN

ここまでくると
メクラやツンボを誘導するのに近い。。。

 ↓この課題は、最終的には、コレにおちつくことになる
  (なんでかは、nを増やせばきっと知恵遅れでも分かるとは思ってたからな)
 https://ideone.com/eaJEjX

補助出力がないとなにやってるのかすら分からないメクラやツンボでは
コレがなにやってるかもきっと理解できないわ
u_l、u_r、u_yしかないからな

知恵遅れは再帰が理解できてないのが、よおく分かったわ




451 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:33:32.61 ID:yggGxXGy.net]
882 :デフォルトの名無しさん (ワッチョイ de80-oNxq) [] :2018/08/11(土) 19:44:24.09 ID:17qcRus/0
で、>>881の結果に基づいて
一般項で処理するコードを書いた

 https://ideone.com/QKTrLi
 一般項で処理

やってみたが
一般項で処理なんかするとともかく遅い

6,942,482 bitsの一般項の計算で
お話にならないぐらいものすごい時間がかかる

calculation 6942482bits
f,10000000,35.082393,34.855636
g,10000000,0.722054,0.720584

つまり、結論としてフィボナッチ数を求めるなら
GMPに用意されてる関数を使うのが一番

再帰階乗演算使う方がはるかにマシ
一般項で求めるのはウンコ

452 名前:デフォルトの名無しさん [2018/08/25(土) 14:35:05.39 ID:0r5h6/lL.net]
なんか低学歴知恵遅れが
意味不明なこと書いてるわ

453 名前:デフォルトの名無しさん [2018/08/25(土) 14:35:56.77 ID:0r5h6/lL.net]
なんかしらんけど
よほど悔しいらしい

低学歴知恵遅れは
自己評価だけは高いからな

454 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:37:01.56 ID:95iULeOH.net]
また半角くんが暴れてんのか・・

455 名前:デフォルトの名無しさん [2018/08/25(土) 14:39:15.70 ID:0r5h6/lL.net]
まず基本的なことが分かってないからな
致命的

456 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:39:54.36 ID:XpRMjBtL.net]
最後に本当に共通ライブラリより高速なロジックがはられてたが
それに対する彼のコメント

// アホが書いたコード
// なにをやってるかは不明

457 名前:デフォルトの名無しさん [2018/08/25(土) 14:43:19.36 ID:0r5h6/lL.net]
オレはちゃんと
アホがスレで書いたコードをwebコンパイラで動かしたからな

458 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:45:50.69 ID:yggGxXGy.net]
で?

459 名前:デフォルトの名無しさん [2018/08/25(土) 14:46:13.55 ID:0r5h6/lL.net]
で、正しい結果になった?

460 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:49:17.98 ID:XpRMjBtL.net]
ビット数がWebだと32なのでそこで矛盾があっただけだった
ちゃんと作って張りなおされたやつは数千桁あっという間に求めるやつだったぞ
みただろ?



461 名前:デフォルトの名無しさん [2018/08/25(土) 14:50:29.77 ID:0r5h6/lL.net]
オレはしっかり低学歴知恵遅れが相当に頭悪いことを
しっかり 実 証 してるからな

462 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:51:46.41 ID:yggGxXGy.net]
半角君が劣化コピーして

if (32bit変数 & 0x8000000000000000)
がTRUEにならんとか騒いでたね

463 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:53:18.47 ID:XpRMjBtL.net]
あれ劣化コピーだったんかいw
最悪だな

464 名前:デフォルトの名無しさん [2018/08/25(土) 14:53:24.24 ID:0r5h6/lL.net]
1~64まで足して
まず0x8000000000000000
になるとかないからな

ぱっと見で分かるレベルだからな
相当な知恵遅れでなければな

465 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:53:37.08 ID:yggGxXGy.net]
>>455
低学歴知恵遅れに大差で3連敗するって
どんな気持ち?

466 名前:デフォルトの名無しさん [2018/08/25(土) 14:55:14.91 ID:0r5h6/lL.net]
かわいそうに
精神的勝利か

低学歴知恵遅れのゴミクズ人間が
まともな人間に勝てるワケがないからな

467 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:56:30.95 ID:yggGxXGy.net]
>>458
n += n;

まだこんな簡単なコードを理解してないとは思わなかった
説明もしたのに

これが1から64まで足すコードに見えるってヤバくないか?

468 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:56:39.44 ID:y6eIypE7.net]
あのカウントは統治分割の管理用じゃなかったっけ?

469 名前:デフォルトの名無しさん [2018/08/25(土) 14:57:17.04 ID:0r5h6/lL.net]
で、実行結果みた?

470 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:57:45.75 ID:yggGxXGy.net]
単に順番にビットを端からスキャンしてるだけ



471 名前:デフォルトの名無しさん [2018/08/25(土) 14:58:36.91 ID:0r5h6/lL.net]
n = 0 (z)0 (f)0 (m)0 (aho)1
n = 1 (z)1 (f)1 (m)1 (aho)1
n = 2 (z)1 (f)1 (m)1 (aho)1
n = 3 (z)2 (f)2 (m)2 (aho)1
n = 4 (z)3 (f)3 (m)3 (aho)1
n = 5 (z)5 (f)5 (m)5 (aho)1
n = 6 (z)8 (f)8 (m)8 (aho)1
n = 7 (z)13 (f)13 (m)13 (aho)1
n = 8 (z)21 (f)21 (m)21 (aho)1
n = 9 (z)34 (f)34 (m)34 (aho)1
n = 10 (z)55 (f)55 (m)55 (aho)1
n = 11 (z)89 (f)89 (m)89 (aho)1
n = 12 (z)144 (f)144 (m)144 (aho)1
n = 13 (z)233 (f)233 (m)233 (aho)1
n = 14 (z)377 (f)377 (m)377 (aho)1
n = 15 (z)610 (f)610 (m)610 (aho)1
n = 16 (z)987 (f)987 (m)987 (aho)1

64bitとか以前の問題だからな

472 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 14:59:30.35 ID:yggGxXGy.net]
お前が劣化コピーしたのがahoの欄

473 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 15:00:08.15 ID:XpRMjBtL.net]
64ビットのとこ直したうえでその結果?

474 名前:デフォルトの名無しさん [2018/08/25(土) 15:00:50.04 ID:0r5h6/lL.net]
知恵遅れの脳内では987がunsigned intでオーバーフローする

475 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 15:00:55.69 ID:yggGxXGy.net]
https://ideone.com/hklTK1

476 名前:デフォルトの名無しさん [2018/08/25(土) 15:01:52.08 ID:0r5h6/lL.net]
当然
https://ideone.com/vhpLPV
851 名前:デフォルトの名無しさん (ワッチョイ 0b50-2km2)[sage] 投稿日:2018年08月11日(土) 00時06分54秒68 [深夜] ID:N9ICkOCi0 [1/10] (PC)
10000進数多倍長
超単純なFFT
演算は乗算と加算のみ
誤差の感じから100000進数でも大丈夫そうですね

計算式は基本以下を多倍長にしただけ
多少の無駄は除いてますが

----
uint64_t f(uint64_t n){
n++;
uint64_t a = 1;
uint64_t b = 0;
uint64_t t;
for (int i = 0 ; i < 64 ; i++){
t = b * b;
b = 2 * a * b + t;
a = a * a + t;
if (n & 0x8000000000000000){
t = b;
b = a + b;
a = t;
}
n += n;
}
return a

477 名前:;
}
[]
[ここ壊れてます]

478 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 15:02:52.94 ID:yggGxXGy.net]
https://ideone.com/4a3zE8
32bit対応版

>>469は64bit環境だと正しく動きます

正しく動かないのは半角君が劣化コピーしたコード

479 名前:デフォルトの名無しさん [2018/08/25(土) 15:03:38.02 ID:0r5h6/lL.net]
知恵遅れがどっかからコピってきたコードはってるわ

480 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 15:04:01.61 ID:yggGxXGy.net]
>>470は正しく動きますよ



481 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 15:04:45.01 ID:5ar3I1wr.net]
半角はいつも負けてるな

482 名前:デフォルトの名無しさん [2018/08/25(土) 15:04:48.85 ID:0r5h6/lL.net]
コレが低学歴知恵遅れが低学歴知恵遅れであることの 実 証 も含めた
エレガントなレス

866 自分:デフォルトの名無しさん (ワッチョイ de80-oNxq)[] 投稿日:2018年08月11日(土) 11時39分50秒69 [朝] ID:17qcRus/0 [1/7] (PC)
とりあえずかわいそうなぐらい頭悪いヤツしかいないのは分かった

一旦、多倍長演算向けに3つの方法を評価する
ちなみにgmpの関数にフィボナッチの関数がついてる
きっとこの速度にすら届かないと考えられる(まだ動かしてない)

↓多倍長演算使ってない3つの方法の簡単なコードがコレ
https://ideone.com/vhpLPV
※ オマケでアホが書いたコード(>>851)も入ってる
※ オレの適切なありがたい注釈がついてる

1.ひたすら足し算

2.一般項
 多倍長演算をするまえに適切な精度を設定しないといけない
 どれぐらいの精度にすればいいかがまだ未解決 ※ とりあえず2回計算することでいけるような気がしないでもない

3.再帰階乗演算
 https://www.ics.uci.edu/~eppstein/161/960109.html
 探した中でコイツが一番いい感じがする
 > This is a recursive algorithm, so as usual we get a recurrence relation defining time,
 > just by writing down the time spent in a call to matpow (O(1)) plus the time in each recursive call
 > (only one recursive call, with argument n/2). So the recurrence is
 > time(n) = O(1) + time(n / 2)

483 名前:デフォルトの名無しさん [2018/08/25(土) 15:05:25.56 ID:0r5h6/lL.net]
webコンパイラで動かしてみ
まちがいなく動かない

484 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 15:05:34.74 ID:yggGxXGy.net]
>>470のリンク先は勝手に半角君が変数を32bitに変えちゃったんで動かないだけ

>>470に直接書いてあるコードはそのままで正しく動く

485 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 15:10:38.17 ID:XpRMjBtL.net]
劣化コピーっていうか
わざわざ書き換えてるじゃねーか!

釣りだった

486 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 15:13:33.29 ID:XpRMjBtL.net]
…ほかがunsigned intだから関数名変えるついでに一緒に変えちゃったのか
これは訴訟レベル

487 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 15:49:42.93 ID:RtKY5+V3.net]
>>474
サマータイムのスレとかでも一人空回りしている。
いや、時々変なのも絡まって巻き込んで空回りしてるか。

488 名前:デフォルトの名無しさん [2018/08/25(土) 15:58:16.40 ID:R/mHQH6/.net]
>>396
俺の場合はCを使ってMapみたいなものまで使わねばならないほど膨大なデータを扱うことが
滅多にないのでだいたいは不要。数百から数千のデータのキーでの検索なんか何も考えずに
ループさせて全検索してしまう。億単位のデータの処理が必要な場合は(だいたいはCではない
言語を使って)RDBにデータを入れてやるかな。その方が楽だから。

ああ、でも、昔 dbm ライブラリとか使ったことあるなあ。半端に多い場合はそういうので良いかも。
今だと Linux ディストリビューションとかは最初から gdbm ライブラリ入ってるの多いと思う。これね。
https://linuxjm.osdn.jp/html/GNU_gdbm/man3/gdbm.3.html

489 名前:デフォルトの名無しさん [2018/08/25(土) 16:25:32.56 ID:R/mHQH6/.net]
>>413
> if文の中を抜けたい場合ってどうすればいいですか?

抜けようとしなくても抜けるので何もする必要はない。

490 名前:デフォルトの名無しさん [2018/08/25(土) 17:08:52.03 ID:kfh++Yrt.net]
半角くん、逃亡www



491 名前: mailto:sage [2018/08/25(土) 17:45:22.21 ID:3TjQPkhu.net]
半角さんは、巷にあふれるただのマウント野郎とは違って、きちんとソースを出している
唯の者ではないと思います

492 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 17:46:03.47 ID:zd32/hlD.net]
コード保守でのバグはこうやって生まれる
うっかりミスの見事な事例がまさかこのスレで見られるとは思ってなかった

493 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 18:00:04.35 ID:yggGxXGy.net]
>>484
コードを出しゃ良いってもんじゃない
自分の劣化コピーのせいで動かないコードに対して
今回だけでもこれだけ書いてるから

>>451,458,465,468,470,472,476

494 名前:デフォルトの名無しさん [2018/08/25(土) 18:02:07.86 ID:0r5h6/lL.net]
2ちゃんねるでしか自己主張できない低学歴知恵遅れが
なんか必死になってるわ

わかりやすいわ
ホント

495 名前:デフォルトの名無しさん [2018/08/25(土) 18:03:03.76 ID:0r5h6/lL.net]
つまりクソニートと
断定できる

496 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 18:06:11.05 ID:yggGxXGy.net]
>>442の1個目3個目は相手が悪かっただけ
としても
2個目は初心者用の課題に対して
初心者が普通に考えるよりはるかに悪いアルゴリズムを選んでおいて
「これを選ばないヤツは知恵遅れ」発言の連投だから

1個目も3個目も言ってることはコロコロ変わるし
「こうしないヤツはアホ」発言をして
自分で変えてるし

>>432も頭おかしいだろ

497 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 18:13:06.50 ID:zd32/hlD.net]
働いてはいないがニートと呼べるほど若くもない
早期退職で悠々自適生活の元組込みソフト開発者だよ

498 名前:デフォルトの名無しさん [2018/08/25(土) 19:03:57.78 ID:kfh++Yrt.net]
半角くんと長文くんのバトルを見てみたい

499 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 19:15:27.06 ID:06VRwQlu.net]
是非別スレでやって欲しい
スレ数はいくら使っても良いから

500 名前:デフォルトの名無しさん [2018/08/25(土) 19:18:01.37 ID:0r5h6/lL.net]
オマエなかなか分かってるわ
オレのレスも文字列的には長い
しかし、中身が濃いから、情報価値も高い
つまり価値が高い情報を継続して提供している

クソニートの長文は情報価値ゼロ
中身スカスカ
ただの落書き



501 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 19:20:58.01 ID:sh4ZcDkv.net]
>>493
フリがなかなか分かりにくいんだけど、そこ笑うとこ?

502 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 19:23:40.50 ID:06VRwQlu.net]
>>494
失笑なら

503 名前:デフォルトの名無しさん [2018/08/25(土) 19:25:27.77 ID:0r5h6/lL.net]
オレに敗北はない
このスレのクソニートにも敗北はない

ただコレには違いがある

オレは正面から戦う

クソニートは戦わない
コイツラは身をひそめながら遠くからとりあえず石投げる

この違い

504 名前:デフォルトの名無しさん mailto:sage [2018/08/25(土) 19:28:15.91 ID:sh4ZcDkv.net]
>>496
ああ、ごめん。
一生懸命ネタ振ってたのね。でもネタフリにしてはあんまり面白くはないかな。
ただ俺はそんな一生懸命なお前嫌いじゃない(笑)

505 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 02:50:43.41 ID:5Jlr+RDR.net]
一日でこの板に少なくとも 23 回「低学歴知恵遅れ」って書いてるね。
どれだけ拗らせてるの?

506 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 03:24:56.95 ID:BwlGzYMc.net]
23/35=65.7%
うぷぷぷ

507 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 09:18:36.35 ID:aDjvXB/e.net]
職場で言われていることをここで

508 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 11:23:23.80 ID:0Dyu3Dip.net]
いやぁ、今どき職場で「低学歴知恵遅れ」なんて言ってくる上司がいたら
ネット掲示板で同じセリフを繰り返すより、録音して訴えるだろ。

それにしても、まるで署名のように必ず投稿文に盛り込むから、
何か隠された意図があるのでは、と深読みしてしまうのも事実。
単にクセになってて本人には意味の薄い間投詞になってるのかも知れんけど。


…読み取れないとガッカリなので一応書いておくけど、
「いくら匿名の電子掲示板でもそういう言葉遣いは良くないよ」と
たしなめている(忠告している、の方が受け入れやすいかな)つもり。

509 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 11:27:57.33 ID:aDjvXB/e.net]
それが当たっていると、訴えるのも恥ずかしいような

510 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 12:44:59.10 ID:d3emHXQQ.net]
>>501
純粋かよ



511 名前:デフォルトの名無しさん [2018/08/26(日) 14:53:35.15 ID:hANAm2gW.net]
低学歴底辺のクソニート、そして底辺ドカタなのは
図星なんでしょ

人間をホントのこといわれると
必死になる

512 名前:デフォルトの名無しさん [2018/08/26(日) 14:56:43.12 ID:hANAm2gW.net]
残念なことに
低学歴かどうかとか
知恵遅れかどうかとか
クソニートかどうか
底辺ドカタかどうか
レスからすぐに分かってしまう

まともに人間がみればすぐに分かる
キミラはなまとなに人間未満のゴミクズなワケ

その自覚すらない
だからまともな人間にすらなれないわけ

わかった?

513 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 16:10:55.42 ID:dQLVYknK.net]
必死なのはお前じゃん

514 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 16:12:25.06 ID:LX/My+gD.net]
半コテって一番タチ悪いな
コテハンつけろよNGにするから

515 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 16:25:44.03 ID:lAySnCDy.net]
本当は夏休み中の中高生じゃないのか?
何だか妙に精神年齢が幼く思える

516 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 16:27:03.18 ID:aDjvXB/e.net]
名前は半角カタカナで頼む

517 名前:デフォルトの名無しさん [2018/08/26(日) 16:29:48.93 ID:hANAm2gW.net]
図星でしっかり反応してるしな

やっぱりなこのスレは
駆除が必要な典型的な低学歴知恵遅れの
クソニートとか底辺ドカタしかいないわ

518 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 17:09:28.74 ID:BwlGzYMc.net]
小馬鹿にした発言が頭悪そうな最高に痛いやつ

519 名前:デフォルトの名無しさん mailto:sage [2018/08/26(日) 18:07:37.48 ID:ujNq2aVI.net]
>>508
確かに夏休み始まった辺りから見かけるようになった気がする

520 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 06:20:27.93 ID:sdfxNc/O.net]
>>499
このスレだけなら 35 だが、この板全体の数なんだ。
必死チェッカーもどきを見たら堂々の 2 位で笑った。
いや、彼の御高説をもっと見たかったんだ。
ちなみに「知恵遅れ」はその 23 とは別に単独で 16 回出てきたよ。



521 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 08:24:49.48 ID:4HBkx10J.net]
自称、俺最強君()は、昔からしばしば見かけるけど。
小学生にも苦笑されそうなレスばかりで、相手をする気にならないんだよね。

hissi.org/read.php/tech/20180825/MHI1aDYvbEw.html
hissi.org/read.php/tech/20180826/aEFOQW0yZ1c.html

勝手に勝利宣言して逃亡するまで放置しておくのが吉。

522 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 08:45:35.65 ID:4ArgrBnx.net]
半角さんはこの板の唯一の良心
この板は腐ってる

523 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 11:56:02.39 ID:woJf6ZC9.net]
>>413
if (条件) {
 …
 …
 ここで(ブロックから)抜けたい -(1)
 … -(2)
} else { … }

こういうこと? (1) はさらに if で条件付で分岐しないと意味がないけど…
※ (1)で分岐しないかぎり (2) 以降が無意味のコードになる

if の外側を do { } while(0) で外を囲って break; したら?

524 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 12:18:18.46 ID:yF4/ft+h.net]
>>515
これだな

525 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 12:18:56.82 ID:yF4/ft+h.net]
おまえらはすぐにどうでもいいことに流される

526 名前:デフォルトの名無しさん [2018/08/27(月) 12:34:41.00 ID:ywsjsNTA.net]
>>516
それだったら2を実行するための何らかの条件がある筈なのでそのためのifブロックの中に2を入れればよい。
そつではなく無条件に2を実行したくないならばソースから削除するかコメントにでもすればよい。

527 名前:デフォルトの名無しさん [2018/08/27(月) 12:36:44.69 ID:ywsjsNTA.net]
すまん。スマホでフリック入力しててタイプミスした。

528 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 12:42:48.65 ID:woJf6ZC9.net]
>>519 意図は伝わったぜー
確かにw

if (条件1) {
 …
 if (条件2) { … -(1) } else { … -(2) }

529 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 12:48:15.12 ID:nj2QXsVo.net]
>>519
そりゃ方法なんていくらでもあるよ
そういう方法をとりたくないってことだろ
理由はしらんが

たとえば(-2)が大きくてインデントを変えたくないとか

530 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 12:50:40.87 ID:vY3QDx2y.net]
だから何でdo while(0)なんて変態コードに固執するんだよ



531 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 12:51:47.69 ID:YYT/vI56.net]
>>522
>>521の方法を思い付かなかった、or 妥当な書き方であると知らない、だけだは?

532 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 12:54:54.13 ID:woJf6ZC9.net]
元質問者に聞くしかない 「goto は使いたくない」の条件で

533 名前:デフォルトの名無しさん [2018/08/27(月) 12:59:44.74 ID:ywsjsNTA.net]
ブロックというものを中に入ったら出られないものと勘違いしているとか。
最初にforやwhileを覚えちゃって勘違いに繋がったとか。

534 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 13:22:18.19 ID:vY3QDx2y.net]
何人たりともforより先に関数のブロックを憶えるのにね
関数のブロックだけが何か特別なものと思い込んでるケースが多い

535 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 13:25:30.84 ID:Q5lEKL35.net]
goto 便利だけどなぁ。
break するがためのフラグ作って何ブロックも break するとか goto を避けるがためのいびつな if を連続させるとかよりよほど可読性が高い。
もちろん意味を的確に表したフラグやifの構造にできるに越したことはないけどさ。

536 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 13:28:07.17 ID:aXwyVMA/.net]
>>523
あえて固執して解決方法を編み出しておくと
ひょんなときに役立つことがあるしな
準備なんてのは9割無駄で当たり前だよね

537 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 13:31:18.13 ID:vY3QDx2y.net]
ジャクソン法やワーニエ法みたいに
データ構造とプログラム構造を一致させる構造化プログラミング()では
データが損傷していた場合にはプログラム構造を一致させることができない
よって構造化定理を諦めたアプローチをせざるを得ない
こういうのがgotoやlongjmpの出番

538 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 13:32:12.14 ID:vY3QDx2y.net]
>>529
その説明じゃ変態行為に固執する理由が説明できてないだろ
ええ加減にせんか、この変態!

539 名前:デフォルトの名無しさん [2018/08/27(月) 13:35:23.06 ID:ywsjsNTA.net]
ま、Cの場合は適切にgoto使った方が良いだろうな。後から作られた言語では break でラベル指定できるだの例外処理できるだのしてるから使わなくて済むようになってるわけで、それのないCはそれの代わりにgoto利用しちゃった方が分かりやすく書ける。

540 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 13:41:42.47 ID:vY3QDx2y.net]
いやCのgotoは制限がキツすぎて
いざという時には役立たず
だからlongjmpがある



541 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 14:22:47.97 ID:Q5lEKL35.net]
そんな制限キツかったっけ?
longjump の方がキツいでしょ

542 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 14:23:38.81 ID:vY3QDx2y.net]
何がキツいって関数から出らんない

543 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 14:34:05.72 ID:J1p6Vf0T.net]
setjump/longjumpは簡易タスクディスパッチャーをC言語だけで実現するためだけにあるのかと思ってたよ。
それ以外の用途はあんまり思い浮かばないなぁ。

544 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 14:40:44.92 ID:TsaU1TVW.net]
自分で対処不能なエラーが起きたときに、初期化してやり直す時に使ったな
だもんで通常の処理の流れで使うものだとは思わなかった

545 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 16:09:02.07 ID:vY3QDx2y.net]
ディスパッチャとしてはダメダメじゃん
jmp_buf jb;

void sig(int n)
{
longjmp(jb, 1);
}

int main(void)
{
signal(SIGINT, sig);
if (setjmp(jb) == 0) for (;;) ;
else puts("ok");
return 0;
}
俺んとこではokが出ない
おまいらんとこではどんな結果になる?

546 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 16:16:45.47 ID:J1p6Vf0T.net]
確かsignalとlongjmpは相性悪かったような?
よく覚えてないけど。

547 名前:デフォルトの名無しさん [2018/08/27(月) 16:27:43.33 ID:VuJs8kRo.net]
>>538
こちらは Linux (CentOS7)だが、出たよ。

548 名前:デフォルトの名無しさん [2018/08/27(月) 16:29:13.02 ID:VuJs8kRo.net]
>>539
sigsetjmp(), siglongjmp() ってのがあるので、そっち使った方が良さそうではあるな。

549 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 16:33:51.80 ID:J1p6Vf0T.net]
Linuxとかならpthreadがあるのでわざわざ自分でディスパッチャ作ることはないと思うけど、組み込み用に簡易的に作ることはあるかもね。

俺は組み込みならprotothreadsのほうがシンプルで好き。

550 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 17:20:53.65 ID:cJbIVPPr.net]
#include <signal.h>
void (*signal(int signum, void (*sighandler)(int signum)))(int signum);

この宣言が読めない



551 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 17:30:35.88 ID:vY3QDx2y.net]
signal 関数名
signum 第1仮引数名
sighandler 第2仮引数名

sighandler ポインタ
*sighandler 関数
signum 第1仮引数名

signalの返却値はsighandlerと同じ型

552 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 18:31:36.73 ID:C1HpzEi0.net]
>>524
思い浮かばないってのがなかなか考えられない
ていうか、
for/while/do while 以外もbreakで抜けられたら良いと思ったことが私もある


>>525
なぜgotoは使いたく無い?
という質問の答えも聞いておかないと
コーディング規約なのか宗教なのか
gotoの使い方を知らないだけなのか

553 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 18:49:30.60 ID:C1HpzEi0.net]
>>536
OSのタスク切り替え処理
ブートローダーからアプリケーションへのジャンプ
リセット
例外処理

554 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 19:22:28.99 ID:FN2jn8ES.net]
>>546
全て別の方法で実現しちゃうので、俺的にはlongjmpの必要性を感じないかな?

555 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 19:30:11.24 ID:m5aHtIH2.net]
>>530
高度すぎてなに言ってるかわからん

556 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 19:46:09.70 ID:nZJhjhuf.net]
まあデータの損傷をいきなりデータ構造そのものの破綻に結びつけるのは些か強引な論理展開ではあるな

557 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 19:55:16.65 ID:C1HpzEi0.net]
>>547
関数ポインタ
アセンブラ
スタック書き換え

このどれか?

558 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 20:08:36.09 ID:FN2jn8ES.net]
>>550
こんな感じ。

OSのタスク切り替え処理
→普通にOSの機能を使う、カーネルなしで簡易ディスパッチャ実装はpthread

ブートローダーからアプリケーションへのジャンプ
→アドレス固定ならアドレスを関数ポインタにキャストしてジャンプ、またはインラインアセンブラ

リセット
→周辺機能やbssやdataセクションも初期化したいのでWDT等のCPUリセット機能を使う

例外処理
→密結合を避けるためオーソドックスに返り値で判定、最後にgoto使うかも?

そういや例外処理longjmpで思い出したけど、一昔以上前のCマガジンにマクロでC++と同じようなtry〜catch構文実装方法の記事があったけど、確かにそのマクロ内ではsetjmp/longjmp使ってたわ。
マクロでカプセル化してれば例外処理で使うかも。

559 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 20:17:29.99 ID:C1HpzEi0.net]
カーネルなしでpthreadの意味がわからん

560 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 20:21:53.00 ID:FN2jn8ES.net]
>>552
あ、まちがえた。
pthreadじゃなくてprotothreadsね。



561 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 15:16:05.31 ID:wM2MhSxp.net]
techtipshoge.blogspot.com/2011/02/blog-post.html
このサイトで、書いてることは正しいと思うしし、実際こうなるんだけど、俺の頭悪いせいでわからない。

駄目な例のsetStr(a)の a は、 &a[0] という”アドレス”を渡してる訳ではないんでしょうか?
なんで駄目な例だと上手くいかないのかという理屈がわからない・・・

562 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 15:16:57.00 ID:wM2MhSxp.net]
あ、レスして気づいたけどcoutがあるってことはc++なのかな?
まあこれはprintfってことにしといてくださいw 重複質問になりそうなのでこちらで処理したい。

563 名前:さまよえる蟻人間 mailto:sage [2018/08/28(火) 15:27:14.25 ID:cEEOiaf2.net]
newもC++のキーワードなんだけど。。

関数に実引数のポインタを渡すとその値が、対応する仮引数に代入(コピー)され、以後、仮引数は変数のように使える。
仮引数の値を変えてもコピーが書き換えられるだけで元の実引数の値には影響しない。
書き換えられるようにするには、書き換えたい場所のアドレスを渡して、*演算子か、[]演算子を使わないといけない。

564 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 15:27:46.08 ID:10z9ufr/.net]
駄目な例のa = new char [8];はmainのaの複製への代入なのでmainのaはNULLのまま
良い例の*a = new char [8];はmainのaそのものへの代入なので期待した結果が得られる

565 名前:さまよえる蟻人間 mailto:sage [2018/08/28(火) 15:37:02.95 ID:cEEOiaf2.net]
関数呼び出しのとき、実引数がどこにコピーされるかというと、「スタック」という積み上げ式のメモリーブロックか、一時的なCPUレジスタが使われる。
インラインではない関数呼び出しにおいては、関数の戻り先のアドレスと、仮引数のデータがスタックに積み上げられる。
積み上げ式だから、自分自身の関数を呼び出しても動作する。これを「再帰呼び出し」という。

566 名前:さまよえる蟻人間 mailto:sage [2018/08/28(火) 15:39:32.69 ID:cEEOiaf2.net]
スタックの積み上げには限度がある。限度を超えると、スタックサイズが拡張されたり、異常終了する。
スタックの積み上げが限度を超えて異常な状態になることを「スタックオーバーフロー」という。

567 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 15:52:37.71 ID:wM2MhSxp.net]
すません。私の質問が曖昧だったので追加で

void setStr(int *a) {

a[0] = 10;

}

int main() {

int a[10];


setStr(&a[0]);
     cout << a[0] << endl;

return 0;
}

例えば、この場合は、setStr(&a[0])として、その後、関数内でa[0]=10;と値を代入すればちゃんと 10 が出力されます。
前のHPの失敗例も同じくsetStr(a)としてアドレスを渡し、受け取りはポインタ変数なのに値は変わらない。
単に数値か文字列かの違いなんでしょうか?


568 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 16:00:50.42 ID:Gzofmim2.net]
とりあえず一度、配列とポインタに対する余計な先入観を捨てて素直に元サイトを読み込めば理解できると思うよ
一つの考え方に囚われ過ぎてると思う

569 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 16:05:47.55 ID:10z9ufr/.net]
void setStr(char **a) これを
void setStr(int *a) こう読み替え

char *a = NULL; setStr(&a); これを
int a = 0; setStr(&a); こう読み替えてみそ

つまり char* → int と読み替えるんだ
ポインタ変数とアドレスは違うという話は
整数変数と整数は違うという話と同じだ

570 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 16:17:43.85 ID:LgBUyhOe.net]
まあスタック使えとは規格に書いてないんだけどね



571 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 16:35:30.28 ID:wM2MhSxp.net]
ああ分かった!
俺は自分で勝手に「char型のポインタ=文字列だ」と思い込んでて、そのせいで混乱してただけでした。
思い込み怖い・・・

void setStr(char *a) {
a[0]='a';
}

int main() {
char a[] = "

572 名前:test";

setStr(a);
cout << a << endl;
return 0;
}

これで「aest」と表示されたからピンときた。確かに失敗例はポインタ変数を渡しているだけだw
ありがとうございました。
[]
[ここ壊れてます]

573 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 18:19:39.20 ID:4ROMapnq.net]
>>563
そりゃそうだよ、世の中にはスタックを持たないマシンもあるからな

574 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 18:33:43.92 ID:oY+WdDFv.net]
ハードウェアスタックを持たなくて再帰呼び出し出来ないうんこ環境があるね

575 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 18:38:07.52 ID:h1lwFjom.net]
そういうのは自分で値を積み上げるように作るしかないな

576 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 18:45:10.17 ID:Gzofmim2.net]
そういえばずいぶん昔に昔ながらのBASIC言語でクイックソートを実装したときに当然サブルーチンの再起呼び出しなど使えないので
自分で似たようなことをやったなあ
というか確か何かのプログラム認定試験の定番の出題テーマだった気がする
当時必死に勉強してたことを思い出した

577 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 18:45:55.20 ID:Gzofmim2.net]
再起ってなんだ再帰の誤変換

578 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 18:47:51.41 ID:h1lwFjom.net]
再帰 不能

579 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 19:51:12.99 ID:zI7irPVs.net]
ぴゅう太なんてレジスタがなかった

580 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 19:56:09.59 ID:c8HqOUoV.net]
>>571
そんなアホな…

うわ、ホントだ。汎用レジスタは全て外部RAMにマッピングされてたのね。



581 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 20:04:33.36 ID:10z9ufr/.net]
制御記憶を主記憶とシェアするアーキテクチャはそんなに珍しくない

582 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 20:09:30.18 ID:c8HqOUoV.net]
普通にR0とかのレジスタ名ついてるんだけど実体は内蔵RAMにマッピングされてるアーキテクチャならよく見るけど、外部RAMってのは初めて見たわ。
今もこういうアーキテクチャのCPUあるのかな?

583 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 20:15:00.09 ID:Gymzh0gE.net]
ない

584 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 20:25:08.96 ID:10z9ufr/.net]
ぴゅうたって内蔵RAMなんだっけ

585 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 20:28:21.23 ID:c8HqOUoV.net]
>>576
wikipediaによると
ROM 内蔵20Kバイト RAM CPU内蔵256バイト/TMS9918用16Kバイト
だそうだ。

586 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 20:53:39.14 ID:UQgP5OTn.net]
>>573
制御記憶ってマイクロコードを入れるところなんだが…
主記憶と共用してる奴なんてあったか?

587 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 20:58:39.83 ID:10z9ufr/.net]
>>578
必ずしもマイクロ【コード】を入れるところじゃないんだけどね
たとえばメインフレームではDIAGNOSE命令で制御記憶を目的外使用なんてのをやってたよ
それやってるときはTestインジケーターが点灯することになってて

588 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 21:38:04.13 ID:UQgP5OTn.net]
>>579
> たとえばメインフレームではDIAGNOSE命令で制御記憶を目的外使用なんてのをやってたよ
そんな特殊な例出されてもなぁ w
そりゃ記憶装置だから他の物を入れることはできるよ
だから何? って話だけどな

> それやってるときはTestインジケーターが点灯することになってて
で、主記憶と共用ってどこのアーキテクチャなんだ?

589 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 21:54:20.28 ID:d5vKjLdu.net]
>>580
やめたれ w

590 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 22:02:06.14 ID:lp3F9A9k.net]
それってセキュリティ上問題にならないのか?



591 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 22:15:00.65 ID:d5vKjLdu.net]
いまはやりのcore iのバグみたいな?

592 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 23:07:37.73 ID:E6lvAa/y.net]
メルトダウン事件移行もアップデートの度にどんどんコンパイルとか画像縮小なんかの処理が遅くなってる気がする
もう怖くて淫照は買えない

593 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 05:50:33.67 ID:zs5ycFHj.net]
ベンチマークしてる?

594 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 08:20:17.62 ID:cD6Bz7+B.net]
>>582
そりゃなるよ
命令の動作を書き換えるんだから何でもできちゃう
なのでDiag関連の命令はCE(カスタマーエンジニア)モードでしか使えないとかなってたはず
今時のCPUでもエラッタ対策としてマイクロコードの書換えするけどコード自体は暗号化されてる
この暗号化キーが漏れたらえらいことになると思う

595 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 10:16:53.98 ID:zs5ycFHj.net]
X'83は単に特権命令ってだけだぜ

596 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 12:25:33.09 ID:cD6Bz7+B.net]
マシンによって違うのか?
M-180HはCEモードでないと動作しなかったが

597 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 12:43:00.44 ID:zs5ycFHj.net]
そういうことだね
俺んとこではPWOFFするオウンコードとかできたし

598 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 20:09:52.14 ID:cD6Bz7+B.net]
それマイクロ関係ないだろ

599 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 06:31:31.30 ID:QWemr4wG.net]
すみません思い切り初心者の質問です。
printf("%s: abc", str);
↑こういう文が abcのみが変わる形で(str変数は変更されません)
沢山登場するプログラムを作っており コピペが面倒だしバグの温床になりそうなので
#defineマクロなどを使って引数にabcを指定すると上記の文がまるごと出力されるようにしたいと思いました。
そこで
#define PR_POS(_pos) printf("%s: _pos", str)
という定義を作ったのですが恐らく引用符の中身は変更されることはないので
#include <stdio.h>
#include <stdlib.h>

#define PR_POS(_pos) printf("%s: _pos\n", str)

int main(void) {
char str[256] = "text";
//printf("%s: abc\n", str);
PR_POS(abc);

exit(EXIT_SUCCESS);
}
というプログラムを作っても実際コンパイルしたものを実行すると
text: _pos
という望んでいない出力が返ってくるだけです
これを
text: abc
という出力にするにはどうすればいいでしょうか……。

600 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 06:43:34.91 ID:jQ6ZKbRR.net]
>>591
#define PR_POS(_pos) printf("%s: " #_pos "\n", str)
でいけるはず
詳しくは
プリプロセッサ 文字列化演算子
とかでぐぐれ



601 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 06:44:40.48 ID:Df6BGOL7.net]
#define PR_POS(_pos) printf("%s: " #_pos, str)

602 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 06:45:58.45 ID:Df6BGOL7.net]
かぶった
しかもまちがった

>>593は無視して

603 名前:591 mailto:sage [2018/08/31(金) 07:04:03.05 ID:QWemr4wG.net]
>>592
うわあああ! ありがとうございます。
正直 検索しても検索しても一向にそれらしき答えが見付からなかったんで
もう方法がないのかなとか思ってました……。
文字列化演算子なるものがあるのですね。用語まで教えていただいてほんとうに感謝しています。

しかもC99でも定められてるっぽい?
(gcc -std=c99 -Wall -Werror -pedanticで警告がなかった)
嬉しいです。これで随分すっきりしたソースコードになりそうです!

>>593さまもありがとうございます。

604 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 07:18:20.44 ID:4o8e5lPA.net]
#include <stdio.h>
#define DEBUG(fmt, ...) \
fprintf(stdout, "%s:%d #%s " fmt "\n", \
__FILE__, __LINE__, __func__, ##__VA_ARGS__);

初心者ならこのマクロを覚えておくと良いぞ。誰もが一度は使うはず。

605 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 07:26:18.95 ID:jQ6ZKbRR.net]
>>595
> しかもC99でも定められてるっぽい?
X 3010:2003 (ISO/IEC 9899:1999)
6.10.3.2 #演算子
制約
関数形式マクロの置換要素並びの中にある各#前処理字句の次の前処理字句は,仮引数でなければならない。
意味

606 名前:K則
置換要素並びの中で,仮引数の直前に#前処理字句がある場合,対応する実引数の前処理字句列のつづりを含んだ一つの単純文字列リテラル前処理字句によって,#前処理字句と仮引数を置き換える。(後略)
http://kikakurui.com/x3/X3010-2003-01.html
[]
[ここ壊れてます]

607 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 07:48:00.90 ID:QWemr4wG.net]
>>596
すいません。初心者なのにめちゃめちゃ上から目線みたいになってしまうんですが
assert()を使わないのはなぜですかね。
POSIX C99でも定義されているので ほとんどどのコンパイラでも処理できると思うんです。

608 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 08:16:53.54 ID:4o8e5lPA.net]
>>598
マクロの紹介だけだから。
デバッグ方法としてならassertを多用したほうが良いぞ。

609 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 08:23:18.46 ID:LcHwdHfr.net]
フィールドのエラーログ用に>>596みたいなコードをリリースバイナリにも埋めることがあるけど
その場合はassertじゃ役に立たないんだよな。

610 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 08:31:20.23 ID:uM5wy4o0.net]
斜め読みだけど、abcが変わってstrが変更されないならabcの方を文字列変数にしてprintfすれば良いんじゃね?



611 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 08:33:49.15 ID:CKe+Ima+.net]
>>596
可変長引数マクロはgccだけって記憶があったけどC99規格で使えるんだね。
「可変部の実引数が0個の場合に……」のgcc拡張とゴッチャになってた模様。

>>598
警告を表示しても動作を止めたくない場合には重宝するよ。
デバッグ中に「ここまでは処理が通過した」と確認する時とか。

612 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 08:40:41.19 ID:QWemr4wG.net]
>>602
なるほど。
assert()関数だと引数の結果が0の場合問答無用で停止してしまいますもんね。

613 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 09:08:12.10 ID:9zTxkh/J.net]
本番のコードと差が出て邪魔なのでassertはあまり使いませんね。
どうせデバッガ使うというのもあるし。

614 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 09:17:03.63 ID:QWemr4wG.net]
>>604
本業の方の意見はほんとありがたいです。
コンパイルエラーと違ってassert(3)は実行時にエラーを吐くので同じ「実行するときに診断する」プログラムでassert(3)より高機能なデバッガ(GDBとか)を使うということですか?

---
>>591の処理ですが以下のように書き直したところ望み通りに動きました。
みなさまありがとうございます。感謝します。
#include <stdio.h>
#include <stdlib.h>

#define PR_POS(_pos) printf("%s:" #_pos "\n", str)

int main(void) {
char str[256] = "text";
//printf("%s: abc\n", str);
PR_POS(abc);

exit(EXIT_SUCCESS);
}

615 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 10:04:04.85 ID:Qsv+Vg4k.net]
assertの使い道って「ここでは必ずhogeになる!」という意志をコードに残すという意味はあるかな。
言ってるとおりで動かすときはgdb使うし、開発中は単体テストで同等以上の確認するしで、実用性は今はあまり無いと思いますね。

616 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 11:00:23.86 ID:mNRFahys.net]
assertはどっちかつーと単体テストでよく使う

617 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 12:32:32.62 ID:QMdn6GpG.net]
本番コードでもassert使うかな
ハードエラーみたいなのはカバーしきれない

618 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 12:51:53.38 ID:jQ6ZKbRR.net]
>>606
> assertの使い道って「ここでは必ずhogeになる!」という意志をコードに残すという意味はあるかな。
assertion の意味は主張だからむしろそれが正しいとも言えるな

> 実用性は今はあまり無いと思いますね。
最初作るときはそうでも改修時に全然触ってない所のassert()に引っかかることもあるから俺は基本入れてる

619 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 07:11:07.60 ID:667Fbrpy.net]
int a = 42;
a = a++;
↑これがコンパイルエラーになる理由って
「左辺aに対する代入と右辺aに対するインクリメントのどちらの演算を優先して処理するか不定である為」
で合ってますか? 不定じゃなくて未定義かも……。

620 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 07:29:52.76 ID:fa3EYjvI.net]
エラーになるか? 警告ではなく



621 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 09:00:51.15 ID:667Fbrpy.net]
>>611
-Werrorとかにしてました

622 名前:611 mailto:sage [2018/09/02(日) 09:07:14.14 ID:667Fbrpy.net]
>>611
あれ。すいません。よく分からなくなりました。
$ gcc -pedantic -std=c99 -Wall -Werror -O2
でコンパイルするとエラーになり停止しますが
$ icc -std=c99 -Wall -Werror -O2
でコンパイルするとあっさり通りますね……。

623 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 09:27:27.59 ID:pzXMyV5h.net]
>>610
未定義っす (>>1 C FAQ の 3 章を参照してください)
蛇足ながらシーケンスポイントの間でオブジェクトを変更できるのは高々1回だけとか、そんな感じのルール
>>613
gcc の -Werror オプションは警告をエラー扱いにするっす

624 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 09:59:41.19 ID:GR8jnF/5.net]
未定義だからコンパイラは何をしてもいい

625 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 10:00:57.15 ID:667Fbrpy.net]
>>614
ありがとうございます。
ちなみにicc (Intel(R) C/C++ Compiler)で-Wallおよび-Werrorオプションを設定したときは
警告もなにも出力されることなくコンパイルに成功してしまったんですが
理由とか分かりますかね。すいません。変な質問で……。

626 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 10:19:45.38 ID:667Fbrpy.net]
>>614
あと,おっしゃる通り(すくなくともC99では)未定義でした。ありがとうございます。
> 直前の副作用完了点から次の副作用完了点までの間に,
> 式の評価によって一つのオブジェクトに格納された値を変更する回数は,高々1回でなければならない。
> さらに,変更後の値の読取りは,格納される値を決定するためだけに行われなければならない。
(JIS X 3010:2003 p.48; 参考 https://dotup.org/uploda/dotup.org1632204.png)

627 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 11:28:11.60 ID:owKXNyzr.net]
>>610
そういう文法的になことには今は拘らない方がいい。(これは他言語学習者の方が酷いが)
上達の妨げにしかならない。

プログラミング言語は、「正しく書いたときに正しく動作する」ようにしか設計されていない。
特にCはそうだ。
意味不明なことを書いたらだいたい全て「未定義」であり、
意味不明なことを書く奴が悪い、ということになっている。
そしてそれが「未定義」と覚えることも、実質的な意味はない。
そんなコードはすぐに修正され、存在しないからだ。
実際、 a = a++; なんてコードは、どのOSSにもないはずだ。

この意味で、Cは全くの素人の入門者用ではない。
例えばC#はそこら辺厳しい言語で、そういった意味不明な書き方は全てコンパイルエラーにされるはず。
(さすがにその例では知らんが、例えば「未初期化の変数を使用」とかがエラーになる)

というか、マジでそのレベルならC#やった方がいい。
文法エラーなんてサジェストが出てOK押したら自動的に修正してくれる。
お前がどんな環境でやってるのかは知らんが。

ただ、こういった無駄な遠回りをしなくて済むだけでも、君にとってC#は有効だと思うよ。

つか、初心者は全ての文法を押さえないといけないと勘違いするようだが、それは間違いだ。
自分が使うだけの文法を押さえ、さっさと使うべきだ。
お前だって日本語の全ての漢字が読めるわけでもないのに日本語を使ってるだろ。
プログラミング言語も同様で、手段でしかないのだから、文法を一通り確認したら、
さっさとゲーム等何でもいいから作れ。
ネタがないのならそれはそもそも今プログラミングを学ぶ必要がないとも言えるし、
それでもやりたいのならラズパイでも買ってきてLEDチカチカでも目指せ。
文法を学ぶことが目的になってはいけない。それは完全に空回りだ。

628 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 11:39:01.45 ID:mdI4MGys.net]
やりたいことはシンプルに書けよってことだな。
最終的に a にどうなってほしいのか、それってもっと端的に書けないの?ってこと。
Cオタクになるのが目的じゃなければな。

629 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 12:11:10.31 ID:owKXNyzr.net]
(ちなみに補足)>>610
初心者には理解不能だと思うが、
「文法で許されていることが全て許される」環境なんて実質的に存在しない。
だから文法のコーナーケースについてはそもそも覚える必要がない。
(とはいえ、肝心のK&Rがフリーダムすぎて…ってのはあるが)

これは小説→ラノベの流れと同じで、
美辞麗句の技巧に走る必要はなく、簡単な文を書き連ねて面白い筋を書け、ということ。
プログラミングにおいてはこれが徹底していて、
同じ物なら、簡単な方が『常に』いい、ということになっている。

ただ、どこからが複雑なのか?というのは議論になる。
例えば自然言語で韓国が漢字を廃止した際、
「停留所」を「ばすが とまる ところ」と書き換え、老人が「舐めとんのか!」と切れた。
実際、全員が読める漢字を「もっと簡単に」という理由で平仮名に書き換えられても困るだろ。
丁度これと同じ(だが方向は逆)で、
新しいプログラミング言語は比較的すんなり書ける文法が用意されており、
それを使うべきかどうかでは揉めたりしている。
ただ、Cは古いのでまどろっこしい文法しかなく、ベタな書き方しか出来ない。
だから比較的この論争に巻き込まれることはないはず。
(それ以前に文法セット自体が小さくて、え?これだけ?のはずだが)

>>619
天然と養殖では学びのベクトルが逆なんだよな。

天然: 1を足したい → a++ と書くのか
養殖: a++と書くと → 1が足されるのか

結果、要因側をenumすると文法一覧になるのが養殖で、これが間違いの元だ。
そしてそれを馬鹿正直に一つずつ潰すから文法エリートになっていく。
そうではなく、要因側のenum結果はやりたいこと一覧になって、全部揃えばゲームが作れる!が正しい。

630 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 12:24:17.27 ID:667Fbrpy.net]
>>620
ちょっと反論があります。正直Cどころかプログラミング初学者なのですが……。

要するに私は養殖≠ナあり,そのような学び方では成長しないと仰りたいわけですよね。
まあ確かに自分でも「規格厨」というか,衒学的な性格をなのは自覚してます
しかしプログラミング言語というのは自然言語とは違う面が多々あると思います。
そして「文法を網羅すべきか」という点においては特に違うと思います。
プログラミング言語は少なくとも概念においては文法に正確に従えば定められた動作を確実に行ないます。
日本語の文法を遵守して話しても考えが伝わらないのとは全く異るところです。
だから私はプログラミング言語においては先に(かなり厳密に)文法を学ぶべきであり,
「文法を学ぶ」ことのなかには未定義動作に関する諸々の知識を習得することも含まれていると考えます。

偉そうにすいませんでした。まあ上手くいかなければまた考えを改めるつもりではいます。



631 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 12:32:31.40 ID:mdI4MGys.net]
やりたいことを素直に書いたつもりで未定義な文法になってしまうなら、もっと論理を考えた方がいいかも。
やりたいことを行う手順を整理できてないってことだと思うよ。
a = a++; ということが結局どういう動作するのかを知ることより、何をしたくてそういう(矛盾をはらむ)書き方になったのかを自己分析した方がいい。
もちろん基本的な文法は勉強しておく前提はあるよ。
おれは養殖とか天然とかは分からんけど。

632 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 13:02:03.12 ID:gypPfsRT.net]
Cは文法的にはコードのデザインをほとんど規定しないからね。
そういう意味では頑張って覚えるほどでもない。まあ量も少ないので覚えてもいい。
でも古いコードとの互換性にこだわる様なおっさんにはならんでくれやという感じ。

633 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 13:06:08.54 ID:nnaQ2akS.net]
>>621
あなたの言うことにも一理ある。

でもこの板にいる人は1つの言語しか使えない人って少数派で、たいていは3、4つまたはそれ以上の言語を操るマルチリンガルな人が多いと思う。
んで、その人たちはどうやって新しい言語を使えるようになるかって言うと、1つの言語をマスターすると(Prologとか特殊な言語は除いて)他の言語も方言みたいなもので、書き方の問題だけなことが多いのね。
その際には特定言語の重箱の隅をつつくような知識が必要なわけではなく、むしろ最大公約数的な知識、もっと言うと言語に依存しない設計力のほうが大事になってくる。
なので、特定言語のあまり細かいルールにこだわり過ぎないほうが良い、という経験論での意見は間違ってはないと思うよ。

634 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 13:21:05.23 ID:mdI4MGys.net]
そうそう、しいて文法を覚えるなら適切に const を指定するクセを付けてほしいな(const に限った話ではないんだが)。
文字列を引数で受ける箇所全部が char* になってるコードを見るとクラクラするw

635 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 13:50:09.03 ID:owKXNyzr.net]
>>621
反論自体は自由にやればいいんだよ。それが匿名掲示板のメリットなのだから。
ただ、書かれている内容については吟味しないといけない。
その中には君にも峻別出来る内容もあるはずだから。
(というか、こっちが君にも分かる範囲で《客観的な範囲で》話せばいいのだが)

事実から言うと、C言語は『当初から』バリバリの実用言語であり、今も現役だ。
これは同世代の他言語とは全然違う。
だから、普通に書いてれば「未定義」なんてのに命中するはずがないんだよ。
そんな言語、使い物にならないだろ?

次に、歴史も長いのだから、何をどうやったら嵌るかのノウハウも溜まっている。
それの集大成がコーディングルールであり、例えば goto 禁止論だ。
これについても是非はあるが、これまでの経験をタダで享受する気なら、乗った方が得だ。
そしてそれに従っておけば大体全て「未定義」は回避出来る。

具体的に言えば、警告レベルを一番か二番目に厳しい状態で使って、警告についてはほぼ全部直し、
google等「コードを実際に書いている連中」のルールに従って書けば、そもそも未定義なんて踏まない。
それらはそのように整備されているから。

業務で「コーディングルール無し、警告も全部無視してよし」なんてのはあり得ないし、
仮に個人レベルでそうでもバグが取れなくて無駄に苦労するだけ。
だから結果的に「未定義」なんて気にする必要ないんだよ。
一般的な環境で普通に書いてれば命中しないし、知る必要もない。
一通りも書けない初心者なら特にそう。他にやることはいくらでもある。

君は休日にプログラミングをやろうとしているのだから、本来は「天然」なんだよ。
それを自分で「養殖」型のカリキュラムにして、無駄に上達しにくくなってる。
そこが勿体ない。
君が何の為にCを学ぶのかは知らないが、もっと直接的にその結果を目指すべきだ。
とりあえず学ぼう、では全く上達しないんだよ。
それは日本人の英語でもそうだろ。使わないと上達しないんだよ。

636 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 13:50:53.63 ID:667Fbrpy.net]
>>624
確かにそうですね。先に述べた通りプログラム全般に暗いのですが
JavaやPythonなども大まかな構造(サブルーチンとか演算体系とか)は
似ているかなと感じました(見当違いなこと言ってるかも)。
もっと抽象的な立場になったほうがいいですかね。

>>625
アドバイスありがとうございます。
ggってみたところconstはその重要性の割に実務で使われていない傾向にあるみたいですね。
しかし役割を考えると,特に保守の面で,積極的に使うべきだなと確信しました。
「ここは固定された値代入を想定している」という意図を明確にできるってことですよね?

637 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 14:03:37.00 ID:667Fbrpy.net]
>>626
そうですね。
動くプログラムを作っていたらa=a++;なんていう文は登場することはないですね。
お察しの通りプログラマーでもなんでもない独学状態なので,
そういう人間が犯しがちなミスを防ぎたい一心で規格や文法などを厳密に勉強すべきと思っておりました。

C#についてですが,こういう事を素人が言うのはまさに傲慢ですけど,
どうせ勉強するなら万人が使ってる/種々のソフトウェアを作っている標準言語を勉強したいな
と思ったのがきっかけなので,正直C#はあまり乗り気になれません。

638 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 15:19:58.46 ID:mdI4MGys.net]
>>627
const の役割はその通り、その値を書き換えないことを意思表示するためのもの。
strcpy の引数なんかを見ても分かると思うけど、このように使い分けするだけで関数の入出力もよくわかる。
ケアレスミスで入出力を逆に書いてもコンパイラが指摘してくれる確率が上がるし、コンパイラにとっても最適化のヒントになってる。

でも実際、const皆無のコードも珍しくない。
そんな所に自分だけ const 付けると、余所の関数を呼ぶために意味不明なキャストをするハメになってストレスMAXになる。
ただ厳密に考え出すと、値受けの引数 int x なんかは const int x であるべきでは?なんて思うけど、個人的にはそこまで強要はしなくてもいいかな… なんて思う。
でもポインタ受けの引数 char* p なんかは const char* p にすることを強要したい。
前者について緩いのは、その const はその関数の中の実装を縛るものであり、そんなことは関数の外の世界の人にとってあまり重要ではないから、というのが理由。

639 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 15:26:12.33 ID:FVhWhkTR.net]
>>628
C#にマイクロソフト性を強く見出しているのか知らんがJDKがゴタついていて.NET Coreが出てマルチプラットフォームで優位性があり、Unityでゲームも作れる

コンピュータを勉強したいならCでいいけどプログラミングを勉強したいならCと比較してもC#は十分万人が使っている標準言語としての地を持つよ

640 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 15:44:37.64 ID:Q8aSECkx.net]
組み込みなどの特殊な分野を除けばC言語の方こそ万人向けとは言い難いな
C言語はそれほど広範な分野で利用されるような言語ではないよ



641 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 16:20:10.20 ID:d8qknsqq.net]
C言語が使えない環境は少ないけど、かと言ってC言語を積極的に使う必要のある環境も少ない、かな?
でも全ての基本として、低レベルなCを理解しておくのは有意だと思う。

642 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 16:34:34.65 ID:mdI4MGys.net]
C の前にアセンブラやってみるのも悪くないと思うよ。
今はお手軽なワンチップマイコンも多いし。
欲を言えば昔の 8bitパソコンくらいがメモリもそこそこあってちょうどいいし、16bit くらいになるとスタックフレームも使いやすくていいんだけど、今そういうので丁度いいのはあまり無いのが残念なところだけど。

643 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 16:48:06.49 ID:owKXNyzr.net]
>>628
君が思っているほど言語間の差異はないよ。
とはいえ、本気でコンピューターについて学ぶのならCは外せない。
最初からやる必要があるとは思わないが、それも含めて自由にすればいい。
最初はスクリプト言語(Ruby/Python/JavaScript)の方が上達は速いとは思うが。

>>627
> ggってみたところconstはその重要性の割に実務で使われていない傾向にあるみたいですね。
constもある意味宗教だからね。
使われてない理由は、単に、苦労に見合う結果を得られないからだよ。
Cに関してはconstを積極的に付ける理由もないからね。

C++は参照を導入したからconstを付けないと変更されるかどうかが分かりにくくなった。
Cだとポインタなら変更される(可能性がある)、そうでないなら変更されないと文法的に確定している。
だからgoogleは参照はconst以外禁止、というルールでC相当にしている。
C#では明示的にoutと書いて分かりやすくしている。

constを付けたことによるメリットは、constに対して代入したときにコンパイルエラーになることだが、
そもそもこれがないんだよ。constなんて間違う場所に使うものではない。
(ただし俺はCでストリング操作を積極的にやったことはないので、char*に関しては分からん。
>>629が引っかかっているのもそこだろうし。
とはいえ、世の中はstringはimmutableということでほぼ確定してしまったし、
今更mutableなstringの作法について学ぶ必要もないはずだが)

644 名前:デフォルトの名無しさん [2018/09/02(日) 17:06:32.38 ID:4Jf6YH6e.net]
>>633
まず、エミュレータを作ります。

645 名前: mailto:sage [2018/09/02(日) 17:48:53.86 ID:oSO4LvdH.net]
>>626
>君が何の為にCを学ぶのかは知らないが、もっと直接的にその結果を目指すべきだ。
>とりあえず学ぼう、では全く上達しないんだよ。

うーん、これは非常にいい指摘ですね
私は、これに気が付くのにずいぶんと遅くなってしまいました

646 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 18:34:07.99 ID:5WqNet32.net]
素人は技術もないのに、登山で直線的に、絶壁を登ろうとするから失敗する。
勉強のプロは、斜めに進んでいくから、登れる

素人がすぐに思いつくような、直線的な方法をやってもダメ。
全員が失敗してる。
C の授業を受けた、ほとんどの大学生が、こんな授業は無駄・役に立たないと言ってるw
彼らはなぜ、そう言うのか、理由を考えたらよい

C のようなポインタのある言語を、1年勉強しても、
ポインタを追っかけるだけで時間がつぶれるから、何も作れない

その時間で、Ruby/Python/JavaScript の3つの動的言語をやれば、ツールを作れる

まず素人は、動的言語・静的言語・ポインタのある言語の、
位置付けや難易度をわかっていない

647 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 18:36:32.73 ID:xLyKs+8r.net]
ポインタってそんなに難しいか?

648 名前: mailto:sage [2018/09/02(日) 18:46:30.43 ID:oSO4LvdH.net]
>>638
難しいと思います
C++ に移ってからも、T ** を T *& に書き直すとかする段階で、自分のポインタ概念の認識が浅かったことを実感させられたりしたものです

649 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 19:00:28.56 ID:zPdaUXCQ.net]
Cのポインタはシンプルだからわかりやすいと思います
ビット演算のほうが難しいと思います
m = (m & 052525) + ((m & 0125252) >> 1);
m = (m & 031463) + ((m & 0146314) >> 2);
m = (m & 007417) + ((m & 0170360) >> 4);
m = (m & 000377) + ((m & 0177400) >> 8);

650 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 19:30:02.62 ID:nnaQ2akS.net]
>>640
8進数表記って滅多に使わないから、たまに良かれと思って桁合わせでゼロパディングすると意図せず8進数になって悩むよな。



651 名前:デフォルトの名無しさん [2018/09/02(日) 19:43:35.59 ID:4Jf6YH6e.net]
>>641
あ、それ、30年ぐらい前にハマった。

幸い8や9を使っている所でコンパイルエラーになったからよかったが(それでも当初はなんでエラーになるのかと悩んだがw)、もし使ってなかったらROMに焼いてからターゲットマシンで変な動きになって悩み続けた事だろう。

652 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 22:38:57.74 ID:u9h+2eE3.net]
Cが全盛だった時代

653 名前:、否が応でもプログラミングの勉強はCから始めた。
昔の人は理解できて今の人には難しいと考えるのは傲慢ではなかろうか。

ところでアンサイクロペディアのC言語の項が18禁になってるのは全部椋田のせいだな。
[]
[ここ壊れてます]

654 名前:デフォルトの名無しさん mailto:sage [2018/09/02(日) 23:21:32.95 ID:owKXNyzr.net]
>>643
> 昔の人は理解できて今の人には難しいと考えるのは傲慢ではなかろうか。
いや事実だ。理由は単純で、つまりは裾野が広がっているだけなのだが、以下。

1. C言語の難易度自体は昔と同じだが、C言語の問題点を修正したより簡単な言語が開発された。
2. 昔プログラミングをしてたのは理系の大学生/大卒だけだった。
 今は文系も含め、しかも中高生から始めようとしている。
 数学で培われる論理/抽象思考能力はプログラミングに不可欠なのだが、
 これらがまだ整っていない状態の中高生や文系にプログラミングを教えるってのがそもそもの間違い。

どのみち今の状況で計算機科学専攻ならCは必修だろうし、そういう連中には問題ない。
ただ、そうじゃない連中がCをやる必要はないってこと。
Pythonだけで済む世界ならそれもありだ。

655 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 00:24:24.13 ID:gEsVL0BV.net]
昔も中高生の頃からプログラミングは始めていたけどな
いわゆるベーマガ世代の年齢層がBASIC やアセンブラからC言語に流入してたので平均的レベルは比較的高かったように思う

656 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 00:32:54.22 ID:4uYLlRfz.net]
処理目的の抽象度が上がっているという現実もあるからなぁ

657 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 00:35:18.97 ID:wBpew+1c.net]
プログラミングの学習は、最初電卓でやってた
ニーモニックが16進表示みたいなやつだったな
それで、ループや分岐、サブルーチンを覚えた
その後は、Z80のアセンブラに移ったっけ
高級言語やりたかったけど、
8ビットのプアなPCしか持ってなかったし
漢字モア使えないPCで漢字ROM買って取付け
漢字非対応のドットインパクトプリンタに
機械語プログラム使って漢字出力してた

658 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 01:05:18.32 ID:co6OAOoM.net]
>>645
ベーマガやってた連中はごく一部なのだから一般化するのは無理がある。
そしてそれに対応する連中は、今はもっと増えている。
家にPCがあるのが当たり前の時代だし、IDEも無料、
インターネットでOSSのソース見放題、質問も出来る。

昔の大学生も、大学で初めてプログラミングした連中はCで撃沈してた。
今は昔と比べてIDE等の環境が断然良くなっているが、
大学生の割合が増えた分、大学生の平均的頭は悪くなっている。
(昔は上位1/4が大学生だったが、今は上位1/2で、東京に至っては2/3じゃなかったっけ?
昔だと当然高卒だった連中が大学に行ってるのだから、Fランでは授業が成立しないのも当然)

だから今の「平均的大学生」が大学でプログラミングを始めても、当然Cでは撃沈する。
今の「上位半分の大学=国公立+有名どころ」(=昔の上位1/4の頃の大学生相当)の理系で、
昔の大学生と同様にCで撃沈するはず。
それを文系含めて全員プログラミングをやらせようってのだからかなり無理がある。

とはいえ、個人差の方が大きいし、やるのは自由だ。
ただ、もっといい言語(改良された言語)は沢山あるのだから、無理してCに拘る必要はない。
情報/計算機系はどうしても速度勝負になるから、どのみちCは外せないが。

659 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 01:20:48.33 ID:kJOKS5+S.net]
今の平均的な大学生のレベル低下はゆとり教育の弊害だと思うが

660 名前:デフォルトの名無しさん [2018/09/03(月) 01:38:17.54 ID:y7r/YW4w.net]
https://ja.m.wikipedia.org/wiki/%E3%82%86%E3%81%A8%E3%82%8A%E6%95%99%E8%82%B2

ゆとり教育(ゆとりきょういく)とは、日本において、1980年度(狭義では2002年度以降)から2010年代初期まで実施されていたゆとりある学校を目指した教育のことである。

1980年度から2010年代初期
1980年度から2010年代初期
1980年度から2010年代初期
1980年度から2010年代初期
1980年度から2010年代初期



661 名前:デフォルトの名無しさん [2018/09/03(月) 01:45:48.17 ID:dM1zEtwp.net]
アセンブラ(マシン語)からやったほうが
イメージしやすいと思うんだけどな。ポインタ周りとか

現代はPythonやC#が潰しが利くから昔でいうCの位置かな
https://cpplover.blogspot.com/2016/05/mitsicp.html

662 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 02:48:03.81 ID:WkDP4f9E.net]
みなさんほんとうに色々な助言ありがとうございます。
目的はなにかといいますと,ゲームを作りたいのではなく,むしろ計算機の仕組みなどを学びたいと思っています。
やっぱり始めはPythonのほうがいいんですかね……。
(ちなみにガッツりゆとり世代です。中学あたりで土曜日通学が復活したかな?)

663 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 05:37:12.02 ID:WkDP4f9E.net]
調べただけですがRustもよさげですね。私が学びたいと思っている計算機の基礎的な部分に触れられると同時に
C99では非常に複雑で非本質的な努力を要求される,安全なメモリ管理やUnicodeに対応した文字列操作が
簡単に実現できるというのは魅力的です。また,Mozilla社が主導しているというのも好印象です。
難点は,かなり新規の言語なので,Cほど開発手法が洗練されておらず,
またコンパイラの実装が一つしかないことですかね。
しかし開発版ながらRust製のOSもあるようですし,私がCを通じて得たいなと思っていた知見や概念を
Cほど紆余曲折を経ずに取得できそうです。(学問に王道なしとは言いますがね……)

これ以上は(というか既に大分)スレチになってしまうので書き込むのはやめます
青二才に貴重な時間を割いて様々な助言を頂いたこと,ほんとうに感謝しています。

664 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 07:47:15.40 ID:Sux6qqaT.net]
別にCでいいと思うよ。
ただ何使うにしても、画面表示とかができないとモチベーション上がらないかもね。
GUIとまではいかなくてもコンソール上にテキストで簡易グラフィックくらいやらないと、動いてる様を眺める楽しみが半減だ。
エスケープシーケンスとかを一緒に勉強するといいかもな。
とりあえずライフゲームでも作って眺めてみたら。

665 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 08:01:08.87 ID:gEsVL0BV.net]
まあ手っ取り早くプログラミング全般を眺めるならマルチパラダイムの言語を最初に学ぶのも悪くはないと思うよ
手続き型、オブジェクト指向、関数型のマルチパラダイムなら、他にはC#やJavaScriptなどが環境が充実してるので手軽ではあるけどね

666 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 08:20:45.29 ID:/AUwjj56.net]
計算機の仕組み、つまりコンピュータの動作原理を学ぶならアセンブラだろうけど、普通のOSのAPIはCなので、やっぱりC言語を勉強するのはベストプラクティスだろうね。
PythonだったりC#だったりはプログラミングは習得できても動作原理は深く学べない。
果たしてC#等の高級言語しか使えない人の何割が割り込みやCPU動作モードやSFRについて正確に理解してるのやら。

667 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 08:30:03.31 ID:4uYLlRfz.net]
>>653
Rustの方が細かなノウハウでコケずにコンパイラが指摘してくれるというのはあるが今の目的ならCの方が素直でいいと思う
実機の動きを追える上に色々な機能が付いていて嬉しいという言語なので覚える事が滅茶苦茶多いよ

668 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 09:18:58.58 ID:co6OAOoM.net]
>>652
中高生なら学校の勉強しとけ。結果的にそっちの方が近道だから。

プログラミングは抽象思考が出来て自分でサイクルを回せる奴しか上達しない。
具体的に言うと、「○○→△△って事は●●→▲▲ってことだろ。
ならここをこう改造すればこうなるはず…ビンゴだぜ!俺って頭イー」
を『自分だけ』で勝手に繰り返せる奴だ。(β)
学校の教科でこれに最も近いのは物理で、次点で数学だ。
だからこのタイプの奴は物理と数学は『本人は特に努力した覚えが無くとも』無双出来る。
逆に言えば、そうなっていない奴は本質的にプログラミングに向いてない。
その場合は、そもそもプログラミングをやるべきではないと俺は思っているが、
それでもやるのなら、まず物理と数学の『勉強の仕方』を変えて『抽象思考』を身につけるべきだ。
(単に勉強するだけなら『暗記』でも一定まではカバー出来てしまうが、それでは意味がない)
プログラミングを始める前に、プログラミングが上達する基礎能力としての抽象思考を身につけないといけない。

次に、既にこれが出来ていたとすると、
教科自体の内容はプログラミングには直接は関係ないから、中高生でも出来るのは事実だ。
(ここら辺のことをわきまえず、『中高生でも出来る』とだけ見て全員に教えようとしてるから問題がある。
とはいえ、主導している馬鹿共はプログラミングが出来ない連中だから、話が通じないのも当然だが)
仮に君がここまでは到達しているとして、話を進めると、以下になる。

> むしろ計算機の仕組みなどを学びたい
現状、C以外に選択肢はない。

> Rust
止めとけ。今のRustはプログラミング初心者用には出来てない。C以上に確実に撃沈する。

> Python
海外では「関数呼び出し、ループ、条件分岐」等の基礎の基礎を学ぶのなら一番早いと言われている。
現実的にはAWK/Perl/Ruby/JavaScript等いわゆるスクリプト言語全般は全てこれに当てはまるが。
ただ、上記の「プログラミングが上達出来る奴」ならこの部分は数日〜数週間で通過してしまう為、
言うほど関係ない。「初心者ならどの言語でも同じ」とよく言われているのはこれ。

669 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 09:19:38.61 ID:co6OAOoM.net]
例えば体育、運動神経のいい奴は何をやってもそこそこ上手いし、一瞬で上達するだろ。
あれと同じで、「プログラミング神経」のいい奴はどの言語でも上手く行くし、すぐ上達するんだよ。
だから言語自体よりは「プログラミング神経」としての『抽象思考』能力の方が重要なんだよ。
そしてそれがない奴が頑張ってみたところで、
ちょっと運動神経のいいやつが遊びでやってるのを見たらスゲー上手くて萎える、みたいなことになる。
だから本当は基礎能力としての抽象思考を鍛えることが重要で、プログラミングの上達はその結果にすぎない。
そこを「プログラミングを『教えれば』上達する」と勘違いしている馬鹿が色々やろうとしてるからおかしなことになってる。
『教えれば』上達するのは暗記科目であって、
上達する状況を整えた上で『勝手にやらせる』と自然と上達するのが非暗記科目だ。

で、言っちゃ悪いが君は多分「抽象思考」型ではなく、「暗記」型だ。enumして全潰しというのがそれ。
君は本質的にプログラミングに向いてないタイプだと思うぞ。
教科の延長でプログラミングを学びたいと思ってるのなら止めとけ。

上記(β)タイプは主に一点突破で、むしろ勝手に突っ込んでいって自爆するのが多い。
最近出てきたのはGateboxだが、いい感じに突き抜けてるだろ。
https://gatebox.ai/home/
www.itmedia.co.jp/news/articles/1612/14/news092.html
こういうことを平気で出来る奴じゃないと上達しない。
君にはその臭いを感じない。

670 名前:デフォルトの名無しさん [2018/09/03(月) 09:45:55.75 ID:XmaAZlOW.net]
https://ja.m.wikipedia.org/wiki/%E3%82%86%E3%81%A8%E3%82%8A%E4%B8%96%E4%BB%A3

ゆとり世代

ゆとり世代(ゆとりせだい)とは、ゆとり教育(ゆとりきょういく)を受けた世代のこと。

定義・範囲
ゆとり世代については明確な定義、範囲はなく諸説ある。

・小中学校において2002年度施行(高等学校は2003年度)の学習指導要領による教育を受けた世代(1987年4月2日 - 2004年4月1日生まれ)。

・小中学校において1980年度以降(高等学校は1982年度以降)の学習指導要領による教育を受けた世代。1966年度生まれ以降。



671 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 09:58:26.53 ID:udP6IpNT.net]
やっぱりプログラミングより数学の勉強の方が全然大事だと思うわ
無駄な時間を過ごしたおっさんの後悔からの発言だけど
若者は線形代数と物理いっぱいやった方がいいよ

672 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 11:14:17.43 ID:sjKCXLyo.net]
BIOSの割り込みサービスで画面に文字表示するやつよんだらどうなりますか?

673 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 11:36:38.73 ID:CjQwreEv.net]
>>653
これでも買っとけ

70年代のTRPGの生の感触がばりばり伝わってくるAD&Dの本

コンパイラ―原理・技法・ツール (Information & Computing) | A.V. エイホ, R. セシィ, J.D. ウルマン, M.S. ラム, Alfred V. Aho, Jeffery D. Ullman, Ravi Sethi, Monica S. Lam, 原田 賢一 |本 | 通販 | Amazon
https://www.amazon.co.jp/dp/478191229X

674 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 13:23:16.40 ID:G6xL0gpW.net]
これは表紙買いしてしまう

675 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 17:00:11.86 ID:fBv9u5Bm.net]
>>618

> そういう文法的になことには今は拘らない方がいい。

臭い物に蓋してんじゃねえ
無理に気になる必要はなくても
気になったのに誤魔化せって最低なアドバイスだ

学問そのものを全否定する暴論だ

676 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 17:42:03.71 ID:kgEYN356.net]
そんなに気になるならコンパイラを読めば良い
コンパイラを読まずにああだこうだと言ってそれを学問と言い張るのは今更ニーチェを読んで学問と言い張っているのと似ている

677 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 18:03:25.66 ID:bm6csMD2.net]
ゲームブックの訳本かしら

678 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 18:07:52.25 ID:fBv9u5Bm.net]
しどろもどろの典型だな

679 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 18:26:17.33 ID:ttVcJTrG.net]
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006

この本は、日本の大企業から、C の専門家が数十人集まって作った。
この100ルールまで行かないと、教えられない

汎整数拡張・副作用完了点・短絡評価・bool とか、各概念が難しい。
とても初心者に教えられない

特に学生なんて、現実を知らないから、文法があっていれば正しいと思う、
固定概念があるから成長できない

現実には、MISRA-C、100ルールに従わないと話にならない。
学生にはそういう事はわからないから、アホみたいなコードを書く

コードは、正しい文法で書いても、ダメだから。
可読性・保守性・バグを起こさない、Ruby みたいなコーディングが大切

だから、Rubyでプログラミング学ぶのが大切。
学ぶのは文法規則じゃない!

システムを作る・保守するためのプログラミング!

680 名前:669 mailto:sage [2018/09/03(月) 18:34:29.69 ID:ttVcJTrG.net]
Ruby の女神・女優の池澤あやかも、同じことを言ってる。
慶応大学卒だけど、大学で、C の授業は無意味だって

山陰地方のRuby合宿へ行って、webアプリが作れるようになった

Cの開発時間の大半が、ポインタ・バグでつぶれるから、プログラミングを学べない。
文法がわかるだけで、ものを作れないから楽しくない

だから、Cの授業の評判が悪い。
無意味な授業だよなって

だから初心者は、Rubyから初めて、まず動くものを作る



681 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 18:58:25.85 ID:LFbByM25.net]
最初の質問者は計算機の仕組みを知りたいのであってWebアプリを作りたいわけでもMISRA Cルールを知りたいわけでもない件

682 名前:デフォルトの名無しさん [2018/09/03(月) 20:30:15.22 ID:E2St7m4+.net]
典型的な超頭悪そうなヤツラが
ひたすら長文連投してる

683 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 20:31:53.98 ID:zLYH5Np3.net]
>>670
またrubyガイジかよ。Cスレにまで出張ってくるななよ

684 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 20:35:14.84 ID:i7qE7EE1.net]
>>672
そのまんまお前の事だ

685 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 21:07:08.36 ID:e7RcTinN.net]
>>674
???

686 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 21:32:03.32 ID:i7qE7EE1.net]
半角バカを知らないのか

687 名前:デフォルトの名無しさん mailto:sage [2018/09/03(月) 23:39:43.07 ID:e7RcTinN.net]
あいつか

688 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 00:25:08.00 ID:Ilbb7rlr.net]
とりあえずPCCでも読んでみることにします。

689 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 00:45:19.60 ID:LzYZ2uc7.net]
Cのスレに不毛な喧嘩売ってくるのは大体Cで挫折して、
劣等感を何とか慰めようとするカーミング行動だから気にするな

690 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 00:47:45.68 ID:oF8LgJEj.net]
>>669的にはコンピュータのしくみはどうでもいいってこと?



691 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 06:21:50.26 ID:4a01gUXa.net]
>>663 にある本の紹介文なのか宣伝コピーなのか、
「70年代のTRPGの生の感触がばりばり伝わってくるAD&Dの本」て部分を
どう解釈したら良いのか分からないのだ。

Cや「ドラゴン・ブック」、TRPG, AD&D って言葉くらいは知ってる者に
解題してくれないか。
ひどく野暮な質問かも知れないけど、聞くは一時の恥とか言うし、敢えて頼む。

692 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 08:45:47.28 ID:HIB3dDVe.net]
>むしろ計算機の仕組みなどを学びたいと思っています。

それなら情報処理の基礎なんかをやった方が良い様な気がする
今は基本情報処理とか言うんだっけか?
資格とかのやつよ

693 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 14:29:38.61 ID:Ilbb7rlr.net]
向いてないっすか……。正直物理や数学は得意なほうなんですがね……。

694 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 14:48:39.41 ID:0ItemGYT.net]
>>683
高齢者はマウンティングする病にかかりがちなので気にすんなよ

695 名前:デフォルトの名無しさん [2018/09/04(火) 15:15:50.63 ID:FJBPHmlL.net]
>>653
武内覚さんのLinuxの仕組み片手にCやるのがおすすめ
ファイルIOとかなら、システムコール、VFS、FS、Raid、デバドラ、スケジューラー、SCSiまでユーザーランドからデバイスまで一貫して、かつお手軽に触れる

696 名前:デフォルトの名無しさん [2018/09/04(火) 16:39:04.23 ID:gZnu4stV.net]
cの文法で書けるだけの
無能を自覚できてない低学歴知恵遅れの高齢底辺ITどかたに多い

697 名前:デフォルトの名無しさん [2018/09/04(火) 17:30:33.56 ID:DgdW8Zal.net]
お。半角文字の入ってない書き込みを久しぶりに見たような気がする。

698 名前:デフォルトの名無しさん [2018/09/04(火) 17:53:50.88 ID:gZnu4stV.net]
底辺ITドカタさんたちは
今日みたいな台風の日も自宅待機ではなく
出勤でしたか

大変でしたね

699 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 18:52:18.48 ID:Yl2cIsi8.net]
台風で東海道線や環状線が止まるのはまあ想定内だったが阪急や京阪まで止まるのは想定外だったわ

700 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 20:17:15.30 ID:tpLBdVu4.net]
>>683
数学が得意なら諦めるのはまだ早い



701 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 20:22:39.67 ID:GSpvNdv5.net]
やっぱワンチップマイコンでアセンブラがいいよ。
クリスマスに向けてLEDチカチカさせてジングルベルでも鳴らしてみるとかどうよ。

702 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 20:27:34.18 ID:bz6n3SY3.net]
ジングルベルはJasracフリーだな、心配ない

703 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 21:12:38.21 ID:nrC4An0b.net]
ロジアナがあればベストだが無ければせめてオシロは欲しいな

704 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 21:54:25.98 ID:Uy+TuYSZ.net]
>>683
向いていないね。それは臭いから分かる。お前は本当の「天然」ではない。
以下参考だが、結局中身は同じだ。
> 一撃必殺!急にマンガ家だの声優だの絵師だのになりたいと言い出した子どもや大人を止める、オススメの方法
> https://togetter.com/li/1130025

今はプログラミングなんて本当に簡単に始められる。そのレベルでグダグダ質問している時点で向いてない。
本当の「天然」なら、もう既にとりあえず何かしらのコードを書いてる。
お前は勉強しないと何も出来ないと考えている「いい子ちゃん」タイプだ。
そういう奴は自分でサイクルを回せず(=暴走出来ない)、上手くなれない。
無理してプログラマになっても、後輩に簡単に抜かれ、馬鹿にされる、悲惨な人生になるぞ。止めとけ。
(ここ見るだけでも老害を馬鹿にしたがっている奴はいくらでもいるのが分かるだろ)

ベーマガ世代だって理解してやっていたわけではない。やりたくてやってただけだ。
先に数学をやった方が効率が良かったはずだが、そんな事は考えてもいない。

お前は、サッカーをやる前に、筋トレして体幹も作り上げ、万全の状態にしようとしている。
勿論そういうのもありだが、それはやはり「養殖」なんだよ。
「天然」はそうじゃない。サッカーをしながら、もっと上手くなりたいから筋トレして体幹も作っていく。
好きだから続けられるし、環境が多少酷くても我慢出来る。(これがIT産業がブラック化しやすい遠因にもなってる)
そういう「天然」向け仕様の環境で、「養殖」では悲惨なことになる。
(勿論、プログラミングをやってみてから好きになる、というのもありだが、それはかなり少数派だと思う)

向いてる/向いてないで言えば、
ちょっとコードを書けるようになって調子に乗ってここで俺ツエーしている馬鹿共の方が向いてると言える。

705 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 21:55:26.59 ID:Uy+TuYSZ.net]
今はプログラミングの裾野が広がって、絶対的な人数が全く足りてない。
だから文系をSEとして大量投入してみたものの、いい結果がでたとは言いがたい状況だ。
それで次は「小学生からプログラミングを教える」「国民全員がプログラミング出来るように」
みたいなアホなことをやろうとしているのだが、これは完全に愚策だ。
プログラミング出来ない/したこと無い奴らが仕切ってるからおかしなことになってる。
それにお前がつき合う必要はない。

教育改革ってのは取り返しが付かない人体実験になるから、性急にやっては駄目なんだ。
この認識すらなくゆとり教育を導入した文化省の連中は、
今からでも全員死刑に処すべきだと俺は思っている。
(それくらい罪深いし、社会に対して悪影響を及ぼしている。日本はミスリードに甘すぎだ)
今の「小学生からプログラミング」についてはどうやらお遊び程度だからまあいい。
やるにしても当初はこの程度で様子見しながら拡大するか取りやめるか試すべきなのさ。
(俺は意味無いから止めろと思っているが)

今時PCもスマホもない家なんて珍しいだろ。
なら初心者用のプログラミング環境はすぐに整えられるし、勝手に始められる。
だからそのレベルでこんな所に質問してる時点で間違ってる。

天然:何故プログラミングをするのか?そこにPCがあるからだ (単にいじくり回したいだけ)
幼稚園児:ケーキ屋さんになりたい!(だってケーキ大好きだしもっと食べたいから)

お前には幼稚園児が「ケーキ屋さんになりたい!だってお金儲かるし!」
みたいな事を言っている違和感がある。
初心者の癖に計画しすぎだ。必要があって否応なしに始めるわけでも無し、意味不明すぎる。
そういう奴も中にはいるのかもしれないけどさ。
ただ、確実に言えるのは、プログラミング界隈は良くも悪くも全般的にギーク向けに出来上がってる。
お前がギークになりきれないのなら、ずっとアウェイのままだ。
それは幸せなことではないと思うよ。

706 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 22:38:39.94 ID:l07xjkBV.net]
おいら頭悪いから長い文章よめねんだ

707 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 22:49:40.55 ID:CWUYudxX.net]
今北産業

708 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 23:00:09.15 ID:8Afhx4Yo.net]
>>696
周りに迷惑かけない分、頭の悪い長文書く奴より立派だから安心しよう

709 名前:デフォルトの名無しさん [2018/09/04(火) 23:14:17.99 ID:gZnu4stV.net]
オレみたいに的確に要点をまとめてる長文なら読める
低学歴知恵遅れの長文は読めるシロモノじゃないからな

文章だけで低学歴知恵遅れかどうかは
簡単に判別できる

このスレに連投されてる長文の駄文は
低学歴知恵遅れが記述したと推認することに疑いの余地がない

710 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 23:17:12.74 ID:Yl2cIsi8.net]
必要なら数学の知識などなくても感覚で覚えるからな
座標計算の必要があれば三角関数など知らない小中学生でもsinやcosくらいは使う



711 名前: mailto:sage [2018/09/04(火) 23:26:47.20 ID:lJV/Mb/R.net]
>>700
小中学生に三角関数は無理でしょう…まず相似の概念を習うのが中学2〜3年くらいなのでは?

712 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 23:31:24.63 ID:dqoEXQdt.net]
数学は教科書で勉強しないとあかんよ
経験で得た知識なんてただの思いこみ

713 名前:デフォルトの名無しさん mailto:sage [2018/09/04(火) 23:46:19.73 ID:Yl2cIsi8.net]
思い込みでも何でも使っているうちに覚える
自分の場合は30年以上前中学生の頃に画像処理のプログラミングしている間に三角関数(といってもX座標はcos、Y座標はsinといった程度)や
論理演算(RGBの合成はOR、反転はXORなど)を覚えた
その後になって高校の頃に教科書でまともに学んだ覚えがある

714 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 00:03:44.17 ID:ElSUubWJ.net]
>>701
三角関数が何なのかは分からなくても、sin と cos を使うだけなら小学生でも定型文的に覚えちゃうんじゃね(おれは中学の頃だったが)。
円を描くところから始まり、直径を変化させると渦巻きにできたり位相や周期を変えて橢円やらリサージュになることに気付いたりで、
パラメータをやみくもに変えて手探りで欲しい結果にたどり着くようになる。
もちろん円的な動きの元ネタは必要で、ベーマガみたいなののコードをパクって出発だな。
小学生の頃はファミリーベーシックだったので三角関数には行き着かず、中学生でMSXになって三角関数に出会ったが、小学生の頃にMSXがあれば手を出してたと思う。

715 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 00:11:58.72 ID:ElSUubWJ.net]
そういや小学生のころはスーパーマリオが出たころで、ファイアバーをどうしても再現したくてファミリーベーシックで頑張ってたわ。
三角関数に行きついてないから、角度の範囲毎の動きを個別に書いたな。
でも長さが伸び縮みしたり軌跡がカクカクで、結局将来の夢に据えてお仕舞いにしたw

716 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 00:29:02.76 ID:TND9Xsam.net]
ニュー速で話題にしていた、CLA Fortran プログラムですが、
C言語への移植が終わりました。
公開方法について、検討しています。
↓ここを使おう蚊と考えています。
https://ideone.com/

C言語へ書き換えたソースと、入力用データとパラメータの3つですが
入力用データとパラメータについては、サンプルに掲載したものと同一
なので公開は必要ないかも知れません。
ただし実行するには必要になります。どうしましょうか?
テキストファイル形式で単独でアップロードするか、
ソースの一番下にコメントとして載せるかどの方法が良いでしょうか?
あと、オリジナルFortranソースもアップロードした方が良いですか?
これは以前PDFを見つけてくれた方がソースに起こして頂いたものです。

717 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 00:29:27.46 ID:TND9Xsam.net]
間違えました、済みません。

718 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 00:56:31.50 ID:8BhrS90z.net]
>>694
>>695
よくわからんのだが、お前が相手をしてるそいつはなぜプログラミングを初めたいと思ってると思ってる?
よくわからんのだが、ギークとかなんやらの最初とそいつの最初の具体的な差がよく分からん

719 名前:デフォルトの名無しさん [2018/09/05(水) 07:35:22.74 ID:p5l66rRv.net]
C言語ポインタ完全制覇っていう書籍が気になってるんだけどこれはどの程度の知識がある人を対象にしてるの?

720 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 08:20:43.64 ID:2JdbfNpR.net]
どの程度っても難しいなw
簡単なポインタは分かるけど、二重ポインタとか配列が絡むと混乱しちゃう程度の知識の人向け?
初心者なら悪い本じゃないから買っちゃえ。



721 名前:デフォルトの名無しさん [2018/09/05(水) 10:04:35.05 ID:TsbO/g0i.net]
>>701
円を書く時に使えると聞いて確かに書けるので使っていて、後で高校生向けのやたらやさしく書いてある図と絵が満載の参考書を見てどういうことか詳細がわかった。俺が中2の時の話。

で、今思うに、これぐらいならちゃんと教えれば小学生でもわかるんじゃないか?俺としては単に教えてないからできないだけのような気がしてならないぞ。

しかし後々高校に入ってから数学の授業で「これ割るこれがsin」などと教師が言ってるのを見て、こんな説明だけでわかるやつはいないだろうとも思った。
ちゃんと教えられる人があまり居ない事もわからないやつを続出させる原因なのかもなと。

722 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 10:24:41.46 ID:mkiFi/5o.net]
あの説明はひどいよな
だから何?がずーっと消えない

723 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 10:29:11.29 ID:jTYdKpzW.net]
sin,cos,tanそのものはアホな小学生でない限り余裕で理解できる。
ただ、それに付随した加法定理やらいろんな公式をセットにして教えたいし、それより先に教えることがたくさんあるので>>711の言っている通り教えてないだけだと思う。

724 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 10:29:52.26 ID:TP9d0IJd.net]
せんせい
「同じ授業を受けていい点数を取る生徒ももいるんだから、悪いのはIQの低い君達」
「分かる奴は塾に行ってる?じゃあ悪いのは君達の努力不足だ」

725 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 10:36:57.83 ID:2JdbfNpR.net]
論破やな・・・w

726 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 12:34:15.95 ID:TWmx8fnR.net]
>>709-710
初心者には、この本もよい

詳説 Cポインタ、2013、オライリー・ジャパン

727 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 12:40:26.88 ID:BcgqOcGx.net]
>>711
普通は円を書くのに三角関数を使わない
普通は

728 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 12:41:23.62 ID:vNhhiwgZ.net]
絵が円形に動くときは?

729 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 12:43:57.25 ID:BcgqOcGx.net]
絵が円形に動くとき
は普通に円を書く時ではない

730 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 12:45:48.51 ID:vNhhiwgZ.net]
え、
>>711ってarcとか使わないで円を書くって言ってるの?



731 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 12:54:42.87 ID:usOBe9qe.net]
アスペっすわ

732 名前:デフォルトの名無しさん [2018/09/05(水) 12:59:20.81 ID:TsbO/g0i.net]
三角関数の説明に三角形だけの図を描いてこれ割るこれとか言って済まそうってのは手抜きな感じがする。やはり円も描かねば。

ま、しかし、sin. cos 使って円が書けるのがわかったのは良いが、当時のマイコンは貧弱で浮動小数点演算なんかやらせてたら遅くて仕方がなかった。
しかしBASICでグラフィックに円を描かせると妙に速い。正数計算して描いてるからだが、どうするとそんなことができるのかを延々と探り続けてようやっとわかったのが高校生になってからだったかな。
今はもうほとんど覚えてないが二乗して足してってオーバーしたら引いてみたいな計算したと思った。

733 名前:デフォルトの名無しさん [2018/09/05(水) 13:00:45.01 ID:TsbO/g0i.net]
>>717>>720
まあ40年ぐらい昔の話だからね。

734 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 13:01:32.32 ID:9Ih296dz.net]
>>722
で?

735 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 13:07:48.81 ID:D3bYtmsn.net]
ポインタ限定でそんなに語ることがあるのか

736 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 13:15:30.75 ID:Lw38WY1e.net]
>>722
それってブレゼンハムやミッチェナーのDDAアルゴリズムを利用した直線や円周の高速描画だろ
懐かしいな

737 名前:デフォルトの名無しさん [2018/09/05(水) 13:22:45.26 ID:TsbO/g0i.net]
>>726
何て言うのかは知らなかった。何かのプログラム解析してわかったんだったかな。その辺は忘れた。
直線も足してってオーバーしたら引くみたいなやり方だよね。今ではハードウェアで組み込まれてるんだろうな。

738 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 13:24:01.11 ID:ElSUubWJ.net]
>>725
ポインタが指す先が const の場合とかポインタそのものが const の場合とかさらに volatile が組合わさったりさらにそういうののポインタだったり配列だったり関数ポインタまで入り

739 名前:込んだりした場合に、
正確に型宣言したり読んだりするには結構修行が必要だからいろいろややこしいことが書いてあるんじゃないか
[]
[ここ壊れてます]

740 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 13:27:13.74 ID:TND9Xsam.net]
>>722
>当時のマイコンは貧弱で浮動小数点演算なんかやらせてたら遅くて仕方がなかった。

この辺は工夫次第
8bitPCが全盛だった頃、動く3Dオブジェクトを表示するのに機械語で演算処理組んでいた
全部整数化し、SIN関数値は全部テーブルで持たせていたな
試して見れば分かるが実際に必要なテーブル範囲は90度もいらない



741 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 13:37:21.57 ID:7JsiFjUt.net]
敵の弾が自分めがけて飛んでくる
ってたったそれだけでも中学の頃は大変だったな・・・
なつかしい

742 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 13:47:10.12 ID:ElSUubWJ.net]
>>730
大変だった

743 名前:
どんな式を立てたかは忘れたが、角度によって弾の速さが変わっちゃったりして試行錯誤してたな
[]
[ここ壊れてます]

744 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 13:51:42.60 ID:mkiFi/5o.net]
1フレームごとに最短距離で追尾してくる最も厄介なミサイルが実は一番簡単

745 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 14:58:15.54 ID:jTYdKpzW.net]
もうすでにC言語なんか関係なく回顧厨になっとるな。
俺も乗っかろう。
昔はBASIC標準のライン描画やらペイントルーチンが遅いので、いかに高速なアルゴリズムを作るかパソコン雑誌の特集になってたりしたな。
超高速中間色対応ペイントルーチン!みたいな。
ある意味、良い時代だった。

746 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 16:27:30.41 ID:GAiajT5F.net]
中間色とか20年以上聞いてない

747 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 19:06:16.01 ID:83kKikU4.net]
中間管理色

748 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 20:11:02.62 ID:oFUMlVxX.net]
タイルパターン

749 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 20:19:51.65 ID:dRudxIH1.net]
ランダムディザ

750 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 20:20:14.55 ID:TND9Xsam.net]
液晶上にある発光体の色は3種類
マゼマゼする原理は同じ



751 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 21:50:01.40 ID:PklssQfn.net]
>>734
CoolType/CelarTypeがそれに近いけどな

752 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 21:50:31.53 ID:YeNc+rPy.net]
R成分100%にB成分100%をビット演算で重ねる、みたいな話か。

753 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 22:58:16.11 ID:Lw38WY1e.net]
重ねるというよりも隣接するドットを違う色で決まったパターンで表示することで
擬似的に色調表現するテクニック
基本的に8色しか使えなかった頃に多色表現するために開発された手法
複数ドットでひとつの点を表現するためにいかに自然に見せるかといかに高速化するかが
プログラム的に腕の見せ所だった

754 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 23:26:42.92 ID:ElSUubWJ.net]
cleartype はそういうのじゃなく、三原色の並びを利用して擬似的に横方向の解像度を上げる方法でしょ。
1画素内に三原色が RGB と並んでた場合、それを2画素並べると以下のように画素の分解能を超えた位置に白点を表示できる。

RGB___ 白黒 … 座標 0 に白点
_GBR__ シアン赤 … 座標 1/3 に白点
__BRG_ 青黄 … 座標 2/3 に白点
___RGB 黒白 … 座標 1 に白点

755 名前:デフォルトの名無しさん mailto:sage [2018/09/05(水) 23:39:34.25 ID:PklssQfn.net]
>>742
知ってるぞ。
ClearTypeはsubpixel技術で、中間色はsubcolor技術だ。
まあ2)GrayScaleAAの方が近いといえばそうだが。
> 2) Grayscale anti-aliasing
> https://en.wikipedia.org/wiki/ClearType

756 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 00:30:08.44 ID:RM3Caylz.net]
文字表示から離れればという気もするが

757 名前:740 mailto:sage [2018/09/06(木) 05:55:34.60 ID:UQb09hzL.net]
すまん、投稿が受け入れられたタイミングがマズくて
>>739 に対する反応みたいに並んでしもうた。
>>740>>739 の「マゼマゼする原理は同じ」に乗っかったネタ文だ。

R成分100%とB成分100%をマゼマゼして、HTMLの16進表記で#FF00FFの色を作ったら、
「そりゃ“マゼンタ”だよ、バカだねぇお前さんは」という想定(しかし破綻)。

758 名前:740 == 745 mailto:sage [2018/09/06(木) 06:16:09.23 ID:UQb09hzL.net]
もちろん「マゼマゼ」は >>738 だよ、引用アンカーを間違えるとは。
マゼマゼでダメダメ。再び「バカだねぇお前さんは」

759 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 09:31:52.28 ID:/8o/0CpY.net]
>>745
ん?俺は別に煽られたとは捉えてないし問題ないぞ。
そもそも話が通じないのは「抽象思考」が出来てないからだ。

三角関数で → 円も描ける、であって、(演繹)
円を描く為には → 三角関数、ではない。(暗記)

とはいえ適用する場合は大体お約束的だし、
大学入試なんて解けるように作ってあるのだから、「暗記」タイプでも努力すれば数学の点も上げられる。
しかしそれでは駄目なんだよ。意味がない。
そして小学生に三角関数を教えても「暗記」にしかならないから、その時点で教えるのはやはり間違っている。
> これ割るこれがsin (>>711)
これも、結局の所これ以外にどう表現しろと?という話だからね。

これが嫌だったのなら教育関係に就職して改革すべきだが、
実際ゆとり教育を先導した戦犯役人はこのタイプだった(はずな)ので救えない。
理解出来なかった奴が「俺が理解出来なかったから」という理由で主導するからおかしな事になる。
今現在の「プログラミング教育導入」もこれに近く、
そもそもプログラミングできない/やったこと無い奴らが主導してるから暴走してる。

三角関数なんて、円以外で適用される場合の方が多い。
それを過度に円に結びつけるのは数学としては間違っている。
単振動なんて、本来は円運動とは関係ないだろ。あれはma=kxの解がsinxだって話であって。
内積が|a||b|cosθになるのだって、円なんて全く関係ないし。
三角関数は、「偶々そういう関数を定義したら、何か知らんけど色々使える」であって、その見方だと
> これ割るこれがsin
になってしまう。これ以外に表現しようがない。
逆に、「宇宙の全ては円で出来ている」(なぜなら三角関数が適用出来る場合が多いから)
という捉え方も出来なくはないが、こっちの方がカルトだろ。
おそらく、数学の発達過程で他にも色々関数が定義されて、でも使えない物は淘汰されて、
結果的に今の三角関数だけが残ったのだと思うぜ。

760 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 09:33:21.82 ID:/8o/0CpY.net]
中間色/CoolType./AAも、俺にとっては「隣接するピクセルを用いて中間値を表現すること」で同じだ。
お前らはそれを
・フォントの場合
・色/ピクセルの場合
と別々に覚えてるから別物に見える。それはお前らの脳内が「暗記」ベースだからだよ。

暗記ベースでプログラミングの上達を目指すのは「デザインパターン」だ。
しかしこれも必要以上に細分化し、しかもJava文法が足りない点を必死で補っていたりで、
はっきり言ってポシャったろ。あれでは無理があるのさ。
勿論、「暗記」しかできない奴はいまだにそれにすがり続けているようだが。

ただ、実際の所、プログラミングは当然実装出来ると分かっている範囲で為されることが圧倒的に多いので、
「暗記」ベースの手法でもほぼ全ケースで何かしらの適用が出来、対応出来る。
だからそんなに問題にはならず、ある意味Javaプログラマが一定レベルまで順当に成長するのはこれがある。
ただ、「暗記」ベースだと、知らない事は発想出来ない。別物扱いだから。
中間色を「抽象思考」で捉えているのなら、
方向を変えて適用した結果がCoolTypeでありAAでしかなく、これらは自然に連結する。
この点がずいぶん違う。



761 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 09:34:16.38 ID:/8o/0CpY.net]
この点に於いて、「暗記」ベースの奴は文法リッチな言語、JavaやC++の方がいい。
というかな、プログラミングが上達する奴と全く上達しない奴が居て、
別段人間的に問題がある(全く努力をしてない)訳ではないのが不思議だったのだが、
今のところの俺の結論はこれだ。
「暗記」ベースの奴はCやJavaScript等の文法がスカスカな言語では上達しにくい。(上達出来ない)

文法リッチな言語だと、「この文法はこのときに使う」というやり方で、
「プログラミングパターン」を「暗記」で積み上げることが出来る。
(これは本来「デザインパターン」と呼ばれるべき物だが、
この用語は継承をこねくり回したゴミの呼称となってしまっているので、敢えて別に命名する)
だから、文法を一通り押さえれば、知識としてのプログラミングパターンを一定量積み上げることが出来、
結果、一定までは確実に上達するというわけだ。
Javaはこの手法で平均レベルのプログラマを大量確保出来ている。

ただし逆に、文法等の暗記事項に計上されてないと、彼等は上達出来ないので、過度に暗記にすがる。
これが今の「デザインパターン」の状態だ。必要以上に細分化し、また、無駄に増やし続けている。
彼等にとっては新規パターンの登録と暗記がすなわち上達であり、それ以外に方法がないからだ。
したがって、今後ともこの暴走は続く。

C++erで言えば、彼等は shared_ptr/unique_ptr/weak_ptr の使い方にはご執心だが、そこまでしか見えていない。
次に導入されようとしている observer_ptr については必要性も使い方も分かっておらず、理解も出来ない。
なぜなら、「暗記」出来るのはそれらが定義されて以降であり、
「暗記」では現在未定義の物を演繹的に作り出すことが出来ないからだ。
良くも悪くも、C++が文法リッチになる過程で、CerとC++erが自然発生的に分かれてきたのはこの辺だと思う。
Linusから見ると、C++の文法もデザインパターンと同様のゴミの山に見えているはず。
(JavaScriptなんて、たったあれだけの文法で、C++で表現出来る範囲を越えるのだから笑える)

762 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 09:35:06.90 ID:/8o/0CpY.net]
Cの場合には文法がスカスカだから、
ポインタで → 何でも出来る、とならないと上達しにくい。(演繹)
この場合は → shared_ptr、では無理だ。暴走出来ない。(暗記)
だから「暗記」ベースな奴は文法リッチな言語を選んだ方がいい。
(ただしポインタがあまりに汎用性がありすぎて最適化等に問題があり、
結果、他言語では色々制限を付けられてきたのはご存じの通り)

逆に「たったこれだけの文法で全て表現出来るなんてステキ」と思える奴は
CやJavaScript等の文法スカスカ言語の方が向いてる。
JavaScriptがゴミゴミ言われながらもここまで残っているのもこの点が大きい。
あれは使える奴が使ったら凄く使える言語だ。
ただ、今のJavaScriptプログラマの大半がゴミなのも事実だが。

Cの授業が全く無駄だ、という話も出所はここだ。
プログラミングなんて、結局、「代入、条件分岐、関数呼び出し、ループ」でしかなく、
ループですら代入と条件分岐で実装出来るのだから冗長だ。
一応チューリング完全であるbrainfuckは関数呼び出しすらないので、これも冗長とも言える。
そしてCの授業で行われるのはまさに「代入、条件分岐、関数呼び出し、ループ」だけであり、
これでどうやって初音ミクが歌って踊るのだ?と初心者には思えるだろう。
最終的にはGPUを介してVRAM上に代入(ラスタライズ)しているだけだとしても、
それが初心者に見えるはずもない。
(もっとも、今の3Dベースの2D《テクスチャとして貼ってるだけ》だと
ラスタライズ結果をVRAMに戻しているかも怪しいが)

ただ、MITがSICPを止めたのと同様、今時初心者がCをやる必要はない。
DrawLineで線が描ける、HTML出力したら絵が出る、で済む連中がCやるのが間違ってる。
逆に、デバイスドライバ等を書いたり、
計算機自体の専門家(HighPerformanceComputing)等を目指すならCは必修になる。

763 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 09:42:07.42 ID:MYy5/YOc.net]
量子化誤差の拡散!

764 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 09:50:36.43 ID:2H4On29+.net]
コードもだらだら書いてるんだろうなぁ

765 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 10:01:03.49 ID:BRF//rri.net]
メモリーリークについて質問です
プログラム終了時に残ってしまったものに関してはOSが解放してくれるから対処しなくていいと聞きました
今までデバッグしてメモリーリークが出ると無くなるまで結構あれこれやってたんですが全部無駄だったんでしょうか

766 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 10:10:29.24 ID:2H4On29+.net]
>>753
終了時には解放してもらえるけど、メモリリークしたままだと動き続けられないじゃん。
たまに再起動してもらうの?

767 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 10:21:17.68 ID:BRF//rri.net]
あーいや想定してるのはちょっとした処理を行って出力して落ちるだけのプログラムなんです
ループの中で何回もmallocしてメモリを食いつぶすとかそんなことも無くて、ただ終了時まで動的確保した変数が解放されてないみたいな
そういう状況でお願いします

768 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 10:37:52.78 ID:2H4On29+.net]
>>755
そういう限定的な条件では解放は省略するって方針もあるかもね。
終了パターンがいろいろあると解放するだけでも一苦労だったりするし。

ただせっかく作ったそのコードは制約が多く他には転用しづらかったりと資産としての価値は低いと思う。
そもそもデバッグでメモリリークを発見とか言ってるとなると、メモリの管理はしっかりしてて解放を省略していることも設計に入ってる、という状況ではないんじゃないの?
それはメモリを管理できてないってことじゃないのかな。
そんな場当たり的なことやってると大きなコード書けないよ。
メモリリークを潰させるのは、メモリを解放すること自体が目的というよりメモリを管理させる教育的な目的じゃないかね。

769 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 11:35:05.98 ID:BRF//rri.net]
いや教育というか、上司が作ったAPIを利用して機能作れって指示が出ててですね
そのAPIが上で説明したように変数解放しないままプログラム終了してたって状況です
んでこれいいんですかこうすれば治りますがみたいなこと言ったらいいんだ勝手に解放されるかと

ともあれそういう方針が有りだということは分かりました。どうもです

770 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 11:39:51.63 ID:2H4On29+.net]
上司を教育してやりたいなw



771 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 11:42:26.02 ID:b42HI45e.net]
ここに呼んできて

772 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 11:55:09.68 ID:MYy5/YOc.net]
>>753
プロセス終了するなら、無駄です。

773 名前:デフォルトの名無しさん [2018/09/06(木) 12:07:29.83 ID:NrF/VtsZ.net]
そのAPIを流用するのは難しいな。
しないつもりなのかも知れないが。

まあしかしできればメモリリークしない方が良いな。
そのままだと常駐するプログラムのループの中で使えないし。

774 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 12:44:35.90 ID:5MBNHP4w.net]
>>757
上司の指示ならそのままにしとけばいい
メモリーリークしてもプロセス終了で解放されるから問題なし
って言う奴は一定数いて説得しても改心しないから放置しとくしかない
後々何かで事故った時のためにドキュメントに書いとけ

775 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 13:36:44.44 ID:N1zpzsdE.net]
たいていドキュメントは失われるので俺ならソースコメントに書いておくな。
「2018/09/06 メモリ解放してないので注意(先輩の指示で改修見送り)」

776 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 14:37:14.38 ID:3QzfQDga.net]
そりゃ、そういう状況では解放処理は抽象的な書き方にすべきなんですよ。
freeがなければ安心できないのって病気に近いよ。

777 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 19:28:33.32 ID:5MBNHP4w.net]
どういう状況か知らんけど
> こうすれば治りますがみたいなこと
言ってるにも関わらず対応しないのは宗教に近いよ

778 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 19:34:20.37 ID:hjZ1m3yx.net]
>>755
mayersだったかdinkumの人だったか忘れたけど、これはリソースリークじゃないって力説してて、
自分も同じセリフを言ってみたくてmain関数で確保したものを開放せずにいたら、
あとからそのmainだった関数に再入しないといけない要件が増えて涙した。
(小物ツールだったのに…)

というわけでfreeしようぜ

779 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 19:56:53.52 ID:/8o/0CpY.net]
>>757
> ちょっとした処理を行って出力して落ちるだけのプログラム
> 上司が作ったAPIを利用して機能作れって指示
× API
○ ツール

上司が作ったちょっとした「ツール」を使って(データの一部を切り出してきて)パイプ等で受ける場合、
そのツールがプロセス終了時に解放してないと文句を言うのは煙たがられる。
それは「意識高い系」すぎるし、そもそも君の担当範囲に何も悪影響はない。
そんなことはいいからお前の担当部分のバグを直せ、と思われているはず。

一応言っておくとfreeもタダではないので速度は落ちる。
必ずその後にプロセスが終了すると分かり切っているのなら放置もありだし、そっちの方が速い。
大方、精々1000行以下の上から下までつるっと動くだけのプログラムで、
最初に1回ワーク領域としてmallocして終わり、のパターンだろ。
割とどうでもいいね。実行形式のみでの配布なら問題になることはない。
(俺ならfreeしておくが。理由は>>766と同じで、流用するときにバグるから)

なお「API」では通常、別プロセスを起動して呼び出すことはない。(俺の知る限り)
本来「ツール」と表現すべき所を意図的に「API」と言うなら、相当な悪意だと受け取られる。
ただ単に間違ったのなら、お前は上司に対していちいち文句を言わず、
指示されたようにやるべきレベルだ。わきまえた方がいい。

ソースコードにコメント、は止めた方がいい。そこは上司への不満を書く場所ではない。
直すなら「潜在バグ」として正式登録、その必要がないと判断するなら放置したほうがいい。
数年後、君によって後輩が助かれば君は讃えられるだろうし、
そうでなければ君は痛かった奴だなと思われる、ただそれだけの話だ。
コメントだけ残して修正してませんでした、ってのはマジで痛いだけだから止めとけ。
誰も助からないし、生産性がない。
(バグを踏んだ後輩から見れば責任逃れせずにちゃんと直しておいてくれ、としか見えない)
そもそもそのツールがバグってたのなら作った上司の責任だし、
上司がそれを面倒がるのなら、そのソースの管理責任を君が受け取って自由に出来るはず。

780 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 19:59:05.01 ID:xdo6cDUj.net]
そんなに速度のことが気になるなら、グローバルでドカッと変数確保すりゃ良いだろう



781 名前: mailto:sage [2018/09/06(木) 20:06:34.02 ID:N2ZzCqNY.net]
>>755
きちんと malloc() した領域を free() できているように、それを重点的に書き直していくだけでも、プログラムの構造がわかりやすくなり、バグも少なくなるとおもいます

782 名前: mailto:sage [2018/09/06(木) 20:08:11.19 ID:N2ZzCqNY.net]
>>768
そうそう、malloc() したポインタを線形リストに登録しておいて、最後にまとめて free() するとか…

783 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 20:09:17.57 ID:L7E4s+iy.net]
>>768
さすがにそれはセンスがないのでは
ドカッと一発mallocならまだしも

784 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 20:12:16.01 ID:xdo6cDUj.net]
ツールに使う程度の小規模なプログラムなら、
グローバルで取ろうと気にしなくて良いと思うけどな

785 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 20:16:36.65 ID:/8o/0CpY.net]
>>768
さすがにプロセス起動/終了の方がfreeより100倍以上重いはずなので、
ここでfreeを速度の為にケチる、というのはナンセンス。
ただ、free一個分速いのは事実だし、Cは精神論的に速度を希求するからねえ。

多分、最初はグローバルで固定長バッファだったが、
もっと大きなサイズも必要になって、面倒だったからど頭でmallocに変更、だと思うよ。
割とありがちなパターンだし、この場合はfreeしない文化のような気もする。

786 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 20:32:13.62 ID:5MBNHP4w.net]
最近はあまりないけど実メモリーがカツカツの状態だとfree()する為にディスクからページを読み込む処理が大量に発生してなかなかアプリケーションが終了しないと言う事があったりする

787 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 20:36:44.52 ID:w4APQ8t2.net]
exitって重いの?
まあfreeするもんだと決め打ちはしたらあかんよ

788 名前:デフォルトの名無しさん [2018/09/06(木) 20:38:25.83 ID:64ZwjQvb.net]
freeしてないコードを池沼が書いて

freeしてないコードを
実績があるコードといって池沼が確かめもせずそのままコピペして流用する

よくあること

789 名前:デフォルトの名無しさん [2018/09/06(木) 20:40:44.45 ID:64ZwjQvb.net]
つまり池沼の代重ねで
どんどんメモリリークが酷くなっていく

790 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 20:49:38.63 ID:u/2SwpDg.net]
dtr は作るけど、コメントに「プロセス終了時にしか実行しないのでfreeしてない」と書いて放置してるわ



791 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 20:57:43.99 ID:/8o/0CpY.net]
>>774
ああ、なるほど。
そういえばスワップがある時にFireFoxを落とすだけでもずいぶんかかっていたのを思い出した。
なるほどそこでスラッシングしてたのか。

792 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 21:05:57.78 ID:2H4On29+.net]
>>779
うちの FireFox も終了時にモタモタしてるから、そうなるのが分かってる時はタスクマネージャーで殺したりするw

つかアプリは終了時に保存するもの保存したらリソースそのままで exit しちゃう方がいい気がしてきたわ。

793 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 21:22:48.78 ID:lfEPMv1j.net]
freeでスワップからページ読み込みするってマジ?
freeだけならdirtyページドロップするだけだと思ってたわ

794 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 21:38:33.95 ID:iyjSCMca.net]
freeがいちいちSVCなんかするわけねえだろ
それと、おまえスワップとページを混同してるな

795 名前:デフォルトの名無しさん [2018/09/06(木) 21:42:11.21 ID:RfogV38/.net]
>>781
ポインタ書き換えたりするから一度ディスクからメモリに戻さざるを得ないのでは?
ものすごく大きい領域を一括で確保した場合は全部戻す必要ないけど細切れに沢山確保してあるのをバラバラにfreeしたらなりそうだよね。

796 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 21:46:37.65 ID:7YUMDOtR.net]
>>781
free()すると管理領域を書き換えるためにページインが必要になる

797 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 21:52:07.32 ID:SMB/Y5b1.net]
ランタイムの実装とOSにどう伝えてるかの間のことを考え出すと激しく禿る思考停止
unix/linux な人はどう実装してるか確認してるの?

798 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 21:54:14.48 ID:N6MGums/.net]
>>782
そうなの?
例えばWindowsだとfreeは内部でHeapFreeをコールしてるのかと思ってた。
HeapFreeって恐らくSVC伴うよね?

799 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 23:11:21.70 ID:xdo6cDUj.net]
皆さん、実メモリってどの位積んでいるの?

800 名前: mailto:sage [2018/09/06(木) 23:42:12.50 ID:N2ZzCqNY.net]
>>787
DDR3 16G です、もっとほしい…



801 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 23:43:10.77 ID:f49/P0Og.net]
8G
しかしこのPCは5年以上前に買ったやつ。

802 名前:デフォルトの名無しさん mailto:sage [2018/09/06(木) 23:53:41.06 ID:iNL3W5R4.net]
>>781
単純に free だけの話じゃなく、自分が作り上げたオブジェクトツリーを辿りながら free していく過程でその(結局解放する)オブジェクトをページインすることになる。
C でオブジェクトとか言うことの是非は置いといて。

803 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 00:04:11.13 ID:oKo9UKIA.net]
>>787
Windows7 で 3GB。
Linux な家サーバだと 1GB。
Cプログラミングスタイルも細かくブロック分けてスタック節約するようなセコセコ型が基本。

804 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 06:00:25.35 ID:Pk3Mmzkj.net]
個人で使うための大したことないツールだったか、
この件の実験用に作ったプログラムだったか忘れたけど…。

そこそこ沢山のデータを、ひとつ読み取ってはmallocで確保した領域に保存、
ハッシュテーブル(値が重複する要素はリンクド・リストでつなぐ)にブチ込んで
個々のデータはプログラム終了まで破棄しない、て条件。

終了前に真面目にfreeして回るのと、そのままexitしてOSに片付けてもらうのと、
比較してみたらfreeのループ処理が意外に重かったんで、
解放処理の関数を残したまま呼び出し部だけ注釈にして、
// 解放すべきだと思いつつも無駄に重いんでOSに上手いことやってもらう
みたいな自分用のメモを残したわ。我ながらどっちつかずの折衷案。

805 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 07:56:45.53 ID:ZG8Bsw3G.net]
>787
Win7以降で最低4G、可能なら8G。3Dゲームやるなら16G以上。
XP時代は2Gか3Gだった。

806 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 07:57:24.56 ID:1SEeRaQU.net]
>>787
今使ってるマイコンのRAMは64バイト

807 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 08:06:16.22 ID:1SEeRaQU.net]
メモリを確保しっぱなしでわざわざ明示的に解放コードを書かないことはある
C++じゃなくてCだと特に

組み込みだとそもそも終了処理なんて物が無かったりする

808 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 08:35:25.77 ID:Ge6Y8svS.net]
>>792
(俺はそういう状況に遭遇したことがないが、)やるなら、
freeを生かしたまま残し、その直前でexit、
exitに「// free が遅いからここで強制終了」とコメントかな。

そもそもCはやたらfreeするようには出来てない。それはK&Rのfree実装をみても明らかだ。
C++や他GC言語のようにインスタンスを個別にmalloc/freeした方が
プログラミング的に美しく、自由度があるのも確かだが、
古来C流なら
> 個々のデータはプログラム終了まで破棄しない、て条件。
が分かっている時点で纏めてmallocし、内部的に切り出して使う、とかじゃないかな?
大きなテキストを1発mallocで確保し、内部的に改行コードで区切って使うみたいに。
初期データはインミュータブル扱い、追加/変更はインスタンス毎個別に確保、だ。

ただこれだと結局コードは増えてしまうし、個別freeすべきかのフラグを導入するか、
解放関数でインミュータブル領域かどうかを判定する必要がある。
そういうのが面倒だと最初から全部C++流にインスタンス毎個別に確保になり、
その分動作が遅くなるが、コード自体は綺麗に(統一的に)保たれる。
結局、コードを取るか、手間かけてその分高速化するか、でしかない。
気にならない程度なら、俺はC++流の個別確保の方がコードが綺麗だからいいと思うが。
(つまり今の君の実装)
気になるのなら、選択の余地無く高速化するしかないし。

809 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 08:38:20.43 ID:oKo9UKIA.net]
>>795
むしろ C++ の方が気安く new するから、そっちの方が放置したくならないかね。
根っこのオブジェクトを delete すれば後のはデストラクタがやってくれるとかで面倒さは少ないのかもしれないが。

何にしても、許されるのはきちんと解放できるけどあえてしない、ってのだけだな。
なんだかよく分かんないし面倒からOSに尻拭いしてもらうなんてのはダメだ。
fork で起こした子プロセスがメモリを free せず終了しても問題無いが、それをスレッドにしましょうなんてなった瞬間に破綻する。

810 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 09:28:39.55 ID:8HJNQC7B.net]
商業プログラムだとラッパだらけで直接free呼ばんし。
freeなしという選択肢は常に確保しとけばよい。



811 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 11:25:43.88 ID:/+XJI6DP.net]
>>786
え、WindowsにSystem z版てあるんだっけ?

812 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 12:12:28.24 ID:veel+fh4.net]
>>799
え?System z限定の話だったの?

813 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 12:18:34.93 ID:/+XJI6DP.net]
>>800
だってSVCって。。。

814 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 12:28:11.67 ID:veel+fh4.net]
>>801
スーパーバイザコールを拡大解釈して、いわゆる特権モードを伴うシステムコールとして書いてたわ。
誤解があったらすまん。

815 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 12:36:08.16 ID:H0y7xQ1z.net]
>>781
mmap経由ならOSによってはそうかもな

816 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 12:51:04.62 ID:/+XJI6DP.net]
>>802
おk
じゃあ、その前提で話を戻そう
freeはISO/IEC9899では宣言と引数の意味のみが規定され実装は未規定だ
782でああ言ったのは、freeする度毎にタイムスライスを放棄するような実装は
まずなかろうということだ

817 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 14:34:23.02 ID:lg5TGvmQ.net]
>>804
まず、786で書いたようにあくまで「思ってた」だけで確固たる根拠はないことを前提に。

freeするならどこからか借りていたメモリ領域を返却するわけで、仮想メモリ返却にはMMUを使ったページ管理が必要だよね?
仮想メモリページ管理はメモリマネージャー的なカーネルモードドライバが必要なはずで、つまり解放時にはシステムコールを伴う。

ただ、HeapFree時に直接カーネルモードで解放が実行されずメモリマネージャがガーベジコレクション的に後々回収するなら、あなたの言うとおりfree時にユーザーモードで閉じて処理されるかも。

このへん、Linuxとかどういう実装になってるんだろうね?

818 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 14:55:15.04 ID:Yr/2DouQ.net]
画期的なメモリ確保方式とか出来ないかな
例えばさ、名前付きタグを付けてメモリ確保し、
名前指定で一気に解放できるようにするとか

819 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 15:22:58.08 ID:OFkeqRjw.net]
Rust?

820 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 15:56:06.95 ID:/+XJI6DP.net]
>>805
freeがメモリを返却する相手が何者なのかは未規定だぞ
いちいちOSへ直に返しているとおまえさんの言うとおりだが
スタティックリンクライブラリがOSから大口で借りたメモリを切り売りする
スタイルならシステムコールの回数をガクンと減らせる
よくある実装は1MiBあたりを境に小容量は切り売りで大容量は直にという形



821 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 16:07:14.96 ID:lg5TGvmQ.net]
>>808
いや、俺はANSI Cとかの規定の話してるんじゃなくて、SVCって単語からこの議論がスタートしてるのでモダンなOS上の一般的な実装の話をしてると思ってたんだけど、違ったのか。

確かにアプリ起動時にある程度のヒープを最初から用意ってのはありそう。

822 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 16:15:46.30 ID:lg5TGvmQ.net]
>>806
ソフトで実現で良いなら、簡単に実現できそうね。
てかsmbか何かでそういう実装見たことあるような?

823 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 17:07:55.49 ID:+cI6iexZ.net]
>>805
Linux+glibcの環境なら、mallocは昔ながらのbrkシステムコールの方法と
mmapシステムコールの方法が状況に応じて使われる
freeしたときmmapをmunmapしてOSに返されることもある
はず。…たしか

824 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 18:11:36.24 ID:lg5TGvmQ.net]
>>811
なるほど、勉強になります。
やっぱりOSのメモリ管理をちゃんと理解しようとしたら参考になるので最低限glibcとmmapを読まないといけないね。

825 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 20:33:47.92 ID:lg5TGvmQ.net]
ちらっとmmapとglibc斜め読み

826 名前:してみた。
こんな世界があるんだとソフトエンジニア7年目にして新しい視点が開眼しそう。
色々気付きをくれた方々、ありがとうございました。
[]
[ここ壊れてます]

827 名前:デフォルトの名無しさん mailto:sage [2018/09/07(金) 23:08:07.85 ID:Ge6Y8svS.net]
>>806
ゆとりりゅうのすごいめもりかくほ、まで読んだ。

マジレスすると、
> 名前付きタグ
このコストが分からない馬鹿はCを学ぶ意味はあるだろう。
スクリプト言語しか使ったことのない奴に多いが。(例:ハッシュはタダだと思ってる)


>>805
> 仮想メモリ返却にはMMUを使ったページ管理が必要だよね?
お前は中途半端に勉強してるな。まあ悪いことではないが。
ページの単位は今も昔も4KBだ。その方法ではインスタンス毎の確保は出来ないと分かるだろ。

>>812-813
読むのは勝手だが、あまり関係ないところに深入りしても意味はないぞ。
7年目なら業務関連は一通り出来るようになっており、知識を横に広げているのかもしれないが、
OS関連の知識があってもな。

時間が有り余っていて手当たり次第に知識を吸収するのも一つの手だが、
もし大きい(10,000行以上)のを書いたことがないのなら、
まずは規模の限界(複雑さの限界)に挑戦する方がいいと思うが。

828 名前: mailto:sage [2018/09/07(金) 23:21:41.29 ID:WaHB6+zk.net]
>>814
>もし大きい(10,000行以上)のを書いたことがないのなら、まずは規模の限界(複雑さの限界)に挑戦する方がいいと思うが。
そうですね…
1万行ですか…
せいぜい 1000 行程度までしかやったことがありません、モチベーションが続かない・燃料切れ、という感じです

829 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 00:12:07.00 ID:kEO ]
[ここ壊れてます]

830 名前:PIOXH.net mailto: 行数が多ければいいというものでもないと思うが・・・ []
[ここ壊れてます]



831 名前:デフォルトの名無しさん [2018/09/08(土) 00:16:36.09 ID:L3ZkEci+.net]
だいぶ初歩の質問なんだけどextern宣言って本当に必須なの?コンパイラというかリンカによるのかもしれないけど、つけなくても同じ動作するよね?
今まで疑問に思わず書いてたけど、これを聞かれて色々試してみると実際つけなくても同様の動きしてるように見えるし、ちゃんと答えられなかったわ

832 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 00:16:57.63 ID:Bduckbke.net]
>>816
ならお前なりの妥当な規模を測る単位でも示せよ

833 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 00:24:37.23 ID:cJyrgWby.net]
>>816
否定ばかりして新しい提案をしない典型的無能要員

834 名前: mailto:sage [2018/09/08(土) 00:43:40.72 ID:t7GfMYxV.net]
>>817
ライブラリ関数をコールするだけなら extern は要らない子です、でもライブラリが独自の変数を定義して公開しているのならば extern がないと困ります
例えば <stdio.h> の stdin, stdout, stderr

835 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 01:03:55.35 ID:Bduckbke.net]
>>817
> 1. Declaration can be done any number of times but definition only once.
> 2. “extern” keyword is used to extend the visibility of variables/functions().
> 3. Since functions are visible through out the program by default. The use of extern is not needed in function declaration/definition. Its use is redundant.
> 4. When extern is used with a variable, it’s only declared not defined.
> 5. As an exception, when an extern variable is declared with initialization, it is taken as definition of the variable as well.
> https://www.geeksforgeeks.org/understanding-extern-keyword-in-c/
下のコード例が見やすい。
これが規格と合致しているのかは知らん。

836 名前: mailto:sage [2018/09/08(土) 01:26:25.96 ID:t7GfMYxV.net]
>>821
しかし C には仮定義 "tentative definition" があったりして混迷するのです
ISO/IEC 9899:1999 6.9.2.2
the behavior is exactly as if the translation unit contains a file scope declaration of that
identifier, with the composite type as of the end of the translation unit, with an initializer
equal to 0.

私には、これはリンカの仕業であってコンパイラが自ら行動しているようには見えないのですが…

837 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 04:02:52.50 ID:5gcJr6RX.net]
glibc は malloc だけで 5000行あるってね。
上級者スレに解説動画があったけど面白かったよ。

838 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 09:36:45.93 ID:gGqp1fFu.net]
>>814
>ページの単位は今も昔も4KBだ。その方法ではインスタンス毎の確保は出来ないと分かるだろ。
ごめん、これがよく分かんない。
MMUのページ単位が4KBなのと、インスタンス毎の確保はできないってのがつながらない。
てかここで言うインスタンスって何?

839 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 09:55:06.11 ID:+lRq1NsW.net]
>>824
インスタンス1つにいちいち4KBもアロケートするのかって話だろ

840 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:01:56.96 ID:gGqp1fFu.net]
>>825
別に1回のmallocで必ずしも毎回4KBのベージを割り当てる必要ないのでは?
mallocするのが小さいサイズなら確保済みの4KBの空いてるとこから割り当てれば良いし。
実際にはどういう実装になってるか知らんけど。



841 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:10:27.96 ID:3yA/EH7F.net]
そもそも動的メモリ確保/解放と仮想メモリ管理は直接関係ない話
組み込みだとMMUなんて存在しない環境もある

842 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:12:51.74 ID:Bduckbke.net]
>>826
それだとお前のレス
> freeするならどこからか借りていたメモリ領域を返却するわけで、仮想メモリ返却にはMMUを使ったページ管理が必要だよね?
> 仮想メモリページ管理はメモリマネージャー的なカーネルモードドライバが必要なはずで、つまり解放時にはシステムコールを伴う。
と矛盾するだろ。
お前は日本語が駄目なタイプか?

843 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:15:40.02 ID:gGqp1fFu.net]
>>828
そういう意味では、厳密には「4KB以上のfree」と書くべきだったかな?
ページサイズに言及したのは先の書き込みの後なので別に論理矛盾はないと思うけど。

844 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:25:31.57 ID:+lRq1NsW.net]
>>826
うん、俺もそう思うし
実際の実装もそうなっているのが多い
ただし4KBではなく1MiBとかだけど

845 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:29:17.43 ID:Bduckbke.net]
>>829
ぷろぐらみんぐのまえににほんごをがんばれ

846 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:29:54.08 ID:gGqp1fFu.net]
業務に関係なく完全に知的好奇心からのmalloc実装の想像だったので、やっぱりglibc読んでみよう。
色々レスくれた人、ありがとう。

847 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:38:55.04 ID:LzkjeqyB.net]
ファイルシステムの管理領域が大きくなりすぎて、
4KB以下のページサイズには出来ない

4MBで千個、4GBで百万個のページを管理しないといけないから、
管理領域だけでも、100MB以上になる

だから、ページサイズをもっと大きい、2MBにすると、
2GBで千個、2TBで百万個のページを管理できるから、今のHDD の容量に対応できる

848 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:43:05.81 ID:+lRq1NsW.net]
HDDだとシリンダ容量との親和性を考えないとね
だけどSSDが普及してる今どきの事情だとどうなんだろう

849 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:55:59.74 ID:AeS6DVc8.net]
>>833
> 4MBで千個、4GBで百万個のページを管理しないといけないから、
> 管理領域だけでも、100MB以上になる

管理領域ってどう計算してるの?

850 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 10:58:20.45 ID:cJyrgWby.net]
一領域当たり100byte



851 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 11:02:40.38 ID:AeS6DVc8.net]
>>836
すまん、聞き方がアホだった
その1領域が100Byteになる理由を聞きたかった

852 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 11:31:35.27 ID:Bduckbke.net]
>>833
つHugePage

853 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 16:08:33.18 ID:u7HqPj1f.net]
utf8procというUnicodeライブラリを使いたいのですが、C99に準拠してるかどうかって分かりますか?
「emulate C99 bool」というコメントがソースコードにあったのでおそらくC89あたりからサポートしていると思うんですが。
https://github.com/JuliaStrings/utf8proc

854 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 17:17:58.22 ID:AMMRWQYD.net]
>>839
C99に準拠している
そのコメントの少し前に
「MSVC prior to 2013 lacked stdbool.h and inttypes.h」ってコメントがあるからWindowsの古い環境のためにboolとかを定義しているだけだね

855 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 18:36:43.66 ID:LzkjeqyB.net]
OSのすべての機能を学びたいなら、ムック本の
Linuxエンジニア養成読本、第3版、2016

カーネル、起動処理、仮想記憶、
ファイルシステム、シェルスクリプトなど

ファイルシステム・管理領域の仕組みなどを読んで

856 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 18:44:21.19 ID:+lRq1NsW.net]
タネンバウム先生の本でしょ
すごい弟子を育てた伝説の師匠

857 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 18:49:46.85 ID:kiLcyFGE.net]
なにそれ、すごい面白そう!
アラサーだけどまだまだ青二才だしとっても勉強になります!

858 名前:デフォルトの名無しさん mailto:sage [2018/09/08(土) 19:31:07.27 ID:AeS6DVc8.net]
>>841
>>837にレス頼む

859 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 05:27:49.39 ID:pVz5FNGY.net]
>>840
ありがとうございます!
これでUnicodeが古い環境で心置きなく使えますわ。

860 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 14:54:16.40 ID:/XE3HNn6.net]
ここのスレの人はValgrindは
使っているんだろうか。
メモリリークとか考えれば
ぜひ使うべきツールだと思う。
https://qiita.com/tjun/items/e9d2f7da3c94eb0240d8



861 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 15:31:42.46 ID:pIlBTOwT.net]
便利だよね
ただ役に立ってるときはクソコードを触ってるときでもあると思う

862 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 15:44:39.72 ID:DwszjCT1.net]
変数中の "1" のビット数を数える効率的方法ありますか?
aが32ビットとして
for (i = 0; i < 32; i++) {
j = j + a & 1;
a = a >> 1;
}
みたいに1ビットずつカウントするしかないでしょうか
あるいは、8bitとかで区切ってテーブルを引いて加算とかでしょうか(16ビットや32ビットのテーブルは現実的でないので)

863 名前:デフォルトの名無しさん [2018/09/09(日) 15:50:52.78 ID:V1LakR3i.net]
a=(a&0a55555555)+(a>>1&0a55555555);
a=(a&0a33333333)+(a>>2&0a33333333);
a=(a&0a0F0F0F0F)+(a>>4&0a0F0F0F0F);
a=(a&0a00FF00FF)+(a>>8&0a00FF00FF);
a=(a&0a0000FFFF)+(a>>16&0a0000FFFF);

864 名前:デフォルトの名無しさん [2018/09/09(日) 15:53:41.89 ID:V1LakR3i.net]
a = (a & 0x55555555) + (a >> 1 & 0x55555555);
a = (a & 0x33333333) + (a >> 2 & 0x33333333);
a = (a & 0x0F0F0F0F) + (a >> 4 & 0x0F0F0F0F);
a = (a & 0x00FF00FF) + (a >> 8 & 0x00FF00FF);
a = (a & 0x0000FFFF) + (a >> 16 & 0x0000FFFF);

865 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 16:07:17.49 ID:TAQT5wBe.net]
32ビットだしその書き方良くないと思います

866 名前:デフォルトの名無しさん [2018/09/09(日) 16:54:40.77 ID:V1LakR3i.net]
https://ideone.com/FGqs1S
なにも問題ない
レスをコピペで普通に動く

アホがいちいち車輪の再発明するよりとりあえず↓コレ使っとけば間違いない
gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
Built-in Function: int __builtin_popcount (unsigned int x)
 Returns the number of 1-bits in x.
Built-in Function: int __builtin_popcountl (unsigned long)
 Similar to __builtin_popcount, except the argument type is unsigned long.
Built-in Function: int __builtin_parityll (unsigned long long)
 Similar to __builtin_parity, except the argument type is unsigned long long.

867 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 17:39:09.00 ID:/XE3HNn6.net]
>>847
自作ツールで無茶苦茶
役に立ってしまった。
そうか、クソコードだったかw

それはさておき今回の発端>>757は、
メモリリークなんか気にしはじめたら
修正コストがどれくらいかかるか
わからない、それだったら現状で
問題は表面化してないし、
そのままでいいじゃん、みたいな
状況だと思う。

Vargrindを導入して
手軽にメモリリークを
チェックできれるようになれば、
上司にもとりあえず直しましょう
という説得ができる
チャンスもあるかも。

868 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 17:57:06.08 ID:2r/FT+Vi.net]
>>850
うまいやり方だなぁ

869 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 17:57:22.00 ID:lGJ+2GvF.net]
>>850 この式は初めて見ると訳の分からない呪文みたいだけど、
落ち着いて考えると分割統治の技法を並列処理してるんだよね。
これで1の立ってるビットの数が分かる理由を考えるのは良い教材かと。

870 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 18:06:01.01 ID:2r/FT+Vi.net]
>>850
少なくとも最後の行だけは
a = (a + (a >> 16)) & 0x0000FFFF;
の方がよさそう。
正確には最大 32 にしかならないから & 0x0000001F でもよさそうだし、値の上限を考えながらだと途中の行ももう少し演算を減らせたりするかも?



871 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 18:06:59.52 ID:2r/FT+Vi.net]
>>856
0x0000003F だったw

872 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 20:35:00.38 ID:2r/FT+Vi.net]
>>850
a = (a & 0x55555555) + (a >> 1 & 0x55555555);
a = (a & 0x33333333) + (a >> 2 & 0x33333333);
a = (a + (a >> 4)) & 0x0F0F0F0F0F;
a += a >> 8;
a = (a + (a >> 16)) & 0x3F;

でも同じ結果が得られた。
最適化無しだと 9% くらい速くなった。

873 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 20:36:22.47 ID:2r/FT+Vi.net]
>>858
0F 多すぎw
0x0F0F0F0F ね

874 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:00:45.14 ID:4c2hO8gX.net]
しね

875 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:13:17.93 ID:2r/FT+Vi.net]
a = (a & 0x55555555) + (a >> 1 & 0x55555555);
a = (a & 0x33333333) + (a >> 2 & 0x33333333);
a = (a + (a >> 4)) & 0x0F0F0F0F;
a = (a * 0x101 * 0x10001) >> 24;

にしたら >>850 より 24% 速くなった(pentiumM linux)。
でも gcc の速度最適化を入れるとどれも変わらないね。

876 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:19:41.88 ID:4c2hO8gX.net]
なに1人ではしゃいでんのこいつ。

877 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:28:41.02 ID:Vmegj8Hy.net]
CPUにそういう命令なかったっけ?
使うところでは割と使いそうだけど

878 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:45:09.16 ID:5vkdTLeD.net]
>>863
AlphaとかM16Cとか古いCPUにはあった気がする。
最近はあんまり見ないね。

879 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:54:33.81 ID:nMOWxsiw.net]
ああ、SSEにpopcntがあるね

880 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 22:32:42.62 ID:hCV1tk8e.net]
ポックント



881 名前:デフォルトの名無しさん [2018/09/10(月) 02:37:34.95 ID:hUyLWeb6.net]
ビットを数える・探すアルゴリズム
www.nminoru.jp/~nminoru/programming/bitcount.html

882 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 10:36:25.17 ID:o5mvkory.net]
ビット数の数えあげが欲しくなるのってパリティチェックで末尾付加したりするとき?

883 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 10:44:53.73 ID:cl7nWcjG.net]
ソケットみたいにフラグをビット管理してるときとかもほしくなるかな

884 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 10:56:31.39 ID:ddUFIgl6.net]
符号とか暗号とかの世界ではしょっちゅう使うよ。
1の数で最適なアルゴリズムが変わるってケースもあるし、
暗号にサイドチャネル攻撃仕掛けるにはハミング距離とか重要。

885 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 11:27:01.59 ID:o5mvkory.net]
>>870 はなんとなく理解できるけど >>869 のほうは想像がつかないな
ビット管理されたフラグと ONしてるビット数による分岐や演算法が変わるのが直結しない感じ

886 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 11:51:19.73 ID:kNISuHie.net]
フラグは数えねえよな
性能重視でもなければビットフィールド使って読みやすくして欲しいわ

887 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 11:54:23.84 ID:iqhXZjjt.net]
バラで書くから読みにくいのであって
関数にしておけば外から見た仕様は変わらない

888 名前:デフォルトの名無しさん [2018/09/10(月) 12:16:32.03 ID:/R6yufrK.net]
普通の通信でエラー検出以外の目的でビット数を数える必要性がわからない。
そんな特定のCPU以外は必ず無駄な計算が必要になる方式をなぜ使う?

889 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 12:46:33.22 ID:x2RTnFiS.net]
>>874
エラー検出、訂正目的以外の通信のためにビットの数え上げするって誰かレスしてたっけ?

890 名前:デフォルトの名無しさん [2018/09/10(月) 15:09:59.53 ID:rXvKnWV4.net]
>>875
>>869はそうではないのか?ならば居ないな。



891 名前:デフォルトの名無しさん [2018/09/10(月) 19:25:38.98 ID:YAHzQjjo.net]
>>821
んーこの文章読むと、よく教科書的な本に書かれてる関数に対してexternを書きましょうってのは冗長で不要って話なのね。確かに実際の動きとは合うし勉強になりました。

>>822
書いてる意図を汲めてるのか自信ないけど、他のサイトにもリンカ依存とあって、この話が全ての環境に対して正しい話なのか・・・若干不安はある感じ?

892 名前:デフォルトの名無しさん [2018/09/10(月) 19:32:05.94 ID:WVFJrP31.net]
Common Lisp にビットを数える関数があるけどcでも同様のものがあったようなゔ

893 名前:デフォルトの名無しさん [2018/09/10(月) 20:00:47.59 ID:pZnz0RBT.net]
int a=0;

printf("%p" ,a);

printf("%p",&a);

同じアドレスが表示されると思っていたのですが、上下で違う数字が出力されました。
アドレスを表示するのはどちらが正しいのでしょうか?
よろしくお願いします。

894 名前:さまよえる蟻人間 mailto:sage [2018/09/10(月) 20:06:35.73 ID:NJC2soWX.net]
下。

895 名前:デフォルトの名無しさん [2018/09/10(月) 20:07:47.31 ID:WGo2tHWR.net]
>>879
&a の方。

ていうか同じになるわけがない。片方は printf() に a の内容である 0 を渡しているんだから。

896 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 20:26:02.04 ID:6MAzJtEj.net]
%p は ポインタを要求しているが
ポインタのサイズと intのサイズが違ってたら 鼻から悪魔

897 名前:デフォルトの名無しさん [2018/09/10(月) 20:28:01.62 ID:pZnz0RBT.net]
>>880
>>881
>>882

指定子Pで&が付いてない方も変換されると思っていました。
ただの数値が表示されるだけなんですね。

int *a;
int b=0;

a=&b;

printf("%p",a);
この場合は&が付いてなくてもアドレスを渡してるのでokなんですね。

ありがとうございました。

898 名前:デフォルトの名無しさん [2018/09/10(月) 20:29:18.90 ID:WGo2tHWR.net]
天文学的な値が出るかも知れんね

899 名前:デフォルトの名無しさん [2018/09/10(月) 20:30:01.84 ID:WGo2tHWR.net]
>>883
そうそう。そういうこと。

900 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 20:43:33.30 ID:l5sdNefZ.net]
>>869
それはどっちかって言うとビットサーチだね
68020 とかの BFFFO 命令とか



901 名前:デフォルトの名無しさん [2018/09/10(月) 21:01:01.97 ID:XzQQxj6r.net]
https://ideone.com/bsjclG

また、低学歴知恵遅れのクルクルパーがウソ書いてるわ。。。
64bitのアドレス空間を持ってて、intのサイズが32bitならちゃんと動くワケがないからな

902 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:07:42.09 ID:XxqHEWUO.net]
>>887
どの書き込みに対してのレス?

903 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:11:41.72 ID:7zqNUn7X.net]
>>887
これまたチンケな知識でマウント取りに来たな w

904 名前:デフォルトの名無しさん [2018/09/10(月) 21:12:59.71 ID:XzQQxj6r.net]
ID:WGo2tHWR ← コイツにきまってんだろ

なあにが

 そうそう。そういうこと。



なにも知らないムクなヤツ相手に
低学歴知恵遅れの分際でテキトーなことばっかり書き込んでる

905 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:16:56.02 ID:XxqHEWUO.net]
ん?これのこと?
> printf() に a の内容である 0 を渡している

906 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:19:04.26 ID:6SoA/END.net]
こんなにでかい釣り針だと
鯨が釣れるかも

907 名前:デフォルトの名無しさん [2018/09/10(月) 21:19:36.92 ID:XzQQxj6r.net]
>>883 ← ムクな初心者
>>885 ← 低学歴知恵遅れ ID:WGo2tHWR 「そうそう。そういうこと。」 ← コレのコトだ

低学歴知恵遅れはレスもおえないの?

908 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:21:51.21 ID:XxqHEWUO.net]
あれ?
int *a;
int b=0;
a=&b;
printf("%p",a);
って別に正しくね?

909 名前:デフォルトの名無しさん [2018/09/10(月) 21:22:53.59 ID:XzQQxj6r.net]
https://ideone.com/bsjclG

この処理結果みても分からないなら
オツムに相当な問題がある

910 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:25:52.44 ID:XxqHEWUO.net]
ううむ、俺にはaは64ビット環境だと64ビット長に見えるのだが違うのか?



911 名前:デフォルトの名無しさん [2018/09/10(月) 21:27:36.20 ID:XzQQxj6r.net]
で、処理結果みた?
で、処理結果みた?
で、処理結果みた?

912 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:29:43.88 ID:XxqHEWUO.net]
おたくのサンプルは64ビットアドレスをintにキャストしちゃてるやん。そりゃ実行結果違うわ。

913 名前:デフォルトの名無しさん [2018/09/10(月) 21:31:35.87 ID:XzQQxj6r.net]
https://ideone.com/PGwK6j
キャストはずしたったぞ
当然、結果はかわらない

やっぱりなこの板は低学歴知恵遅れしかいない
この程度のこともわからずにいきってレスしてるワケだからな

914 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:31:51.59 ID:6MAzJtEj.net]
たまたま 足りない分 0 を引っ張ってきてるけど(レジスタで渡ったから?)
スタックに積んでるリターンアドレスの一部から足りないのを補ってると、もっとわけわかな数値に
未定儀の挙動を推測すすのもまたオツなもの か

915 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:32:51. ]
[ここ壊れてます]

916 名前:39 ID:XxqHEWUO.net mailto: いやいや、883のaはポインタなんだってw
なんでintに入れちゃうのw
[]
[ここ壊れてます]

917 名前:デフォルトの名無しさん [2018/09/10(月) 21:33:36.29 ID:XzQQxj6r.net]
そんなことオレのしったことじゃないからな

 >>883 ← ムクな初心者
 >>885 ← 低学歴知恵遅れ ID:WGo2tHWR 「そうそう。そういうこと。」 ← コレのコトだ

低学歴知恵遅れはレスもおえないの?

918 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:40:38.56 ID:lZ/O7dtJ.net]
半角クンていつも周りを見ずに自分の思い込みだけでレスしちゃって誤り訂正できないから、恥ずかしい(*/□\*)

直進しかできない目隠しされたイノシシみたい

919 名前:デフォルトの名無しさん [2018/09/10(月) 21:42:09.42 ID:XzQQxj6r.net]
なにが間違いなわけ
指摘してみ

一切間違ったこと書いてないからな
低学歴知恵遅れはそもそも認知能力に問題がある

920 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:47:36.63 ID:XxqHEWUO.net]
なぜ64ビットポインタをintに入れたの?
883ではそんなこと一切してないんだけど。

逆に
>printf() に a の内容である 0 を渡している
は整数リテラルがintなのに%pで受けてるので、64ビット環境なら4バイト分スタックのゴミを拾ってきそうだけど。



921 名前:デフォルトの名無しさん [2018/09/10(月) 21:48:46.40 ID:XzQQxj6r.net]
はずかしくなって
こっち側にこようとしても
もう手遅れだからな

922 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:50:57.43 ID:XxqHEWUO.net]
なんだ、結局はaがポインタだってことを見逃しただけかよw

923 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:55:18.07 ID:cYYSBBs1.net]
>>906
つ鏡

924 名前:デフォルトの名無しさん [2018/09/11(火) 00:11:24.08 ID:X6CualfE.net]
>>887
>>883はちゃんと動くよ。

925 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 06:35:01.60 ID:pvBPsgEg.net]
>>909
半角野郎が数行のプログラムも理解できないくせに自分で改竄したコードが動かねぇって騒いでただけ。
半角野郎こそ低学歴知恵遅れクルクルパーで認知能力とオツムに相当な問題があるってことが証明されただけなので気にするな。
本人は顔真っ赤にして逃げたみたいだけど。

926 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 07:57:47.34 ID:2zsIBj+S.net]
ポインタを受け取るべき%p変換指定子に、ポインタでない値を与えることの
危険性は >>882 ですでに指摘されてるのに、後乗りで書いた >>887
こんだけ引っ張れるのは、ある意味で才能かもな。

汚い言葉遣いを我慢しながら拝聴するほど啓蒙的な内容でもないし。

927 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 08:11:06.15 ID:NBDkJ3+C.net]
>>911
半角クンのレスは、5%の真実と15%の間違い・思い込みと80%の繰り言・罵詈雑言でできてるからね。まっとうに読む価値はない。

928 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 09:54:24.68 ID:oX9GyHv1.net]
まれにいいこと言う
850とか

929 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 10:00:02.68 ID:R1B4IsqD.net]
釣り針が大きすぎて、クジラじゃないと釣れない

930 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 11:44:57.89 ID:zLtJmO+E.net]
musl-libcのiconvコマンドの本体ってここを見ればいいよね?
https://git.musl-libc.org/cgit/musl/tree/src/locale/iconv.c



931 名前:デフォルトの名無しさん [2018/09/11(火) 20:05:08.62 ID:YMBQMGAL.net]
処理系って何?
cpuかコンパイラの事かなと思ってるんだけど。
間違ってる?

932 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 20:29:34.46 ID:5X7KAgIC.net]
処理系は、翻訳環境と、実行環境に大別される
翻訳環境とはコンパイラ等開発ツールを実行する環境
実行環境とはコンパイル結果のバイナリが稼働する環境、客先と言ってもよい

933 名前:デフォルトの名無しさん [2018/09/11(火) 20:36:50.64 ID:YMBQMGAL.net]
>>917
バイナリが稼働する環境はcpuってことかな
どうもお世話になりました

934 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 20:45:37.73 ID:5X7KAgIC.net]
cpuだけじゃないメモリが実装されているアドレス
i/oが実装されているアドレス
osの挙動
など様々な要因が絡む

935 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 21:01:49.97 ID:LZbcaZ/B.net]
CPUが同じであっても、
Windowsでは動かせてもmacOSでは動かないとか
同じWindowsでも、64bit環境では動いても32bit環境だと動かないとか

936 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 21:12:52.13 ID:ShO/owiX.net]
半角くん、いたの?
lynx で見てるから何言ってるかわからない。

937 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 21:17:38.28 ID:pVzZZpUQ.net]
ゴミPC早く捨てろ

938 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 21:28:47.48 ID:zLtJmO+E.net]
処理系ってC99に関してはJISで定義されてたよね。

939 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 21:21:47.72 ID:1sKEH3Wo.net]
昔の教科書には
C言語の原稿
↓プリプロセッサ
マクロ・ヘッダファイルが展開された原稿
↓翻訳機
アセンブリ言語の原稿
↓アセンブラ
機械語
↓リンカ
実行可能ファイル

っていう図がよく描かれてて,今でもWebを検索するとよく見掛けるんだけど,ほんとに今現在のコンパイラってこういうことやってんの?
gccやclangって,もはやC言語の原稿からほぼほぼ直接に実行可能ファイルを生成してるんじゃない?
さすがにプリプロセッサくらいはあるかもしれんが。

940 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 21:32:27.37 ID:CY4XgXEU.net]
-vつけて起動してみ。
プリプロcppはcc1に統合された。
gccだと、cc1とかasとかcollect2とかが動いてるはず。
clangはデフォルトだとasなしかも。



941 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 21:54:33.53 ID:1sKEH3Wo.net]
>>925
あざす
やっぱり減ってはいるんだな。
結構ああいう図を見掛けるんで,なんか(ほんとにこんな段階踏んでんのか?)ってモヤモヤしてた。
素人考えだが,あんな風に幾つも重ねてビルドしてたら最適化しにくい気がするし。

942 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 22:33:23.35 ID:brIJUf4C.net]
処理としてはわかれてるよそりゃ

943 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 23:18:13.03 ID:1sKEH3Wo.net]
え そうなん
と思って空のファイルをgcc -vで処理したら
たしかにある程度進んでリンカの段階で エラーになったわ。

944 名前:デフォルトの名無しさん [2018/09/13(木) 23:28:49.69 ID:yqnwLH2V.net]
bash-4.3$ gcc -v -o aho aho.c ←開始
/usr/lib/gcc/i586-slackware-linux/5.3.0/specs から spec を読み込んでいます
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/i586-slackware-linux/5.3.0/lto-wrapper
ターゲット: i586-slackware-linux
configure 設定: ../gcc-5.3.0/configure --prefix=/usr --libdir=/usr/lib --mandir
=/usr/man --infodir=/usr/info --enable-shared --enable-bootstrap --enable-langu
ages=ada,c,c++,fortran,go,java,lto,objc --enable-threads=posix --enable-checkin
g=release --enable-objc-gc --with-system-zlib --with-python-dir=/lib/python2.7/
site-packages --enable-libstdcxx-dual-abi --with-default-libstdcxx-abi=gcc4-com
patible --disable-libunwind-exceptions --enable-__cxa_atexit --enable-libssp --
enable-lto --disable-install-libiberty --with-gnu-ld --verbose --enable-java-ho
me --with-java-home=/usr/lib/jvm/jre --with-jvm-root-dir=/usr/lib/jvm --with-jv
m-jar-dir=/usr/lib/jvm/jvm-exports --with-arch-directory=i386 --with-antlr-jar=
/root/slackware-current/source/d/gcc/antlr-runtime-3.4.jar --enable-java-awt=gt
k --disable-gtktest --with-arch=i586 --target=i586-slackware-linux --build=i586
-slackware-linux --host=i586-slackware-linux
スレッドモデル: posix
gcc バージョン 5.3.0 (GCC)
(-続く-)

945 名前:デフォルトの名無しさん [2018/09/13(木) 23:29:23.47 ID:yqnwLH2V.net]
(-続き-)
COLLECT_GCC_OPTIONS='-v' '-o' 'aho' '-mtune=pentium' '-march=i586'
/usr/libexec/gcc/i586-slackware-linux/5.3.0/cc1 -quiet -v aho.c -quiet -dumpba
se aho.c -mtune=pentium -march=i586 -auxbase aho -version -o /tmp/ccVi37md.s ← @プリプロセス
GNU C11 (GCC) version 5.3.0 (i586-slackware-linux)
compiled by GNU C version 5.3.0, GMP version 6.1.0, MPFR version 3.1.4, MPC
version 1.0.3
warning: GMP header version 6.1.0 differs from library version 6.1.2.
GGC heuristics: --param ggc-min-expand=63 --param ggc-min-heapsize=62246
存在しないディレクトリ "/usr/lib/gcc/i586-slackware-linux/5.3.0/../../../../i58
6-slackware-linux/include" を無視します
#include "..." の探索はここから始まります:
#include <...> の探索はここから始まります:
/usr/lib/gcc/i586-slackware-linux/5.3.0/include
/usr/local/include
/usr/lib/gcc/i586-slackware-linux/5.3.0/include-fixed
/usr/include
探索リストの終わりです。
(-続く-)

946 名前:デフォルトの名無しさん [2018/09/13(木) 23:30:05.16 ID:yqnwLH2V.net]
(-続き-)
GNU C11 (GCC) version 5.3.0 (i586-slackware-linux) ← Aコンパイル
compiled by GNU C version 5.3.0, GMP version 6.1.0, MPFR version 3.1.4, MPC
version 1.0.3
MPC version 1.0.3
warning: GMP header version 6.1.0 differs from library version 6.1.2.
GGC heuristics: --param ggc-min-expand=63 --param ggc-min-heapsize=62246
Compiler executable checksum: c5a3ffed702d1cd048214b2b66d4a98a
(-続く-)

947 名前:デフォルトの名無しさん [2018/09/13(木) 23:30:29.37 ID:yqnwLH2V.net]
(-続き-)
COLLECT_GCC_OPTIONS='-v' '-o' 'aho' '-mtune=pentium' '-march=i586'
/usr/lib/gcc/i586-slackware-linux/5.3.0/../../../../i586-slackware-linux/bin/a
s -v --32 -o /tmp/ccMFr9O6.o /tmp/ccVi37md.s ← Bアセンブル
GNU アセンブラ バージョン 2.26 (i586-slackware-linux)、BFD バージョン version 2
.26.20160125 を使用
(-続く-)

948 名前:デフォルトの名無しさん [2018/09/13(木) 23:31:04.04 ID:yqnwLH2V.net]
(-続き-)
COMPILER_PATH=/usr/libexec/gcc/i586-slackware-linux/5.3.0/:/usr/libexec/gcc/i58
6-slackware-linux/5.3.0/:/usr/libexec/gcc/i586-slackware-linux/:/usr/lib/gcc/i5
86-slackware-linux/5.3.0/:/usr/lib/gcc/i586-slackware-linux/:/usr/lib/gcc/i586-
slackware-linux/5.3.0/../../../../i586-slackware-linux/bin/
LIBRARY_PATH=/usr/lib/gcc/i586-slackware-linux/5.3.0/:/usr/lib/gcc/i586-slackwa
re-linux/5.3.0/../../../../i586-slackware-linux/lib/:/usr/lib/gcc/i586-slackwar
e-linux/5.3.0/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-o' 'aho' '-mtune=pentium' '-march=i586'
/usr/libexec/gcc/i586-slackware-linux/5.3.0/collect2 -plugin /usr/libexec/gcc/
i586-slackware-linux/5.3.0/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/i586-s
lackware-linux/5.3.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccGuF6mf.res -pl
ugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pas
s-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s
--eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o aho /usr/lib/
gcc/i586-slackware-linux/5.3.0/../../../crt1.o /usr/lib/gcc/i586-slackware-linu
x/5.3.0/../../../crti.o /usr/lib/gcc/i586-slackware-linux/5.3.0/crtbegin.o -L/u
sr/lib/gcc/i586-slackware-linux/5.3.0 -L/usr/lib/gcc/i586-slackware-linux/5.3.0
/../../../../i586-slackware-linux/lib -L/usr/lib/gcc/i586-slackware-linux/5.3.0
/../../.. /tmp/ccMFr9O6.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --
as-needed -lgcc_s --no-as-needed /usr/lib/gcc/i586-slackware-linux/5.3.0/crtend
.o /usr/lib/gcc/i586-slackware-linux/5.3.0/../../../crtn.o ← Cリンク

949 名前:デフォルトの名無しさん [2018/09/13(木) 23:34:54.24 ID:yqnwLH2V.net]
普通に別々のモジュールで独立して処理されてる

@プリプロセス /usr/libexec/gcc/i586-slackware-linux/5.3.0/cc1
Aコンパイル /usr/bin/gcc
Bアセンブル /usr/lib/gcc/i586-slackware-linux/5.3.0/../../../../i586-slackware-linux/bin/as
Cリンク /usr/libexec/gcc/i586-slackware-linux/5.3.0/collect2

950 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 00:17:52.55 ID:lqNqtREE.net]
>>934
/usr/bib/gccはちげーだろ



951 名前:デフォルトの名無しさん [2018/09/14(金) 00:51:20.40 ID:q3l06dS7.net]
>>934
コンパイルは
/usr/lib/x86_64-linux-gnu/6/cc1
だな。俺の場合

952 名前:デフォルトの名無しさん [2018/09/14(金) 00:58:32.39 ID:fXySkelb.net]
bash-4.3$ gcc -v -E -o aho_.c aho.c ←開始
/usr/lib/gcc/i586-slackware-linux/5.3.0/specs から spec を読み込んでいます
COLLECT_GCC=gcc
ターゲット: i586-slackware-linux
configure 設定: ../gcc-5.3.0/configure --prefix=/usr --libdir=/usr/lib --mandir
=/usr/man --infodir=/usr/info --enable-shared --enable-bootstrap --enable-langu
ages=ada,c,c++,fortran,go,java,lto,objc --enable-threads=posix --enable-checkin
g=release --enable-objc-gc --with-system-zlib --with-python-dir=/lib/python2.7/
site-packages --enable-libstdcxx-dual-abi --with-default-libstdcxx-abi=gcc4-com
patible --disable-libunwind-exceptions --enable-__cxa_atexit --enable-libssp --
enable-lto --disable-install-libiberty --with-gnu-ld --verbose --enable-java-ho
me --with-java-home=/usr/lib/jvm/jre --with-jvm-root-dir=/usr/lib/jvm --with-jv
m-jar-dir=/usr/lib/jvm/jvm-exports --with-arch-directory=i386 --with-antlr-jar=
/root/slackware-current/source/d/gcc/antlr-runtime-3.4.jar --enable-java-awt=gt
k --disable-gtktest --with-arch=i586 --target=i586-slackware-linux --build=i586
-slackware-linux --host=i586-slackware-linux
スレッドモデル: posix
(-続く-)

953 名前:デフォルトの名無しさん [2018/09/14(金) 00:59:43.97 ID:fXySkelb.net]
(-続き-)
gcc バージョン 5.3.0 (GCC)
COLLECT_GCC_OPTIONS='-v' '-E' '-o' 'aho_.c' '-mtune=pentium' '-march=i586'
/usr/libexec/gcc/i586-slackware-linux/5.3.0/cc1 -E -quiet -v aho.c -o aho_.c -
mtune=pentium -march=i586
存在しないディレクトリ "/usr/lib/gcc/i586-slackware-linux/5.3.0/../../../../i58
6-slackware-linux/include" を無視します
#include "..." の探索はここから始まります:
#include <...> の探索はここから始まります:
/usr/lib/gcc/i586-slackware-linux/5.3.0/include
/usr/local/include
/usr/lib/gcc/i586-slackware-linux/5.3.0/include-fixed
/usr/include
探索リストの終わりです。
COMPILER_PATH=/usr/libexec/gcc/i586-slackware-linux/5.3.0/:/usr/libexec/gcc/i58
6-slackware-linux/5.3.0/:/usr/libexec/gcc/i586-slackware-linux/:/usr/lib/gcc/i5
86-slackware-linux/5.3.0/:/usr/lib/gcc/i586-slackware-linux/:/usr/lib/gcc/i586-
slackware-linux/5.3.0/../../../../i586-slackware-linux/bin/
LIBRARY_PATH=/usr/lib/gcc/i586-slackware-linux/5.3.0/:/usr/lib/gcc/i586-slackwa
re-linux/5.3.0/../../../../i586-slackware-linux/lib/:/usr/lib/gcc/i586-slackwar
e-linux/5.3.0/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-E' '-o' 'aho_.c' '-mtune=pentium' '-march=i586'

エラーなし

954 名前:デフォルトの名無しさん [2018/09/14(金) 01:02:16.51 ID:fXySkelb.net]
プリプロセス前
bash-4.3$ cat aho.c
#include <stdio.h>
#define ahobaka "あほばか"
#define AHOBAKA aho##baka
#define LIT(str) #str
#define PRINT(f,...) fprintf(stdout, f, __VA_ARGS__)
#define SHINE PRINT("%s%s\n", AHOBAKA, LIT(a"b"c))

int main(void) {
SHINE;
return 0;
}

プリプロセス後
bash-4.3$ cat aho_.c
(-略-)
# 8 "aho.c"
int main(void) {
fprintf(
# 9 "aho.c" 3 4
stdout
# 9 "aho.c"
, "%s%s\n", "あほばか", "a\"b\"c");
return 0;
}

955 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 04:27:04.26 ID:q3l06dS7.net]
pcc(1)とかで試すとわかりやすいとおもう。

956 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 05:58:00.88 ID:3Ef1q6jY.net]
コンパイラが(プリプロセス済みの)ソースを処理する際、
直接にはアセンブリのソースに持っていかず、いったん中間言語に変換。
その中間言語の段階でも最適化を行ってから
アセンブリに変換してアセンブル・リンク。
……みたいな手順になってると聞いたことがある。
中間言語段階の中間ファイルを出力させることができるか知らんけど。

プリプロセッサ、コンパイラ、アセンブラ、リンカよりも
内部的な手順はむしろ増えてるのかも。

957 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 07:13:28.65 ID:RUHHwTRx.net]
>>941
実行時コンパイラ
https://ja.wikipedia.org/wiki/%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9

958 名前:デフォルトの名無しさん [2018/09/14(金) 08:36:29.54 ID:SYmkUqRw.net]
JITとなんの関係が?

959 名前:デフォルトの名無しさん [2018/09/14(金) 08:49:57.91 ID:q3l06dS7.net]
>>941

>>924 の図に倣うなら

C言語の原稿
↓プリプロセッサ
マクロ・ヘッダファイルが展開された原稿
↓翻訳機1
中間言語(最適化済み)
↓翻訳機2
アセンブリ言語の原稿
↓アセンブラ
機械語
↓リンカ
実行可能ファイル

みたいなかんじかね。

960 名前:デフォルトの名無しさん [2018/09/14(金) 09:12:54.86 ID:d02sSTx1.net]
昔 LSIゲームってあったでしょ
ああいうゲームをCで書いてパソコンで遊びたいんだけど
技術的な情報が不足してんだ 特に画面を動かす方法
そういうのどこで手に入るか分かる人いる? 教えてくださいヽ(^o^)丿



961 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 09:49:18.88 ID:1qfFvEAu.net]
cursesライブラリを使う

962 名前:デフォルトの名無しさん [2018/09/14(金) 10:39:42.96 ID:i1kWv4b4.net]
CでGUIまでやりたいということか?
うーん・・・

963 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 12:08:50.95 ID:9XnUq3uB.net]
>>945
エスケープシーケンスで検索

とりあえず NetHack みたいので遊んでみたら

964 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 12:34:30.19 ID:3Ef1q6jY.net]
>>945 の言うLSIゲームってのが、
ドットマトリクスの汎用液晶パネルを使ったゲームじゃなくて、
ゲーム&ウォッチみたいな専用にデザインされた液晶のゲームだと
ちょいと変わってくるかもな。

大筋は同じだけど、少数のデカキャラ表示を点けたり消したり。

965 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 12:48:17.13 ID:9XnUq3uB.net]
イメージ伝えるためにLSIゲームと言うならドットマトリックスというよりゲームウォッチ式じゃないかな。
ただその趣旨は、簡易な操作と表示のゲームなんじゃないかと。
キャラクタ端末ゲームを知ればそっちに倒れるんじゃないかな?

966 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 12:53:46.05 ID:/Lpq1ndz.net]
>>945
画面表示はglut

967 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 13:39:29.18 ID:GvbetZ+k.net]
ゲームウォッチみたいなのってビットマップじゃないけど、表示する情報量どんくらいなんだろうね?
64bitくらい?

968 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 13:53:35.51 ID:q3l06dS7.net]
エスケープシーケンスの話が出たついでに質問なんだけど
コマンド名: エラーレベル: エラーメッセージ
↑こういう形式のエラーで、エラーレベルが赤や黄に色付けされてる場合があるんだけども
これってなにかライブラリがあるのかな。それとも各種アプリケーションが自力でやってんのかな。

969 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 14:03:35.51 ID:xLMWwHO5.net]
LSI-Cと聞いて飛んできました
懐かしい・・・

970 名前:デフォルトの名無しさん [2018/09/14(金) 15:19:32.14 ID:d02sSTx1.net]
>>949

そうそう ああいう感じでやれないかなと思ってる
別に3Dとかじゃないし そんなに高度な技術情報が必要とも思えないんだけどな
APIを勉強すればある程度分かるかな?



971 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 15:37:28.55 ID:GvbetZ+k.net]
色付けはほぼ自前なんじゃないかねえ。単に制御文字挟むたけだからね。

端末にお絵かきするならローグでも使った伝統あるcursesで。

972 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 10:21:05.36 ID:iTkubaya.net]
>>955
ttp://www.orchid.co.jp/computer/cgame/index.html

973 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 10:24:40.59 ID:RjcPqpvv.net]
>>952
ttps://www.nintendo.co.jp/n10/interview/game_and_watch/vol1/index2.html
>というのも、ゲーム&ウオッチで採用したチップは、電卓で使われているのと同じものだったんです。
>そもそも電卓のディスプレイのひとつの数字は7セグメントで表示されるようになっていまして・・・。
(略)
>72セグメントの表示が可能だったそのチップを使って『ボール』をつくったんです。

974 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 12:30:45.82 ID:WJY+K2bP.net]
>>958
面白いな
しかしゲームウォッチって、液晶上の配線の都合もあって配置がぐちゃぐちゃになってそうだから、ビットのON/OFFだけとは言え面倒そうだな

975 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 12:52:26.12 ID:rgCMOp4r.net]
コンピュータというほど抽象化もされてないんだろうね。
コントローラではあるけども。

976 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 12:53:38.17 ID:iTkubaya.net]
配線の都合で配置がぐちゃぐちゃ?

977 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 13:31:29.74 ID:OUVvcRON.net]
ゲームウオッチは知らんけど配線パターンの都合でビット配置が変則的になるとかはあるよ

978 名前:デフォルトの名無しさん mailto:sage [2018/09/15(土) 18:43:35.47 ID:8KftQgLD.net]
蒸し返すようだが近代的な処理系でも,ビルドの各作業は分担して実行してると思っていいのね。

プリプロセッサで展開→中間言語に翻訳→アセンブリ言語に翻訳→機械語にアセンブラ→リンク

979 名前:デフォルトの名無しさん [2018/09/15(土) 18:59:03.04 ID:kl+My5NF.net]
>>957
ありがとう すごい参考になった

980 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 06:08:26.07 ID:QKaZz7Xi.net]
>>963 そう考えて良いと思うよ。
ただし、各段階で実行されるツールが独立した実行ファイルか、とか
それぞれの段階で作られる中間状態をファイルとして取り出せるか、
という話なら「場合による」ってことになる。



981 名前:デフォルトの名無しさん mailto:sage [2018/09/16(日) 23:54:07.55 ID:ynEgKPZ+.net]
>>965
ありがとうございます。

982 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 00:45:31.62 ID:jghdaJ/O.net]
save-tempsは割と使います

983 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 06:09:25.28 ID:5TL9cO8s.net]
gcc -save-temps -o prog prog.c
と指定すると prog.i, prog.s, prog.o が残るのね。
それでもプリプロセス済みCとアセンブリとの中間段階は見られないか。

ちなみに -save-temps と -pipe を同時に指定すると、
gcc: 警告: -save-temps が指定されたため、-pipe は無視されました
……ですってよ、奥様。

984 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 07:57:34.69 ID:SBpxj18K.net]
>>968
> それでもプリプロセス済みCとアセンブリとの中間段階は見られないか。
prog.iとprog.sが一体なんだと思ってるんだろう…

985 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 08:09:11.53 ID:hbuTlOjm.net]
プリプロセスとかアセンブリとかがあるとなんか困るの?
なんでそんなに必死なのか分からん。
処理が過度に複雑にならないためとか、様々な言語やCPUといった対象に幅広く対応するためとか、いろんな理由で工程を分ける方が合理的でしょうに。

986 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 08:13:06.60 ID:BwzrWhGR.net]
鉄鉱石とボーキサイトと石油入れたら自動車が出てくる装置があると思ってるんでしょ

987 名前:968 mailto:sage [2018/09/17(月) 08:27:18.66 ID:5TL9cO8s.net]
.i がプリプロセス済みのC
.s がアセンブリ
ということは分かってるのよ、それらの間にある状態を
ファイルとして見ることができないという話。

GCC用語ではGENERICの段階てことになるかな。
GENERICとアセンブリの間にもまだあるみたいだけど。

988 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 08:28:59.23 ID:SBpxj18K.net]
>>970
単なる技術的興味だろ
このスレでうだうだやるなよって言うのならわかるけど必死とか意味わからん

989 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 08:36:20.28 ID:SBpxj18K.net]
>>972
> それらの間にある状態を
> ファイルとして見ることができないという話。
gccならこの辺りを見ればいいんじゃね
https://code-examples.net/ja/docs/gcc~7/developer-options

990 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 09:14:28.38 ID:z+cSzUXJ.net]
TASMとTCCとTLINKにお世話になった20年前。



991 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 09:19:33.19 ID:5TL9cO8s.net]
>>974 ありがとう。
でもオプションの数を見ただけでウンザリしてもうた。
コンパイラ開発者向けのレベルになると最適化処理のステップごとなのね。

992 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 10:17:59.30 ID:qtGPC3c9.net]
-Eだろjk

993 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 11:58:09.09 ID:5NB0QfSZ.net]
たとえばpccなんかはものすごく外部コマンドにたよってるよね。
man pccとするとその解説が載ってる。

994 名前:デフォルトの名無しさん mailto:sage [2018/09/17(月) 12:00:30.90 ID:5NB0QfSZ.net]
質問者はここを参照するといいかも
pcc.ludd.ltu.se/how-it-works/
ただ,PCCはGCCやらClangと違って小ささ,見通しのよさを重視してるから,
GCCとかClangとかはそんなことやってないかもしれん。
(ていうかGCCやClangにおける↑上のリンクみたいなドキュメントはないのかな)

995 名前:デフォルトの名無しさん mailto:sage [2018/09/18(火) 20:12:09.59 ID:2waW+Aqm.net]
分かってて使こてたんちゃうん

996 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 05:40:46.68 ID:6Ke1Nn09.net]
C言語(じゃなくてもいいけど)をやってると
標準出力に出力するというのがいかに便利かを痛感するねぇ

下手にファイルやなんかに出力先を指定しようものなら一気に
パーミッションや属性値の問題が噴出するのに対して
標準出力ではそういう一切を気にせずに垂れ流せる

997 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 07:56:02.42 ID:bRibFDbQ.net]
C++の学習(入門レベル〜初心者レベル)をするのにC言語の知識って必須なんですか?
読んでるC++入門書が途中から分かりづらかったので独習C++って入門書を買おうとしたんですけど
とあるレビューにC言語を習得してるのが望ましいとか書いてあって気になったんですが…
プログラミング言語自体経験皆無なのですが、どうすればいいでしょうか?

998 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 08:04:03.02 ID:37LGoDD1.net]
>>982
C++はCの大半の部分を包含したような言語仕様になっているから、必然的にCの知識も必要になってくる。本を書く方も、Cと重複するような内容まですべて書いてると膨大になってくるから、Cを知っている前提になっている本は多い。
C++の流儀でコーディングするなら使われないCなりの書き方とかもあるけど、基本的にはCは避けて通れないはず。
頑張ってCも身に付けるか、もっと初心者が取っつきやすい言語から始めた方がいいかも。

999 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 08:29:50.54 ID:t41Iifgl.net]
じゃあCの知識を前提にしてないC++の本探せば
やさしいC++とかでいいんじゃね

1000 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 08:47:40.49 ID:OxeqQ4V7.net]
全部やればいいと思うよ。pythonもlispも
C++の必要性を実感するのってプログラムが大規模になってからなので、最初はちょっとポイント絞るのが大変かもね



1001 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 10:31:35.10 ID:bRibFDbQ.net]
>>983
回答ありがとうございます
ロベールって本読んでたんですが(クラスの章で読むの中断)今の所特にC言語などの前提知識は
要求されてなかったんですが、これから必要になっていく感じですかね・・
具体的にはどれくらいC言語のスキルを付けてからC++に逝くのが望ましいですか?苦しんで覚えるC言語って本はざっと読んだんですがこれじゃ弱いですよね・・
.....それともCに拘らずに何かpythonとかrubyみたいな人気そうで簡単そうな言語で何か作れるくらいまで覚えてからC言語に戻ってきたほうが
一見遠回りのように見えて近道なんでしょうか?質問ばかりですいません;

1002 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 10:41:53.75 ID:h/A1qpKl.net]
ロベール読めないってマ?

1003 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 17:03:44.61 ID:t41Iifgl.net]
>プログラミング言語自体経験皆無なのですが
>クラスの章で読むの中断
>ざっと読んだんですがこれじゃ弱いですよね・・

C++にこだわる理由を知りたくなったw
そして読んでるだけ?手動かしてる?

1004 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 17:18:24.07 ID:5wa+YDhW.net]
俺が禿1stを読み始めた当時も大した理由はなかったな
なんだか凄そう、その程度のことだった

1005 名前:さまよえる蟻人間 mailto:sage [2018/09/19(水) 17:29:55.07 ID:hbV0PURz.net]
次スレ頼む。

1006 名前:デフォルトの名無しさん [2018/09/19(水) 17:57:48.07 ID:XSTNMnDw.net]
次スレ

C言語なら俺に聞け 148
mevius.5ch.net/test/read.cgi/tech/1537347410/

1007 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 20:24:47.33 ID:nVz8f0fv.net]
今から覚えるならcはやってもc++はやらんでも良いと思うわ

1008 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 20:27:17.70 ID:9wwh2JnW.net]
C++は拡張が酷すぎると思う

1009 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 22:45:11.03 ID:+Hv0QgVJ.net]
Cの拡張の無さの方がひどい

1010 名前:デフォルトの名無しさん [2018/09/19(水) 22:48:46.48 ID:xLP4ypV2.net]
むしろ昔はC++のコードからCのコードを出力してたからな
Cは拡張性は抜群

ウンコスクリプトもCで書かれてる
C以外の言語が淘汰されることがあっても
Cが淘汰されることはない



1011 名前:デフォルトの名無しさん mailto:sage [2018/09/19(水) 23:00:14.31 ID:XIk0tg++.net]
C++で作っていいのは継続的な開発がない場合だけだな
継続的に開発やメンテナンスをするならC++は使っちゃいかん

1012 名前:デフォルトの名無しさん mailto:sage [2018/09/20(木) 02:32:23.68 ID:v2140bTt.net]
>>988
動かしてます。書きながらやってます
理由はあれですが最終的にC#とC++使いこなせるようになりたいです
他の簡単な言語やるとしたらどれくらいのまでスキルあげればいいんですかね・・

1013 名前:デフォルトの名無しさん mailto:sage [2018/09/20(木) 02:59:01.53 ID:OZxd0eW0.net]
たのしいRuby 第5版、2016
Effective Ruby、2015

さらに、JavaScript, jQuery をやっても、
C++ の1冊よりも、はるかに簡単だろ

C++ を読んでも、何も作れないし、長時間のムダ!

1014 名前:デフォルトの名無しさん mailto:sage [2018/09/20(木) 03:28:24.58 ID:90KUJ2ts.net]
>>997
C#とC++やりたいなら、まずはC#から入った方が良さそう。
rubyは全く方向性が違うし今(そしてこれからも)やる必要はない。

1015 名前:デフォルトの名無しさん mailto:sage [2018/09/20(木) 03:52:33.79 ID:v2140bTt.net]

1016 名前: rel="noopener noreferrer" target="_blank" class="reply_link">>>998-999
ありがとうございます
C#からやったほうがいい理由も教えていただきたいところですが1000レス目ですね…
RubyもやってみたいんですがViisualSの導入出来てるのでそれで動くC#からやってみます
C言語から脱線してしまいすいませんでした
[]
[ここ壊れてます]

1017 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 34日 4時間 16分 31秒

1018 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<317KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef