◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

C言語なら俺に聞け 147 ->画像>6枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1534430162/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

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

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

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

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

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


C言語なら俺に聞け 146
http://2chb.net/r/tech/1525031257/

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

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

4デフォルトの名無しさん2018/08/17(金) 07:32:18.55ID:TtX4VAeH
前スレ992
http://2chb.net/r/tech/1525031257/992

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

55デフォルトの名無しさん2018/08/21(火) 08:20:07.94ID:FuTngql1
>>52
意味は違うね

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

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

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

57デフォルトの名無しさん2018/08/21(火) 08:48:21.68ID:Y1HyydAv
gcc8でもclang6でも警告でなかったょ…

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

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

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

60デフォルトの名無しさん2018/08/21(火) 09:30:24.31ID:Y6yN+LUK
>>59
屁理屈乙

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

62デフォルトの名無しさん2018/08/21(火) 09:35:21.28ID:hk/Hf9fq
>>61
間違えた

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

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

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

65デフォルトの名無しさん2018/08/21(火) 10:59:30.05ID:gERn4ySS
>>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]; は意味が違う
結局、[]で書くべきなんて主張は
通用しないところが多すぎる戯れ言だ

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

67デフォルトの名無しさん2018/08/21(火) 11:01:29.60ID:+F/9g7TB
>>66
糖衣構文

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

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

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

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

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

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

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

75デフォルトの名無しさん2018/08/21(火) 12:47:09.71ID:EQ4qcC3V
>>72
なぜ?

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

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

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

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

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

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

82デフォルトの名無しさん2018/08/21(火) 13:09:58.77ID:EQ4qcC3V
>>71
無駄なコスト

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

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

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

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

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

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

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

89デフォルトの名無しさん2018/08/21(火) 20:17:35.28ID:bAEvazF4
無限ループ

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

91882018/08/21(火) 20:22:27.49ID:FwleoeVd
>>89
(*´Д`)ありがとうございました。

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

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

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

95デフォルトの名無しさん2018/08/21(火) 20:50:55.87ID:mIqstMqN
goto 笑

96デフォルトの名無しさん2018/08/21(火) 21:07:06.74ID:FuTngql1
do {
} while (true);

だな

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

98デフォルトの名無しさん2018/08/21(火) 21:15:49.80ID:Bspmt0aQ
_Bool

99デフォルトの名無しさん2018/08/21(火) 21:18:05.52ID:mIqstMqN
while (1==1)
なんて

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

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

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

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

104デフォルトの名無しさん2018/08/21(火) 22:56:19.30ID:7hn0MDmO
>>102
確かに…

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

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

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

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

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

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

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

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

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

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

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

while (check_func()) {
}

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

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

114デフォルトの名無しさん2018/08/22(水) 09:35:21.99ID:ULC6Ul0L
>>107
do {
LOCK();
UNLOCK();
} while (条件);

1151142018/08/22(水) 09:36:42.99ID:ULC6Ul0L
ごめん、ちがた

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

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

素直にこうしなさい

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

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

119デフォルトの名無しさん2018/08/22(水) 11:58:31.90ID:DbwOmzYq
>>116
これは酷いw

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

131デフォルトの名無しさん2018/08/22(水) 14:26:31.81ID:TfhbroeT
while ( ^∀^)

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

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

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

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

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

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

138デフォルトの名無しさん2018/08/22(水) 16:54:07.40ID:yJL450CM
>>134
#define ever (;;)
とかやんの?

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

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

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

これは空想論だけどね。

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

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

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

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

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

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

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

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

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

146デフォルトの名無しさん2018/08/22(水) 20:52:31.01ID:ROURn6Ut
for ( ;∀;)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

161デフォルトの名無しさん2018/08/22(水) 22:13:51.56ID:RPMrdt6N
まあ概ね 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のどちらかが禁止とかもある。(どっちかは忘れた)
理由はバグって無限ループにしてしまったときにコード上から判定しづらいとかだったはず。

1621072018/08/22(水) 22:19:27.48ID:Vm7yolE7
非常にくだらない質問にレス付けてくれてサンクス
なんか荒れる原因つくってスマンかった

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

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


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

<while>
</while>

ならありだが、

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

は駄目で、

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

にしなければならない。

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

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

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

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

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

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

168デフォルトの名無しさん2018/08/23(木) 00:53:05.68ID:/qY100we
>>167
なんで?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

180デフォルトの名無しさん2018/08/23(木) 08:31:20.08ID:wxGNRrqx
宗教の例

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最悪ですねえ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

恥の上塗りwww

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

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

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

210デフォルトの名無しさん2018/08/23(木) 20:01:59.92ID:k97Awv43
LOCK/UNLOCKごとき
だよねえ

211デフォルトの名無しさん2018/08/23(木) 20:17:25.18ID:e3M4pNLl
ハードセマフォってなに…?

212デフォルトの名無しさん2018/08/23(木) 20:24:14.60ID:k97Awv43
ハードウェアセマフォ

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

214デフォルトの名無しさん2018/08/23(木) 20:27:03.48ID:k97Awv43
話題があれば

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

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

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

218デフォルトの名無しさん2018/08/23(木) 20:50:49.19ID:Uo7RxZ0m
400も800も違わんだろう

219デフォルトの名無しさん2018/08/23(木) 21:08:53.97ID:wxGNRrqx
違うだろ

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

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

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

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

223デフォルトの名無しさん2018/08/23(木) 22:13:17.45ID:y9Wx8uZn
>>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)
と言われている。これも当たっている)

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

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

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

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

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

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

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

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

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

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

227デフォルトの名無しさん2018/08/23(木) 22:20:37.13ID:wxGNRrqx
do {
} while (0);

こんなのもごくたまに

228さまよえる蟻人間 ◆T6xkBnTXz7B0 2018/08/23(木) 22:22:18.83ID:Z2Fii0dD
do-whileはマクロで文をまとめるのによく使うよ。

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

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

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

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

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


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

231デフォルトの名無しさん2018/08/23(木) 22:27:16.39ID:wxGNRrqx
こいつNG

232デフォルトの名無しさん2018/08/23(木) 22:28:37.43ID:y9Wx8uZn
>>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では前者は標準、後者はマクロで対応出来るが)

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

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

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

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

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

238デフォルトの名無しさん2018/08/23(木) 22:50:52.78ID:/xlV6A++
誤爆した

239デフォルトの名無しさん2018/08/23(木) 22:50:52.87ID:wxGNRrqx
「軽い場合がある」

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

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

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

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

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

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

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

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

fizzbuzz はこんなコードを書いたことがあります
http://2chb.net/r/tech/1434079972/25
https://ideone.com/i8wMea

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


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


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

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

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


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

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

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

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

250デフォルトの名無しさん2018/08/23(木) 23:49:35.97ID:HinwMmX/
宿題で出されているの?

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

252デフォルトの名無しさん2018/08/23(木) 23:55:52.97ID:0/a4zf/K

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

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

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

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

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

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

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

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

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

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

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

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

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

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

262デフォルトの名無しさん2018/08/24(金) 00:53:41.22ID:ljcg8c0k
wktk

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

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

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

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

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

268デフォルトの名無しさん2018/08/24(金) 05:54:34.00ID:Nyovr5Qp
>>255
あんたの言ってるアトミック操作が>>107のLOCK/UNLOCKに相当する
わざとなのか理解してないのかは知らんけどレイヤーの違うものを混ぜて語られてもそりゃ噛み合わんよw

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

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

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

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

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

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

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

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

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

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

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

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

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

276デフォルトの名無しさん2018/08/24(金) 08:12:56.91ID:LUWnMn3S
無限ループって怖くね?

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

278デフォルトの名無しさん2018/08/24(金) 08:16:04.10ID:ZkSPfVdV
goto label2

label1:
処理

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

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

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

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

使いどころはこんな感じ

280デフォルトの名無しさん2018/08/24(金) 08:18:56.33ID:ZkSPfVdV
アンカーミス
>>275
でした

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

double data[4][4];

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

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

283デフォルトの名無しさん2018/08/24(金) 09:30:50.97ID:L5DguHRe
マウント取りたくて必死w

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

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

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

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

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

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

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

289デフォルトの名無しさん2018/08/24(金) 11:38:27.58ID:C22mUEBr
環境に依る 以上

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

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

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

話題は無限ループだけど

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

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

294デフォルトの名無しさん2018/08/24(金) 12:30:27.52ID:7MrYBE0R
----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());
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

309デフォルトの名無しさん2018/08/24(金) 17:04:10.98ID:YufcJqyf
BCPLが元だからB

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

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

312デフォルトの名無しさん2018/08/24(金) 17:15:27.99ID:sQPXKPEp
>>310
CPLの簡単版

313デフォルトの名無しさん2018/08/24(金) 17:15:41.51ID:C/3CctmU
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)

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

315デフォルトの名無しさん2018/08/24(金) 17:41:34.02ID:C/3CctmU
つ EBCDIC

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

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

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

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

320デフォルトの名無しさん2018/08/24(金) 18:40:16.19ID:1mvArulW
>>319
どこが?

321デフォルトの名無しさん2018/08/24(金) 19:11:10.10ID:s18ZTF9u
>>317
なんだよその不自然な英語混じり文は
なんか変わり者っぽいな

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

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

323デフォルトの名無しさん2018/08/24(金) 19:23:07.44ID:YufcJqyf
先頭のほうがええやろ

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

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

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

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

328デフォルトの名無しさん2018/08/24(金) 19:52:23.26ID:s18ZTF9u
>>324
マジかよ

329デフォルトの名無しさん2018/08/24(金) 19:59:34.12ID:ZkSPfVdV
>>320
>>278

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

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

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

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

333デフォルトの名無しさん2018/08/24(金) 20:11:35.07ID:s18ZTF9u
>>332
はい

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

335デフォルトの名無しさん2018/08/24(金) 20:13:19.64ID:ZkSPfVdV
弱すぎて話にならん

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

337デフォルトの名無しさん2018/08/24(金) 20:18:15.07ID:s18ZTF9u
>>336
なるほど

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

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

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

341デフォルトの名無しさん2018/08/24(金) 20:30:03.18ID:QHdFlAyZ
>>331
ネスト不快

342デフォルトの名無しさん2018/08/24(金) 20:33:17.73ID:s18ZTF9u
>>341
なるほど

343デフォルトの名無しさん2018/08/24(金) 21:19:21.07ID:ZkSPfVdV
関数分け
いまいち

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

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

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

key
ifの羅列よりもswitch case

ways
static constをつけよう

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

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

srand
なんで何回もよぶ?

344デフォルトの名無しさん2018/08/24(金) 21:21:50.11ID:s18ZTF9u
>>343
ありがとうございます

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

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

directions
意味的にBOOLだよね?

346デフォルトの名無しさん2018/08/24(金) 21:30:34.34ID:s18ZTF9u
>>345
なるほど

何故でしょうか

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

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

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

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

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

350デフォルトの名無しさん2018/08/24(金) 21:35:17.53ID:s18ZTF9u
>>349
二番目です。

351デフォルトの名無しさん2018/08/24(金) 21:36:50.13ID:s18ZTF9u
理解しました。

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

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

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

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

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

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

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

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


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

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

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

355デフォルトの名無しさん2018/08/24(金) 21:58:37.52ID:O3WQJa8X
あと、ゆとり馬鹿は 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が使ってあっても、「ああ、はいはい」だから問題なし。お約束的展開ならいいんだよ。
そんなことより、見慣れない意図不明のコードで???となって詰まる方が問題。

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

356デフォルトの名無しさん2018/08/24(金) 22:03:48.96ID:LUWnMn3S
今北産業

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

358デフォルトの名無しさん2018/08/24(金) 22:36:21.12ID:ZkSPfVdV
実はいま初めてプレイした

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

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

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

これだけで結構強くなる

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

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

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

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

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

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

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

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

365デフォルトの名無しさん2018/08/24(金) 23:06:04.22ID:ZkSPfVdV
>>363
なんで8進数?

366デフォルトの名無しさん2018/08/24(金) 23:07:25.00ID:QHdFlAyZ
>>364
10にする

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

368デフォルトの名無しさん2018/08/24(金) 23:13:00.47ID:ZkSPfVdV
こら

369デフォルトの名無しさん2018/08/24(金) 23:21:50.02ID:QHdFlAyZ
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:

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

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

あと16進数の小数

371デフォルトの名無しさん2018/08/24(金) 23:26:13.62ID:ZkSPfVdV
>>369
顔に見えない

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

383デフォルトの名無しさん2018/08/25(土) 08:56:32.19ID:khOLQHnm
>>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.
まさにこの通り。
その中でお前がどれを選択するかは自由だし、それは俺含めた他人の選択とは無関係だ。
○○を選択した俺ツエーとイキれる話でもない。

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

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

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

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

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

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

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

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

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

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

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

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

394デフォルトの名無しさん2018/08/25(土) 10:31:25.04ID:mKHlp3ya
>>392
負け宣言www

395デフォルトの名無しさん2018/08/25(土) 10:33:04.07ID:/11s7nnG
>>392
自己紹介乙

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

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

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

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

398デフォルトの名無しさん2018/08/25(土) 11:08:31.00ID:mKHlp3ya
C++でCの速度が出ない????

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

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

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

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

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

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

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

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

それ以外ない

すべて知恵遅れが原因

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

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

障害の原因

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

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

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

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

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

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

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

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

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

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

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

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

416デフォルトの名無しさん2018/08/25(土) 13:07:57.58ID:YF0z4wS0
continueかbreak

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

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

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

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


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

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

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

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

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

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

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

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

こんなのでもいいかも

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

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

コレがザ知恵遅れ

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

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

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

427デフォルトの名無しさん2018/08/25(土) 13:57:35.88ID:yggGxXGy
>>422の1行目しか読まずに脊髄反射?

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

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

430デフォルトの名無しさん2018/08/25(土) 14:00:01.87ID:yggGxXGy
日本語も読めない
も追加だな

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

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

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

まあ致命的

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

相変わらず

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

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

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

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

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

どこ情報よ

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

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

残念なことに

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

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

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

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

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

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

444デフォルトの名無しさん2018/08/25(土) 14:32:32.93ID:yggGxXGy
>>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しかないからな

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

445デフォルトの名無しさん2018/08/25(土) 14:33:32.61ID:yggGxXGy
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に用意されてる関数を使うのが一番

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

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

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

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

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

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

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

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

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

452デフォルトの名無しさん2018/08/25(土) 14:45:50.69ID:yggGxXGy
で?

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

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

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

456デフォルトの名無しさん2018/08/25(土) 14:51:46.41ID:yggGxXGy
半角君が劣化コピーして

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

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

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

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

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

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

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

461デフォルトの名無しさん2018/08/25(土) 14:56:30.95ID:yggGxXGy
>>458
n += n;

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

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

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

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

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

465デフォルトの名無しさん2018/08/25(土) 14:58:36.91ID:0r5h6/lL
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とか以前の問題だからな

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

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

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

469デフォルトの名無しさん2018/08/25(土) 15:00:55.69ID:yggGxXGy

470デフォルトの名無しさん2018/08/25(土) 15:01:52.08ID:0r5h6/lL
当然
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;
}

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

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

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

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

473デフォルトの名無しさん2018/08/25(土) 15:04:01.61ID:yggGxXGy
>>470は正しく動きますよ

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

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

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)

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

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

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

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

釣りだった

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

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

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

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

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

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

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

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

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

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

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

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

わかりやすいわ
ホント

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

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

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

>>432も頭おかしいだろ

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

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

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

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

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

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

495デフォルトの名無しさん2018/08/25(土) 19:23:40.50ID:06VRwQlu
>>494
失笑なら

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

ただコレには違いがある

オレは正面から戦う

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

この違い

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

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

499デフォルトの名無しさん2018/08/26(日) 03:24:56.95ID:BwlGzYMc
23/35=65.7%
うぷぷぷ

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

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

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


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

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

503デフォルトの名無しさん2018/08/26(日) 12:44:59.10ID:d3emHXQQ
>>501
純粋かよ

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

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

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

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

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

わかった?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

517デフォルトの名無しさん2018/08/27(月) 12:18:18.46ID:yF4/ft+h
>>515
これだな

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

538デフォルトの名無しさん2018/08/27(月) 16:09:02.07ID:vY3QDx2y
ディスパッチャとしてはダメダメじゃん
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が出ない
おまいらんとこではどんな結果になる?

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

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

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

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

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

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

この宣言が読めない

544デフォルトの名無しさん2018/08/27(月) 17:30:35.88ID:vY3QDx2y
signal 関数名
signum 第1仮引数名
sighandler 第2仮引数名

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

signalの返却値はsighandlerと同じ型

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


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

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

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

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

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

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

このどれか?

551デフォルトの名無しさん2018/08/27(月) 20:08:36.09ID:FN2jn8ES
>>550
こんな感じ。

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

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

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

例外処理
→密結合を避けるためオーソドックスに返り値で判定、最後にgoto使うかも?

そういや例外処理longjmpで思い出したけど、一昔以上前のCマガジンにマクロでC++と同じようなtry〜catch構文実装方法の記事があったけど、確かにそのマクロ内ではsetjmp/longjmp使ってたわ。
マクロでカプセル化してれば例外処理で使うかも。

552デフォルトの名無しさん2018/08/27(月) 20:17:29.99ID:C1HpzEi0
カーネルなしでpthreadの意味がわからん

553デフォルトの名無しさん2018/08/27(月) 20:21:53.00ID:FN2jn8ES
>>552
あ、まちがえた。
pthreadじゃなくてprotothreadsね。

554デフォルトの名無しさん2018/08/28(火) 15:16:05.31ID:wM2MhSxp
http://techtipshoge.blogspot.com/2011/02/blog-post.html
このサイトで、書いてることは正しいと思うしし、実際こうなるんだけど、俺の頭悪いせいでわからない。

駄目な例のsetStr(a)の a は、 &a[0] という”アドレス”を渡してる訳ではないんでしょうか?
なんで駄目な例だと上手くいかないのかという理屈がわからない・・・

555デフォルトの名無しさん2018/08/28(火) 15:16:57.00ID:wM2MhSxp
あ、レスして気づいたけどcoutがあるってことはc++なのかな?
まあこれはprintfってことにしといてくださいw 重複質問になりそうなのでこちらで処理したい。

556さまよえる蟻人間 ◆T6xkBnTXz7B0 2018/08/28(火) 15:27:14.25ID:cEEOiaf2
newもC++のキーワードなんだけど。。

関数に実引数のポインタを渡すとその値が、対応する仮引数に代入(コピー)され、以後、仮引数は変数のように使える。
仮引数の値を変えてもコピーが書き換えられるだけで元の実引数の値には影響しない。
書き換えられるようにするには、書き換えたい場所のアドレスを渡して、*演算子か、[]演算子を使わないといけない。

557デフォルトの名無しさん2018/08/28(火) 15:27:46.08ID:10z9ufr/
駄目な例のa = new char [8];はmainのaの複製への代入なのでmainのaはNULLのまま
良い例の*a = new char [8];はmainのaそのものへの代入なので期待した結果が得られる

558さまよえる蟻人間 ◆T6xkBnTXz7B0 2018/08/28(火) 15:37:02.95ID:cEEOiaf2
関数呼び出しのとき、実引数がどこにコピーされるかというと、「スタック」という積み上げ式のメモリーブロックか、一時的なCPUレジスタが使われる。
インラインではない関数呼び出しにおいては、関数の戻り先のアドレスと、仮引数のデータがスタックに積み上げられる。
積み上げ式だから、自分自身の関数を呼び出しても動作する。これを「再帰呼び出し」という。

559さまよえる蟻人間 ◆T6xkBnTXz7B0 2018/08/28(火) 15:39:32.69ID:cEEOiaf2
スタックの積み上げには限度がある。限度を超えると、スタックサイズが拡張されたり、異常終了する。
スタックの積み上げが限度を超えて異常な状態になることを「スタックオーバーフロー」という。

560デフォルトの名無しさん2018/08/28(火) 15:52:37.71ID:wM2MhSxp
すません。私の質問が曖昧だったので追加で

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)としてアドレスを渡し、受け取りはポインタ変数なのに値は変わらない。
単に数値か文字列かの違いなんでしょうか?

561デフォルトの名無しさん2018/08/28(火) 16:00:50.42ID:Gzofmim2
とりあえず一度、配列とポインタに対する余計な先入観を捨てて素直に元サイトを読み込めば理解できると思うよ
一つの考え方に囚われ過ぎてると思う

562デフォルトの名無しさん2018/08/28(火) 16:05:47.55ID:10z9ufr/
void setStr(char **a) これを
void setStr(int *a) こう読み替え

char *a = NULL; setStr(&a); これを
int a = 0; setStr(&a); こう読み替えてみそ

つまり char* → int と読み替えるんだ
ポインタ変数とアドレスは違うという話は
整数変数と整数は違うという話と同じだ

563デフォルトの名無しさん2018/08/28(火) 16:17:43.85ID:LgBUyhOe
まあスタック使えとは規格に書いてないんだけどね

564デフォルトの名無しさん2018/08/28(火) 16:35:30.28ID:wM2MhSxp
ああ分かった!
俺は自分で勝手に「char型のポインタ=文字列だ」と思い込んでて、そのせいで混乱してただけでした。
思い込み怖い・・・

void setStr(char *a) {
a[0]='a';
}

int main() {
char a[] = "test";

setStr(a);
cout << a << endl;
return 0;
}

これで「aest」と表示されたからピンときた。確かに失敗例はポインタ変数を渡しているだけだw
ありがとうございました。

565デフォルトの名無しさん2018/08/28(火) 18:19:39.20ID:4ROMapnq
>>563
そりゃそうだよ、世の中にはスタックを持たないマシンもあるからな

566デフォルトの名無しさん2018/08/28(火) 18:33:43.92ID:oY+WdDFv
ハードウェアスタックを持たなくて再帰呼び出し出来ないうんこ環境があるね

567デフォルトの名無しさん2018/08/28(火) 18:38:07.52ID:h1lwFjom
そういうのは自分で値を積み上げるように作るしかないな

568デフォルトの名無しさん2018/08/28(火) 18:45:10.17ID:Gzofmim2
そういえばずいぶん昔に昔ながらのBASIC言語でクイックソートを実装したときに当然サブルーチンの再起呼び出しなど使えないので
自分で似たようなことをやったなあ
というか確か何かのプログラム認定試験の定番の出題テーマだった気がする
当時必死に勉強してたことを思い出した

569デフォルトの名無しさん2018/08/28(火) 18:45:55.20ID:Gzofmim2
再起ってなんだ再帰の誤変換

570デフォルトの名無しさん2018/08/28(火) 18:47:51.41ID:h1lwFjom
再帰 不能

571デフォルトの名無しさん2018/08/28(火) 19:51:12.99ID:zI7irPVs
ぴゅう太なんてレジスタがなかった

572デフォルトの名無しさん2018/08/28(火) 19:56:09.59ID:c8HqOUoV
>>571
そんなアホな…

うわ、ホントだ。汎用レジスタは全て外部RAMにマッピングされてたのね。

573デフォルトの名無しさん2018/08/28(火) 20:04:33.36ID:10z9ufr/
制御記憶を主記憶とシェアするアーキテクチャはそんなに珍しくない

574デフォルトの名無しさん2018/08/28(火) 20:09:30.18ID:c8HqOUoV
普通にR0とかのレジスタ名ついてるんだけど実体は内蔵RAMにマッピングされてるアーキテクチャならよく見るけど、外部RAMってのは初めて見たわ。
今もこういうアーキテクチャのCPUあるのかな?

575デフォルトの名無しさん2018/08/28(火) 20:15:00.09ID:Gymzh0gE
ない

576デフォルトの名無しさん2018/08/28(火) 20:25:08.96ID:10z9ufr/
ぴゅうたって内蔵RAMなんだっけ

577デフォルトの名無しさん2018/08/28(火) 20:28:21.23ID:c8HqOUoV
>>576
wikipediaによると
ROM 内蔵20Kバイト RAM CPU内蔵256バイト/TMS9918用16Kバイト
だそうだ。

578デフォルトの名無しさん2018/08/28(火) 20:53:39.14ID:UQgP5OTn
>>573
制御記憶ってマイクロコードを入れるところなんだが…
主記憶と共用してる奴なんてあったか?

579デフォルトの名無しさん2018/08/28(火) 20:58:39.83ID:10z9ufr/
>>578
必ずしもマイクロ【コード】を入れるところじゃないんだけどね
たとえばメインフレームではDIAGNOSE命令で制御記憶を目的外使用なんてのをやってたよ
それやってるときはTestインジケーターが点灯することになってて

580デフォルトの名無しさん2018/08/28(火) 21:38:04.13ID:UQgP5OTn
>>579
> たとえばメインフレームではDIAGNOSE命令で制御記憶を目的外使用なんてのをやってたよ
そんな特殊な例出されてもなぁ w
そりゃ記憶装置だから他の物を入れることはできるよ
だから何? って話だけどな

> それやってるときはTestインジケーターが点灯することになってて
で、主記憶と共用ってどこのアーキテクチャなんだ?

581デフォルトの名無しさん2018/08/28(火) 21:54:20.28ID:d5vKjLdu
>>580
やめたれ w

582デフォルトの名無しさん2018/08/28(火) 22:02:06.14ID:lp3F9A9k
それってセキュリティ上問題にならないのか?

583デフォルトの名無しさん2018/08/28(火) 22:15:00.65ID:d5vKjLdu
いまはやりのcore iのバグみたいな?

584デフォルトの名無しさん2018/08/29(水) 23:07:37.73ID:E6lvAa/y
メルトダウン事件移行もアップデートの度にどんどんコンパイルとか画像縮小なんかの処理が遅くなってる気がする
もう怖くて淫照は買えない

585デフォルトの名無しさん2018/08/30(木) 05:50:33.67ID:zs5ycFHj
ベンチマークしてる?

586デフォルトの名無しさん2018/08/30(木) 08:20:17.62ID:cD6Bz7+B
>>582
そりゃなるよ
命令の動作を書き換えるんだから何でもできちゃう
なのでDiag関連の命令はCE(カスタマーエンジニア)モードでしか使えないとかなってたはず
今時のCPUでもエラッタ対策としてマイクロコードの書換えするけどコード自体は暗号化されてる
この暗号化キーが漏れたらえらいことになると思う

587デフォルトの名無しさん2018/08/30(木) 10:16:53.98ID:zs5ycFHj
X'83は単に特権命令ってだけだぜ

588デフォルトの名無しさん2018/08/30(木) 12:25:33.09ID:cD6Bz7+B
マシンによって違うのか?
M-180HはCEモードでないと動作しなかったが

589デフォルトの名無しさん2018/08/30(木) 12:43:00.44ID:zs5ycFHj
そういうことだね
俺んとこではPWOFFするオウンコードとかできたし

590デフォルトの名無しさん2018/08/30(木) 20:09:52.14ID:cD6Bz7+B
それマイクロ関係ないだろ

591デフォルトの名無しさん2018/08/31(金) 06:31:31.30ID:QWemr4wG
すみません思い切り初心者の質問です。
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
という出力にするにはどうすればいいでしょうか……。

592デフォルトの名無しさん2018/08/31(金) 06:43:34.91ID:jQ6ZKbRR
>>591
#define PR_POS(_pos) printf("%s: " #_pos "\n", str)
でいけるはず
詳しくは
プリプロセッサ 文字列化演算子
とかでぐぐれ

593デフォルトの名無しさん2018/08/31(金) 06:44:40.48ID:Df6BGOL7
#define PR_POS(_pos) printf("%s: " #_pos, str)

594デフォルトの名無しさん2018/08/31(金) 06:45:58.45ID:Df6BGOL7
かぶった
しかもまちがった

>>593は無視して

5955912018/08/31(金) 07:04:03.05ID:QWemr4wG
>>592
うわあああ! ありがとうございます。
正直 検索しても検索しても一向にそれらしき答えが見付からなかったんで
もう方法がないのかなとか思ってました……。
文字列化演算子なるものがあるのですね。用語まで教えていただいてほんとうに感謝しています。

しかもC99でも定められてるっぽい?
(gcc -std=c99 -Wall -Werror -pedanticで警告がなかった)
嬉しいです。これで随分すっきりしたソースコードになりそうです!

>>593さまもありがとうございます。

596デフォルトの名無しさん2018/08/31(金) 07:18:20.44ID:4o8e5lPA
#include <stdio.h>
#define DEBUG(fmt, ...) \
fprintf(stdout, "%s:%d #%s " fmt "\n", \
__FILE__, __LINE__, __func__, ##__VA_ARGS__);

初心者ならこのマクロを覚えておくと良いぞ。誰もが一度は使うはず。

597デフォルトの名無しさん2018/08/31(金) 07:26:18.95ID:jQ6ZKbRR
>>595
> しかもC99でも定められてるっぽい?
X 3010:2003 (ISO/IEC 9899:1999)
6.10.3.2 #演算子
制約
関数形式マクロの置換要素並びの中にある各#前処理字句の次の前処理字句は,仮引数でなければならない。
意味規則
置換要素並びの中で,仮引数の直前に#前処理字句がある場合,対応する実引数の前処理字句列のつづりを含んだ一つの単純文字列リテラル前処理字句によって,#前処理字句と仮引数を置き換える。(後略)
http://kikakurui.com/x3/X3010-2003-01.html

598デフォルトの名無しさん2018/08/31(金) 07:48:00.90ID:QWemr4wG
>>596
すいません。初心者なのにめちゃめちゃ上から目線みたいになってしまうんですが
assert()を使わないのはなぜですかね。
POSIX C99でも定義されているので ほとんどどのコンパイラでも処理できると思うんです。

599デフォルトの名無しさん2018/08/31(金) 08:16:53.54ID:4o8e5lPA
>>598
マクロの紹介だけだから。
デバッグ方法としてならassertを多用したほうが良いぞ。

600デフォルトの名無しさん2018/08/31(金) 08:23:18.46ID:LcHwdHfr
フィールドのエラーログ用に>>596みたいなコードをリリースバイナリにも埋めることがあるけど
その場合はassertじゃ役に立たないんだよな。

601デフォルトの名無しさん2018/08/31(金) 08:31:20.23ID:uM5wy4o0
斜め読みだけど、abcが変わってstrが変更されないならabcの方を文字列変数にしてprintfすれば良いんじゃね?

602デフォルトの名無しさん2018/08/31(金) 08:33:49.15ID:CKe+Ima+
>>596
可変長引数マクロはgccだけって記憶があったけどC99規格で使えるんだね。
「可変部の実引数が0個の場合に……」のgcc拡張とゴッチャになってた模様。

>>598
警告を表示しても動作を止めたくない場合には重宝するよ。
デバッグ中に「ここまでは処理が通過した」と確認する時とか。

603デフォルトの名無しさん2018/08/31(金) 08:40:41.19ID:QWemr4wG
>>602
なるほど。
assert()関数だと引数の結果が0の場合問答無用で停止してしまいますもんね。

604デフォルトの名無しさん2018/08/31(金) 09:08:12.10ID:9zTxkh/J
本番のコードと差が出て邪魔なのでassertはあまり使いませんね。
どうせデバッガ使うというのもあるし。

605デフォルトの名無しさん2018/08/31(金) 09:17:03.63ID:QWemr4wG
>>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);
}

606デフォルトの名無しさん2018/08/31(金) 10:04:04.85ID:Qsv+Vg4k
assertの使い道って「ここでは必ずhogeになる!」という意志をコードに残すという意味はあるかな。
言ってるとおりで動かすときはgdb使うし、開発中は単体テストで同等以上の確認するしで、実用性は今はあまり無いと思いますね。

607デフォルトの名無しさん2018/08/31(金) 11:00:23.86ID:mNRFahys
assertはどっちかつーと単体テストでよく使う

608デフォルトの名無しさん2018/08/31(金) 12:32:32.62ID:QMdn6GpG
本番コードでもassert使うかな
ハードエラーみたいなのはカバーしきれない

609デフォルトの名無しさん2018/08/31(金) 12:51:53.38ID:jQ6ZKbRR
>>606
> assertの使い道って「ここでは必ずhogeになる!」という意志をコードに残すという意味はあるかな。
assertion の意味は主張だからむしろそれが正しいとも言えるな

> 実用性は今はあまり無いと思いますね。
最初作るときはそうでも改修時に全然触ってない所のassert()に引っかかることもあるから俺は基本入れてる

610デフォルトの名無しさん2018/09/02(日) 07:11:07.60ID:667Fbrpy
int a = 42;
a = a++;
↑これがコンパイルエラーになる理由って
「左辺aに対する代入と右辺aに対するインクリメントのどちらの演算を優先して処理するか不定である為」
で合ってますか? 不定じゃなくて未定義かも……。

611デフォルトの名無しさん2018/09/02(日) 07:29:52.76ID:fa3EYjvI
エラーになるか? 警告ではなく

612デフォルトの名無しさん2018/09/02(日) 09:00:51.15ID:667Fbrpy
>>611
-Werrorとかにしてました

6136112018/09/02(日) 09:07:14.14ID:667Fbrpy
>>611
あれ。すいません。よく分からなくなりました。
$ gcc -pedantic -std=c99 -Wall -Werror -O2
でコンパイルするとエラーになり停止しますが
$ icc -std=c99 -Wall -Werror -O2
でコンパイルするとあっさり通りますね……。

614デフォルトの名無しさん2018/09/02(日) 09:27:27.59ID:pzXMyV5h
>>610
未定義っす (>>1 C FAQ の 3 章を参照してください)
蛇足ながらシーケンスポイントの間でオブジェクトを変更できるのは高々1回だけとか、そんな感じのルール
>>613
gcc の -Werror オプションは警告をエラー扱いにするっす

615デフォルトの名無しさん2018/09/02(日) 09:59:41.19ID:GR8jnF/5
未定義だからコンパイラは何をしてもいい

616デフォルトの名無しさん2018/09/02(日) 10:00:57.15ID:667Fbrpy
>>614
ありがとうございます。
ちなみにicc (Intel(R) C/C++ Compiler)で-Wallおよび-Werrorオプションを設定したときは
警告もなにも出力されることなくコンパイルに成功してしまったんですが
理由とか分かりますかね。すいません。変な質問で……。

617デフォルトの名無しさん2018/09/02(日) 10:19:45.38ID:667Fbrpy
>>614
あと,おっしゃる通り(すくなくともC99では)未定義でした。ありがとうございます。
> 直前の副作用完了点から次の副作用完了点までの間に,
> 式の評価によって一つのオブジェクトに格納された値を変更する回数は,高々1回でなければならない。
> さらに,変更後の値の読取りは,格納される値を決定するためだけに行われなければならない。
(JIS X 3010:2003 p.48; 参考 C言語なら俺に聞け 147 	->画像>6枚

618デフォルトの名無しさん2018/09/02(日) 11:28:11.60ID:owKXNyzr
>>610
そういう文法的になことには今は拘らない方がいい。(これは他言語学習者の方が酷いが)
上達の妨げにしかならない。

プログラミング言語は、「正しく書いたときに正しく動作する」ようにしか設計されていない。
特にCはそうだ。
意味不明なことを書いたらだいたい全て「未定義」であり、
意味不明なことを書く奴が悪い、ということになっている。
そしてそれが「未定義」と覚えることも、実質的な意味はない。
そんなコードはすぐに修正され、存在しないからだ。
実際、 a = a++; なんてコードは、どのOSSにもないはずだ。

この意味で、Cは全くの素人の入門者用ではない。
例えばC#はそこら辺厳しい言語で、そういった意味不明な書き方は全てコンパイルエラーにされるはず。
(さすがにその例では知らんが、例えば「未初期化の変数を使用」とかがエラーになる)

というか、マジでそのレベルならC#やった方がいい。
文法エラーなんてサジェストが出てOK押したら自動的に修正してくれる。
お前がどんな環境でやってるのかは知らんが。

ただ、こういった無駄な遠回りをしなくて済むだけでも、君にとってC#は有効だと思うよ。

つか、初心者は全ての文法を押さえないといけないと勘違いするようだが、それは間違いだ。
自分が使うだけの文法を押さえ、さっさと使うべきだ。
お前だって日本語の全ての漢字が読めるわけでもないのに日本語を使ってるだろ。
プログラミング言語も同様で、手段でしかないのだから、文法を一通り確認したら、
さっさとゲーム等何でもいいから作れ。
ネタがないのならそれはそもそも今プログラミングを学ぶ必要がないとも言えるし、
それでもやりたいのならラズパイでも買ってきてLEDチカチカでも目指せ。
文法を学ぶことが目的になってはいけない。それは完全に空回りだ。

619デフォルトの名無しさん2018/09/02(日) 11:39:01.45ID:mdI4MGys
やりたいことはシンプルに書けよってことだな。
最終的に a にどうなってほしいのか、それってもっと端的に書けないの?ってこと。
Cオタクになるのが目的じゃなければな。

620デフォルトの名無しさん2018/09/02(日) 12:11:10.31ID:owKXNyzr
(ちなみに補足)>>610
初心者には理解不能だと思うが、
「文法で許されていることが全て許される」環境なんて実質的に存在しない。
だから文法のコーナーケースについてはそもそも覚える必要がない。
(とはいえ、肝心のK&Rがフリーダムすぎて…ってのはあるが)

これは小説→ラノベの流れと同じで、
美辞麗句の技巧に走る必要はなく、簡単な文を書き連ねて面白い筋を書け、ということ。
プログラミングにおいてはこれが徹底していて、
同じ物なら、簡単な方が『常に』いい、ということになっている。

ただ、どこからが複雑なのか?というのは議論になる。
例えば自然言語で韓国が漢字を廃止した際、
「停留所」を「ばすが とまる ところ」と書き換え、老人が「舐めとんのか!」と切れた。
実際、全員が読める漢字を「もっと簡単に」という理由で平仮名に書き換えられても困るだろ。
丁度これと同じ(だが方向は逆)で、
新しいプログラミング言語は比較的すんなり書ける文法が用意されており、
それを使うべきかどうかでは揉めたりしている。
ただ、Cは古いのでまどろっこしい文法しかなく、ベタな書き方しか出来ない。
だから比較的この論争に巻き込まれることはないはず。
(それ以前に文法セット自体が小さくて、え?これだけ?のはずだが)

>>619
天然と養殖では学びのベクトルが逆なんだよな。

天然: 1を足したい → a++ と書くのか
養殖: a++と書くと → 1が足されるのか

結果、要因側をenumすると文法一覧になるのが養殖で、これが間違いの元だ。
そしてそれを馬鹿正直に一つずつ潰すから文法エリートになっていく。
そうではなく、要因側のenum結果はやりたいこと一覧になって、全部揃えばゲームが作れる!が正しい。

621デフォルトの名無しさん2018/09/02(日) 12:24:17.27ID:667Fbrpy
>>620
ちょっと反論があります。正直Cどころかプログラミング初学者なのですが……。

要するに私は養殖≠ナあり,そのような学び方では成長しないと仰りたいわけですよね。
まあ確かに自分でも「規格厨」というか,衒学的な性格をなのは自覚してます
しかしプログラミング言語というのは自然言語とは違う面が多々あると思います。
そして「文法を網羅すべきか」という点においては特に違うと思います。
プログラミング言語は少なくとも概念においては文法に正確に従えば定められた動作を確実に行ないます。
日本語の文法を遵守して話しても考えが伝わらないのとは全く異るところです。
だから私はプログラミング言語においては先に(かなり厳密に)文法を学ぶべきであり,
「文法を学ぶ」ことのなかには未定義動作に関する諸々の知識を習得することも含まれていると考えます。

偉そうにすいませんでした。まあ上手くいかなければまた考えを改めるつもりではいます。

622デフォルトの名無しさん2018/09/02(日) 12:32:31.40ID:mdI4MGys
やりたいことを素直に書いたつもりで未定義な文法になってしまうなら、もっと論理を考えた方がいいかも。
やりたいことを行う手順を整理できてないってことだと思うよ。
a = a++; ということが結局どういう動作するのかを知ることより、何をしたくてそういう(矛盾をはらむ)書き方になったのかを自己分析した方がいい。
もちろん基本的な文法は勉強しておく前提はあるよ。
おれは養殖とか天然とかは分からんけど。

623デフォルトの名無しさん2018/09/02(日) 13:02:03.12ID:gypPfsRT
Cは文法的にはコードのデザインをほとんど規定しないからね。
そういう意味では頑張って覚えるほどでもない。まあ量も少ないので覚えてもいい。
でも古いコードとの互換性にこだわる様なおっさんにはならんでくれやという感じ。

624デフォルトの名無しさん2018/09/02(日) 13:06:08.54ID:nnaQ2akS
>>621
あなたの言うことにも一理ある。

でもこの板にいる人は1つの言語しか使えない人って少数派で、たいていは3、4つまたはそれ以上の言語を操るマルチリンガルな人が多いと思う。
んで、その人たちはどうやって新しい言語を使えるようになるかって言うと、1つの言語をマスターすると(Prologとか特殊な言語は除いて)他の言語も方言みたいなもので、書き方の問題だけなことが多いのね。
その際には特定言語の重箱の隅をつつくような知識が必要なわけではなく、むしろ最大公約数的な知識、もっと言うと言語に依存しない設計力のほうが大事になってくる。
なので、特定言語のあまり細かいルールにこだわり過ぎないほうが良い、という経験論での意見は間違ってはないと思うよ。

625デフォルトの名無しさん2018/09/02(日) 13:21:05.23ID:mdI4MGys
そうそう、しいて文法を覚えるなら適切に const を指定するクセを付けてほしいな(const に限った話ではないんだが)。
文字列を引数で受ける箇所全部が char* になってるコードを見るとクラクラするw

626デフォルトの名無しさん2018/09/02(日) 13:50:09.03ID:owKXNyzr
>>621
反論自体は自由にやればいいんだよ。それが匿名掲示板のメリットなのだから。
ただ、書かれている内容については吟味しないといけない。
その中には君にも峻別出来る内容もあるはずだから。
(というか、こっちが君にも分かる範囲で《客観的な範囲で》話せばいいのだが)

事実から言うと、C言語は『当初から』バリバリの実用言語であり、今も現役だ。
これは同世代の他言語とは全然違う。
だから、普通に書いてれば「未定義」なんてのに命中するはずがないんだよ。
そんな言語、使い物にならないだろ?

次に、歴史も長いのだから、何をどうやったら嵌るかのノウハウも溜まっている。
それの集大成がコーディングルールであり、例えば goto 禁止論だ。
これについても是非はあるが、これまでの経験をタダで享受する気なら、乗った方が得だ。
そしてそれに従っておけば大体全て「未定義」は回避出来る。

具体的に言えば、警告レベルを一番か二番目に厳しい状態で使って、警告についてはほぼ全部直し、
google等「コードを実際に書いている連中」のルールに従って書けば、そもそも未定義なんて踏まない。
それらはそのように整備されているから。

業務で「コーディングルール無し、警告も全部無視してよし」なんてのはあり得ないし、
仮に個人レベルでそうでもバグが取れなくて無駄に苦労するだけ。
だから結果的に「未定義」なんて気にする必要ないんだよ。
一般的な環境で普通に書いてれば命中しないし、知る必要もない。
一通りも書けない初心者なら特にそう。他にやることはいくらでもある。

君は休日にプログラミングをやろうとしているのだから、本来は「天然」なんだよ。
それを自分で「養殖」型のカリキュラムにして、無駄に上達しにくくなってる。
そこが勿体ない。
君が何の為にCを学ぶのかは知らないが、もっと直接的にその結果を目指すべきだ。
とりあえず学ぼう、では全く上達しないんだよ。
それは日本人の英語でもそうだろ。使わないと上達しないんだよ。

627デフォルトの名無しさん2018/09/02(日) 13:50:53.63ID:667Fbrpy
>>624
確かにそうですね。先に述べた通りプログラム全般に暗いのですが
JavaやPythonなども大まかな構造(サブルーチンとか演算体系とか)は
似ているかなと感じました(見当違いなこと言ってるかも)。
もっと抽象的な立場になったほうがいいですかね。

>>625
アドバイスありがとうございます。
ggってみたところconstはその重要性の割に実務で使われていない傾向にあるみたいですね。
しかし役割を考えると,特に保守の面で,積極的に使うべきだなと確信しました。
「ここは固定された値代入を想定している」という意図を明確にできるってことですよね?

628デフォルトの名無しさん2018/09/02(日) 14:03:37.00ID:667Fbrpy
>>626
そうですね。
動くプログラムを作っていたらa=a++;なんていう文は登場することはないですね。
お察しの通りプログラマーでもなんでもない独学状態なので,
そういう人間が犯しがちなミスを防ぎたい一心で規格や文法などを厳密に勉強すべきと思っておりました。

C#についてですが,こういう事を素人が言うのはまさに傲慢ですけど,
どうせ勉強するなら万人が使ってる/種々のソフトウェアを作っている標準言語を勉強したいな
と思ったのがきっかけなので,正直C#はあまり乗り気になれません。

629デフォルトの名無しさん2018/09/02(日) 15:19:58.46ID:mdI4MGys
>>627
const の役割はその通り、その値を書き換えないことを意思表示するためのもの。
strcpy の引数なんかを見ても分かると思うけど、このように使い分けするだけで関数の入出力もよくわかる。
ケアレスミスで入出力を逆に書いてもコンパイラが指摘してくれる確率が上がるし、コンパイラにとっても最適化のヒントになってる。

でも実際、const皆無のコードも珍しくない。
そんな所に自分だけ const 付けると、余所の関数を呼ぶために意味不明なキャストをするハメになってストレスMAXになる。
ただ厳密に考え出すと、値受けの引数 int x なんかは const int x であるべきでは?なんて思うけど、個人的にはそこまで強要はしなくてもいいかな… なんて思う。
でもポインタ受けの引数 char* p なんかは const char* p にすることを強要したい。
前者について緩いのは、その const はその関数の中の実装を縛るものであり、そんなことは関数の外の世界の人にとってあまり重要ではないから、というのが理由。

630デフォルトの名無しさん2018/09/02(日) 15:26:12.33ID:FVhWhkTR
>>628
C#にマイクロソフト性を強く見出しているのか知らんがJDKがゴタついていて.NET Coreが出てマルチプラットフォームで優位性があり、Unityでゲームも作れる

コンピュータを勉強したいならCでいいけどプログラミングを勉強したいならCと比較してもC#は十分万人が使っている標準言語としての地を持つよ

631デフォルトの名無しさん2018/09/02(日) 15:44:37.64ID:Q8aSECkx
組み込みなどの特殊な分野を除けばC言語の方こそ万人向けとは言い難いな
C言語はそれほど広範な分野で利用されるような言語ではないよ

632デフォルトの名無しさん2018/09/02(日) 16:20:10.20ID:d8qknsqq
C言語が使えない環境は少ないけど、かと言ってC言語を積極的に使う必要のある環境も少ない、かな?
でも全ての基本として、低レベルなCを理解しておくのは有意だと思う。

633デフォルトの名無しさん2018/09/02(日) 16:34:34.65ID:mdI4MGys
C の前にアセンブラやってみるのも悪くないと思うよ。
今はお手軽なワンチップマイコンも多いし。
欲を言えば昔の 8bitパソコンくらいがメモリもそこそこあってちょうどいいし、16bit くらいになるとスタックフレームも使いやすくていいんだけど、今そういうので丁度いいのはあまり無いのが残念なところだけど。

634デフォルトの名無しさん2018/09/02(日) 16:48:06.49ID:owKXNyzr
>>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の作法について学ぶ必要もないはずだが)

635デフォルトの名無しさん2018/09/02(日) 17:06:32.38ID:4Jf6YH6e
>>633
まず、エミュレータを作ります。

636 ◆QZaw55cn4c 2018/09/02(日) 17:48:53.86ID:oSO4LvdH
>>626
>君が何の為にCを学ぶのかは知らないが、もっと直接的にその結果を目指すべきだ。
>とりあえず学ぼう、では全く上達しないんだよ。

うーん、これは非常にいい指摘ですね
私は、これに気が付くのにずいぶんと遅くなってしまいました

637デフォルトの名無しさん2018/09/02(日) 18:34:07.99ID:5WqNet32
素人は技術もないのに、登山で直線的に、絶壁を登ろうとするから失敗する。
勉強のプロは、斜めに進んでいくから、登れる

素人がすぐに思いつくような、直線的な方法をやってもダメ。
全員が失敗してる。
C の授業を受けた、ほとんどの大学生が、こんな授業は無駄・役に立たないと言ってるw
彼らはなぜ、そう言うのか、理由を考えたらよい

C のようなポインタのある言語を、1年勉強しても、
ポインタを追っかけるだけで時間がつぶれるから、何も作れない

その時間で、Ruby/Python/JavaScript の3つの動的言語をやれば、ツールを作れる

まず素人は、動的言語・静的言語・ポインタのある言語の、
位置付けや難易度をわかっていない

638デフォルトの名無しさん2018/09/02(日) 18:36:32.73ID:xLyKs+8r
ポインタってそんなに難しいか?

639 ◆QZaw55cn4c 2018/09/02(日) 18:46:30.43ID:oSO4LvdH
>>638
難しいと思います
C++ に移ってからも、T ** を T *& に書き直すとかする段階で、自分のポインタ概念の認識が浅かったことを実感させられたりしたものです

640デフォルトの名無しさん2018/09/02(日) 19:00:28.56ID:zPdaUXCQ
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);

641デフォルトの名無しさん2018/09/02(日) 19:30:02.62ID:nnaQ2akS
>>640
8進数表記って滅多に使わないから、たまに良かれと思って桁合わせでゼロパディングすると意図せず8進数になって悩むよな。

642デフォルトの名無しさん2018/09/02(日) 19:43:35.59ID:4Jf6YH6e
>>641
あ、それ、30年ぐらい前にハマった。

幸い8や9を使っている所でコンパイルエラーになったからよかったが(それでも当初はなんでエラーになるのかと悩んだがw)、もし使ってなかったらROMに焼いてからターゲットマシンで変な動きになって悩み続けた事だろう。

643デフォルトの名無しさん2018/09/02(日) 22:38:57.74ID:u9h+2eE3
Cが全盛だった時代、否が応でもプログラミングの勉強はCから始めた。
昔の人は理解できて今の人には難しいと考えるのは傲慢ではなかろうか。

ところでアンサイクロペディアのC言語の項が18禁になってるのは全部椋田のせいだな。

644デフォルトの名無しさん2018/09/02(日) 23:21:32.95ID:owKXNyzr
>>643
> 昔の人は理解できて今の人には難しいと考えるのは傲慢ではなかろうか。
いや事実だ。理由は単純で、つまりは裾野が広がっているだけなのだが、以下。

1. C言語の難易度自体は昔と同じだが、C言語の問題点を修正したより簡単な言語が開発された。
2. 昔プログラミングをしてたのは理系の大学生/大卒だけだった。
 今は文系も含め、しかも中高生から始めようとしている。
 数学で培われる論理/抽象思考能力はプログラミングに不可欠なのだが、
 これらがまだ整っていない状態の中高生や文系にプログラミングを教えるってのがそもそもの間違い。

どのみち今の状況で計算機科学専攻ならCは必修だろうし、そういう連中には問題ない。
ただ、そうじゃない連中がCをやる必要はないってこと。
Pythonだけで済む世界ならそれもありだ。

645デフォルトの名無しさん2018/09/03(月) 00:24:24.13ID:gEsVL0BV
昔も中高生の頃からプログラミングは始めていたけどな
いわゆるベーマガ世代の年齢層がBASIC やアセンブラからC言語に流入してたので平均的レベルは比較的高かったように思う

646デフォルトの名無しさん2018/09/03(月) 00:32:54.22ID:4uYLlRfz
処理目的の抽象度が上がっているという現実もあるからなぁ

647デフォルトの名無しさん2018/09/03(月) 00:35:18.97ID:wBpew+1c
プログラミングの学習は、最初電卓でやってた
ニーモニックが16進表示みたいなやつだったな
それで、ループや分岐、サブルーチンを覚えた
その後は、Z80のアセンブラに移ったっけ
高級言語やりたかったけど、
8ビットのプアなPCしか持ってなかったし
漢字モア使えないPCで漢字ROM買って取付け
漢字非対応のドットインパクトプリンタに
機械語プログラム使って漢字出力してた

648デフォルトの名無しさん2018/09/03(月) 01:05:18.32ID:co6OAOoM
>>645
ベーマガやってた連中はごく一部なのだから一般化するのは無理がある。
そしてそれに対応する連中は、今はもっと増えている。
家にPCがあるのが当たり前の時代だし、IDEも無料、
インターネットでOSSのソース見放題、質問も出来る。

昔の大学生も、大学で初めてプログラミングした連中はCで撃沈してた。
今は昔と比べてIDE等の環境が断然良くなっているが、
大学生の割合が増えた分、大学生の平均的頭は悪くなっている。
(昔は上位1/4が大学生だったが、今は上位1/2で、東京に至っては2/3じゃなかったっけ?
昔だと当然高卒だった連中が大学に行ってるのだから、Fランでは授業が成立しないのも当然)

だから今の「平均的大学生」が大学でプログラミングを始めても、当然Cでは撃沈する。
今の「上位半分の大学=国公立+有名どころ」(=昔の上位1/4の頃の大学生相当)の理系で、
昔の大学生と同様にCで撃沈するはず。
それを文系含めて全員プログラミングをやらせようってのだからかなり無理がある。

とはいえ、個人差の方が大きいし、やるのは自由だ。
ただ、もっといい言語(改良された言語)は沢山あるのだから、無理してCに拘る必要はない。
情報/計算機系はどうしても速度勝負になるから、どのみちCは外せないが。

649デフォルトの名無しさん2018/09/03(月) 01:20:48.33ID:kJOKS5+S
今の平均的な大学生のレベル低下はゆとり教育の弊害だと思うが

650デフォルトの名無しさん2018/09/03(月) 01:38:17.54ID:y7r/YW4w
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年代初期

651デフォルトの名無しさん2018/09/03(月) 01:45:48.17ID:dM1zEtwp
アセンブラ(マシン語)からやったほうが
イメージしやすいと思うんだけどな。ポインタ周りとか

現代はPythonやC#が潰しが利くから昔でいうCの位置かな
https://cpplover.blogspot.com/2016/05/mitsicp.html

652デフォルトの名無しさん2018/09/03(月) 02:48:03.81ID:WkDP4f9E
みなさんほんとうに色々な助言ありがとうございます。
目的はなにかといいますと,ゲームを作りたいのではなく,むしろ計算機の仕組みなどを学びたいと思っています。
やっぱり始めはPythonのほうがいいんですかね……。
(ちなみにガッツりゆとり世代です。中学あたりで土曜日通学が復活したかな?)

653デフォルトの名無しさん2018/09/03(月) 05:37:12.02ID:WkDP4f9E
調べただけですがRustもよさげですね。私が学びたいと思っている計算機の基礎的な部分に触れられると同時に
C99では非常に複雑で非本質的な努力を要求される,安全なメモリ管理やUnicodeに対応した文字列操作が
簡単に実現できるというのは魅力的です。また,Mozilla社が主導しているというのも好印象です。
難点は,かなり新規の言語なので,Cほど開発手法が洗練されておらず,
またコンパイラの実装が一つしかないことですかね。
しかし開発版ながらRust製のOSもあるようですし,私がCを通じて得たいなと思っていた知見や概念を
Cほど紆余曲折を経ずに取得できそうです。(学問に王道なしとは言いますがね……)

これ以上は(というか既に大分)スレチになってしまうので書き込むのはやめます
青二才に貴重な時間を割いて様々な助言を頂いたこと,ほんとうに感謝しています。

654デフォルトの名無しさん2018/09/03(月) 07:47:15.40ID:Sux6qqaT
別にCでいいと思うよ。
ただ何使うにしても、画面表示とかができないとモチベーション上がらないかもね。
GUIとまではいかなくてもコンソール上にテキストで簡易グラフィックくらいやらないと、動いてる様を眺める楽しみが半減だ。
エスケープシーケンスとかを一緒に勉強するといいかもな。
とりあえずライフゲームでも作って眺めてみたら。

655デフォルトの名無しさん2018/09/03(月) 08:01:08.87ID:gEsVL0BV
まあ手っ取り早くプログラミング全般を眺めるならマルチパラダイムの言語を最初に学ぶのも悪くはないと思うよ
手続き型、オブジェクト指向、関数型のマルチパラダイムなら、他にはC#やJavaScriptなどが環境が充実してるので手軽ではあるけどね

656デフォルトの名無しさん2018/09/03(月) 08:20:45.29ID:/AUwjj56
計算機の仕組み、つまりコンピュータの動作原理を学ぶならアセンブラだろうけど、普通のOSのAPIはCなので、やっぱりC言語を勉強するのはベストプラクティスだろうね。
PythonだったりC#だったりはプログラミングは習得できても動作原理は深く学べない。
果たしてC#等の高級言語しか使えない人の何割が割り込みやCPU動作モードやSFRについて正確に理解してるのやら。

657デフォルトの名無しさん2018/09/03(月) 08:30:03.31ID:4uYLlRfz
>>653
Rustの方が細かなノウハウでコケずにコンパイラが指摘してくれるというのはあるが今の目的ならCの方が素直でいいと思う
実機の動きを追える上に色々な機能が付いていて嬉しいという言語なので覚える事が滅茶苦茶多いよ

658デフォルトの名無しさん2018/09/03(月) 09:18:58.58ID:co6OAOoM
>>652
中高生なら学校の勉強しとけ。結果的にそっちの方が近道だから。

プログラミングは抽象思考が出来て自分でサイクルを回せる奴しか上達しない。
具体的に言うと、「○○→△△って事は●●→▲▲ってことだろ。
ならここをこう改造すればこうなるはず…ビンゴだぜ!俺って頭イー」
を『自分だけ』で勝手に繰り返せる奴だ。(β)
学校の教科でこれに最も近いのは物理で、次点で数学だ。
だからこのタイプの奴は物理と数学は『本人は特に努力した覚えが無くとも』無双出来る。
逆に言えば、そうなっていない奴は本質的にプログラミングに向いてない。
その場合は、そもそもプログラミングをやるべきではないと俺は思っているが、
それでもやるのなら、まず物理と数学の『勉強の仕方』を変えて『抽象思考』を身につけるべきだ。
(単に勉強するだけなら『暗記』でも一定まではカバー出来てしまうが、それでは意味がない)
プログラミングを始める前に、プログラミングが上達する基礎能力としての抽象思考を身につけないといけない。

次に、既にこれが出来ていたとすると、
教科自体の内容はプログラミングには直接は関係ないから、中高生でも出来るのは事実だ。
(ここら辺のことをわきまえず、『中高生でも出来る』とだけ見て全員に教えようとしてるから問題がある。
とはいえ、主導している馬鹿共はプログラミングが出来ない連中だから、話が通じないのも当然だが)
仮に君がここまでは到達しているとして、話を進めると、以下になる。

> むしろ計算機の仕組みなどを学びたい
現状、C以外に選択肢はない。

> Rust
止めとけ。今のRustはプログラミング初心者用には出来てない。C以上に確実に撃沈する。

> Python
海外では「関数呼び出し、ループ、条件分岐」等の基礎の基礎を学ぶのなら一番早いと言われている。
現実的にはAWK/Perl/Ruby/JavaScript等いわゆるスクリプト言語全般は全てこれに当てはまるが。
ただ、上記の「プログラミングが上達出来る奴」ならこの部分は数日〜数週間で通過してしまう為、
言うほど関係ない。「初心者ならどの言語でも同じ」とよく言われているのはこれ。

659デフォルトの名無しさん2018/09/03(月) 09:19:38.61ID:co6OAOoM
例えば体育、運動神経のいい奴は何をやってもそこそこ上手いし、一瞬で上達するだろ。
あれと同じで、「プログラミング神経」のいい奴はどの言語でも上手く行くし、すぐ上達するんだよ。
だから言語自体よりは「プログラミング神経」としての『抽象思考』能力の方が重要なんだよ。
そしてそれがない奴が頑張ってみたところで、
ちょっと運動神経のいいやつが遊びでやってるのを見たらスゲー上手くて萎える、みたいなことになる。
だから本当は基礎能力としての抽象思考を鍛えることが重要で、プログラミングの上達はその結果にすぎない。
そこを「プログラミングを『教えれば』上達する」と勘違いしている馬鹿が色々やろうとしてるからおかしなことになってる。
『教えれば』上達するのは暗記科目であって、
上達する状況を整えた上で『勝手にやらせる』と自然と上達するのが非暗記科目だ。

で、言っちゃ悪いが君は多分「抽象思考」型ではなく、「暗記」型だ。enumして全潰しというのがそれ。
君は本質的にプログラミングに向いてないタイプだと思うぞ。
教科の延長でプログラミングを学びたいと思ってるのなら止めとけ。

上記(β)タイプは主に一点突破で、むしろ勝手に突っ込んでいって自爆するのが多い。
最近出てきたのはGateboxだが、いい感じに突き抜けてるだろ。
https://gatebox.ai/home/
http://www.itmedia.co.jp/news/articles/1612/14/news092.html
こういうことを平気で出来る奴じゃないと上達しない。
君にはその臭いを感じない。

660デフォルトの名無しさん2018/09/03(月) 09:45:55.75ID:XmaAZlOW
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年度生まれ以降。

661デフォルトの名無しさん2018/09/03(月) 09:58:26.53ID:udP6IpNT
やっぱりプログラミングより数学の勉強の方が全然大事だと思うわ
無駄な時間を過ごしたおっさんの後悔からの発言だけど
若者は線形代数と物理いっぱいやった方がいいよ

662デフォルトの名無しさん2018/09/03(月) 11:14:17.43ID:sjKCXLyo
BIOSの割り込みサービスで画面に文字表示するやつよんだらどうなりますか?

663デフォルトの名無しさん2018/09/03(月) 11:36:38.73ID:CjQwreEv
>>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

664デフォルトの名無しさん2018/09/03(月) 13:23:16.40ID:G6xL0gpW
これは表紙買いしてしまう

665デフォルトの名無しさん2018/09/03(月) 17:00:11.86ID:fBv9u5Bm
>>618

> そういう文法的になことには今は拘らない方がいい。

臭い物に蓋してんじゃねえ
無理に気になる必要はなくても
気になったのに誤魔化せって最低なアドバイスだ

学問そのものを全否定する暴論だ

666デフォルトの名無しさん2018/09/03(月) 17:42:03.71ID:kgEYN356
そんなに気になるならコンパイラを読めば良い
コンパイラを読まずにああだこうだと言ってそれを学問と言い張るのは今更ニーチェを読んで学問と言い張っているのと似ている

667デフォルトの名無しさん2018/09/03(月) 18:03:25.66ID:bm6csMD2
ゲームブックの訳本かしら

668デフォルトの名無しさん2018/09/03(月) 18:07:52.25ID:fBv9u5Bm
しどろもどろの典型だな

669デフォルトの名無しさん2018/09/03(月) 18:26:17.33ID:ttVcJTrG
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006

この本は、日本の大企業から、C の専門家が数十人集まって作った。
この100ルールまで行かないと、教えられない

汎整数拡張・副作用完了点・短絡評価・bool とか、各概念が難しい。
とても初心者に教えられない

特に学生なんて、現実を知らないから、文法があっていれば正しいと思う、
固定概念があるから成長できない

現実には、MISRA-C、100ルールに従わないと話にならない。
学生にはそういう事はわからないから、アホみたいなコードを書く

コードは、正しい文法で書いても、ダメだから。
可読性・保守性・バグを起こさない、Ruby みたいなコーディングが大切

だから、Rubyでプログラミング学ぶのが大切。
学ぶのは文法規則じゃない!

システムを作る・保守するためのプログラミング!

6706692018/09/03(月) 18:34:29.69ID:ttVcJTrG
Ruby の女神・女優の池澤あやかも、同じことを言ってる。
慶応大学卒だけど、大学で、C の授業は無意味だって

山陰地方のRuby合宿へ行って、webアプリが作れるようになった

Cの開発時間の大半が、ポインタ・バグでつぶれるから、プログラミングを学べない。
文法がわかるだけで、ものを作れないから楽しくない

だから、Cの授業の評判が悪い。
無意味な授業だよなって

だから初心者は、Rubyから初めて、まず動くものを作る

671デフォルトの名無しさん2018/09/03(月) 18:58:25.85ID:LFbByM25
最初の質問者は計算機の仕組みを知りたいのであってWebアプリを作りたいわけでもMISRA Cルールを知りたいわけでもない件

672デフォルトの名無しさん2018/09/03(月) 20:30:15.22ID:E2St7m4+
典型的な超頭悪そうなヤツラが
ひたすら長文連投してる

673デフォルトの名無しさん2018/09/03(月) 20:31:53.98ID:zLYH5Np3
>>670
またrubyガイジかよ。Cスレにまで出張ってくるななよ

674デフォルトの名無しさん2018/09/03(月) 20:35:14.84ID:i7qE7EE1
>>672
そのまんまお前の事だ

675デフォルトの名無しさん2018/09/03(月) 21:07:08.36ID:e7RcTinN
>>674
???

676デフォルトの名無しさん2018/09/03(月) 21:32:03.32ID:i7qE7EE1
半角バカを知らないのか

677デフォルトの名無しさん2018/09/03(月) 23:39:43.07ID:e7RcTinN
あいつか

678デフォルトの名無しさん2018/09/04(火) 00:25:08.00ID:Ilbb7rlr
とりあえずPCCでも読んでみることにします。

679デフォルトの名無しさん2018/09/04(火) 00:45:19.60ID:LzYZ2uc7
Cのスレに不毛な喧嘩売ってくるのは大体Cで挫折して、
劣等感を何とか慰めようとするカーミング行動だから気にするな

680デフォルトの名無しさん2018/09/04(火) 00:47:45.68ID:oF8LgJEj
>>669的にはコンピュータのしくみはどうでもいいってこと?

681デフォルトの名無しさん2018/09/04(火) 06:21:50.26ID:4a01gUXa
>>663 にある本の紹介文なのか宣伝コピーなのか、
「70年代のTRPGの生の感触がばりばり伝わってくるAD&Dの本」て部分を
どう解釈したら良いのか分からないのだ。

Cや「ドラゴン・ブック」、TRPG, AD&D って言葉くらいは知ってる者に
解題してくれないか。
ひどく野暮な質問かも知れないけど、聞くは一時の恥とか言うし、敢えて頼む。

682デフォルトの名無しさん2018/09/04(火) 08:45:47.28ID:HIB3dDVe
>むしろ計算機の仕組みなどを学びたいと思っています。

それなら情報処理の基礎なんかをやった方が良い様な気がする
今は基本情報処理とか言うんだっけか?
資格とかのやつよ

683デフォルトの名無しさん2018/09/04(火) 14:29:38.61ID:Ilbb7rlr
向いてないっすか……。正直物理や数学は得意なほうなんですがね……。

684デフォルトの名無しさん2018/09/04(火) 14:48:39.41ID:0ItemGYT
>>683
高齢者はマウンティングする病にかかりがちなので気にすんなよ

685デフォルトの名無しさん2018/09/04(火) 15:15:50.63ID:FJBPHmlL
>>653
武内覚さんのLinuxの仕組み片手にCやるのがおすすめ
ファイルIOとかなら、システムコール、VFS、FS、Raid、デバドラ、スケジューラー、SCSiまでユーザーランドからデバイスまで一貫して、かつお手軽に触れる

686デフォルトの名無しさん2018/09/04(火) 16:39:04.23ID:gZnu4stV
cの文法で書けるだけの
無能を自覚できてない低学歴知恵遅れの高齢底辺ITどかたに多い

687デフォルトの名無しさん2018/09/04(火) 17:30:33.56ID:DgdW8Zal
お。半角文字の入ってない書き込みを久しぶりに見たような気がする。

688デフォルトの名無しさん2018/09/04(火) 17:53:50.88ID:gZnu4stV
底辺ITドカタさんたちは
今日みたいな台風の日も自宅待機ではなく
出勤でしたか

大変でしたね

689デフォルトの名無しさん2018/09/04(火) 18:52:18.48ID:Yl2cIsi8
台風で東海道線や環状線が止まるのはまあ想定内だったが阪急や京阪まで止まるのは想定外だったわ

690デフォルトの名無しさん2018/09/04(火) 20:17:15.30ID:tpLBdVu4
>>683
数学が得意なら諦めるのはまだ早い

691デフォルトの名無しさん2018/09/04(火) 20:22:39.67ID:GSpvNdv5
やっぱワンチップマイコンでアセンブラがいいよ。
クリスマスに向けてLEDチカチカさせてジングルベルでも鳴らしてみるとかどうよ。

692デフォルトの名無しさん2018/09/04(火) 20:27:34.18ID:bz6n3SY3
ジングルベルはJasracフリーだな、心配ない

693デフォルトの名無しさん2018/09/04(火) 21:12:38.21ID:nrC4An0b
ロジアナがあればベストだが無ければせめてオシロは欲しいな

694デフォルトの名無しさん2018/09/04(火) 21:54:25.98ID:Uy+TuYSZ
>>683
向いていないね。それは臭いから分かる。お前は本当の「天然」ではない。
以下参考だが、結局中身は同じだ。
> 一撃必殺!急にマンガ家だの声優だの絵師だのになりたいと言い出した子どもや大人を止める、オススメの方法
> https://togetter.com/li/1130025

今はプログラミングなんて本当に簡単に始められる。そのレベルでグダグダ質問している時点で向いてない。
本当の「天然」なら、もう既にとりあえず何かしらのコードを書いてる。
お前は勉強しないと何も出来ないと考えている「いい子ちゃん」タイプだ。
そういう奴は自分でサイクルを回せず(=暴走出来ない)、上手くなれない。
無理してプログラマになっても、後輩に簡単に抜かれ、馬鹿にされる、悲惨な人生になるぞ。止めとけ。
(ここ見るだけでも老害を馬鹿にしたがっている奴はいくらでもいるのが分かるだろ)

ベーマガ世代だって理解してやっていたわけではない。やりたくてやってただけだ。
先に数学をやった方が効率が良かったはずだが、そんな事は考えてもいない。

お前は、サッカーをやる前に、筋トレして体幹も作り上げ、万全の状態にしようとしている。
勿論そういうのもありだが、それはやはり「養殖」なんだよ。
「天然」はそうじゃない。サッカーをしながら、もっと上手くなりたいから筋トレして体幹も作っていく。
好きだから続けられるし、環境が多少酷くても我慢出来る。(これがIT産業がブラック化しやすい遠因にもなってる)
そういう「天然」向け仕様の環境で、「養殖」では悲惨なことになる。
(勿論、プログラミングをやってみてから好きになる、というのもありだが、それはかなり少数派だと思う)

向いてる/向いてないで言えば、
ちょっとコードを書けるようになって調子に乗ってここで俺ツエーしている馬鹿共の方が向いてると言える。

695デフォルトの名無しさん2018/09/04(火) 21:55:26.59ID:Uy+TuYSZ
今はプログラミングの裾野が広がって、絶対的な人数が全く足りてない。
だから文系をSEとして大量投入してみたものの、いい結果がでたとは言いがたい状況だ。
それで次は「小学生からプログラミングを教える」「国民全員がプログラミング出来るように」
みたいなアホなことをやろうとしているのだが、これは完全に愚策だ。
プログラミング出来ない/したこと無い奴らが仕切ってるからおかしなことになってる。
それにお前がつき合う必要はない。

教育改革ってのは取り返しが付かない人体実験になるから、性急にやっては駄目なんだ。
この認識すらなくゆとり教育を導入した文化省の連中は、
今からでも全員死刑に処すべきだと俺は思っている。
(それくらい罪深いし、社会に対して悪影響を及ぼしている。日本はミスリードに甘すぎだ)
今の「小学生からプログラミング」についてはどうやらお遊び程度だからまあいい。
やるにしても当初はこの程度で様子見しながら拡大するか取りやめるか試すべきなのさ。
(俺は意味無いから止めろと思っているが)

今時PCもスマホもない家なんて珍しいだろ。
なら初心者用のプログラミング環境はすぐに整えられるし、勝手に始められる。
だからそのレベルでこんな所に質問してる時点で間違ってる。

天然:何故プログラミングをするのか?そこにPCがあるからだ (単にいじくり回したいだけ)
幼稚園児:ケーキ屋さんになりたい!(だってケーキ大好きだしもっと食べたいから)

お前には幼稚園児が「ケーキ屋さんになりたい!だってお金儲かるし!」
みたいな事を言っている違和感がある。
初心者の癖に計画しすぎだ。必要があって否応なしに始めるわけでも無し、意味不明すぎる。
そういう奴も中にはいるのかもしれないけどさ。
ただ、確実に言えるのは、プログラミング界隈は良くも悪くも全般的にギーク向けに出来上がってる。
お前がギークになりきれないのなら、ずっとアウェイのままだ。
それは幸せなことではないと思うよ。

696デフォルトの名無しさん2018/09/04(火) 22:38:39.94ID:l07xjkBV
おいら頭悪いから長い文章よめねんだ

697デフォルトの名無しさん2018/09/04(火) 22:49:40.55ID:CWUYudxX
今北産業

698デフォルトの名無しさん2018/09/04(火) 23:00:09.15ID:8Afhx4Yo
>>696
周りに迷惑かけない分、頭の悪い長文書く奴より立派だから安心しよう

699デフォルトの名無しさん2018/09/04(火) 23:14:17.99ID:gZnu4stV
オレみたいに的確に要点をまとめてる長文なら読める
低学歴知恵遅れの長文は読めるシロモノじゃないからな

文章だけで低学歴知恵遅れかどうかは
簡単に判別できる

このスレに連投されてる長文の駄文は
低学歴知恵遅れが記述したと推認することに疑いの余地がない

700デフォルトの名無しさん2018/09/04(火) 23:17:12.74ID:Yl2cIsi8
必要なら数学の知識などなくても感覚で覚えるからな
座標計算の必要があれば三角関数など知らない小中学生でもsinやcosくらいは使う

701 ◆QZaw55cn4c 2018/09/04(火) 23:26:47.20ID:lJV/Mb/R
>>700
小中学生に三角関数は無理でしょう…まず相似の概念を習うのが中学2〜3年くらいなのでは?

702デフォルトの名無しさん2018/09/04(火) 23:31:24.63ID:dqoEXQdt
数学は教科書で勉強しないとあかんよ
経験で得た知識なんてただの思いこみ

703デフォルトの名無しさん2018/09/04(火) 23:46:19.73ID:Yl2cIsi8
思い込みでも何でも使っているうちに覚える
自分の場合は30年以上前中学生の頃に画像処理のプログラミングしている間に三角関数(といってもX座標はcos、Y座標はsinといった程度)や
論理演算(RGBの合成はOR、反転はXORなど)を覚えた
その後になって高校の頃に教科書でまともに学んだ覚えがある

704デフォルトの名無しさん2018/09/05(水) 00:03:44.17ID:ElSUubWJ
>>701
三角関数が何なのかは分からなくても、sin と cos を使うだけなら小学生でも定型文的に覚えちゃうんじゃね(おれは中学の頃だったが)。
円を描くところから始まり、直径を変化させると渦巻きにできたり位相や周期を変えて橢円やらリサージュになることに気付いたりで、
パラメータをやみくもに変えて手探りで欲しい結果にたどり着くようになる。
もちろん円的な動きの元ネタは必要で、ベーマガみたいなののコードをパクって出発だな。
小学生の頃はファミリーベーシックだったので三角関数には行き着かず、中学生でMSXになって三角関数に出会ったが、小学生の頃にMSXがあれば手を出してたと思う。

705デフォルトの名無しさん2018/09/05(水) 00:11:58.72ID:ElSUubWJ
そういや小学生のころはスーパーマリオが出たころで、ファイアバーをどうしても再現したくてファミリーベーシックで頑張ってたわ。
三角関数に行きついてないから、角度の範囲毎の動きを個別に書いたな。
でも長さが伸び縮みしたり軌跡がカクカクで、結局将来の夢に据えてお仕舞いにしたw

706デフォルトの名無しさん2018/09/05(水) 00:29:02.76ID:TND9Xsam
ニュー速で話題にしていた、CLA Fortran プログラムですが、
C言語への移植が終わりました。
公開方法について、検討しています。
↓ここを使おう蚊と考えています。
https://ideone.com/

C言語へ書き換えたソースと、入力用データとパラメータの3つですが
入力用データとパラメータについては、サンプルに掲載したものと同一
なので公開は必要ないかも知れません。
ただし実行するには必要になります。どうしましょうか?
テキストファイル形式で単独でアップロードするか、
ソースの一番下にコメントとして載せるかどの方法が良いでしょうか?
あと、オリジナルFortranソースもアップロードした方が良いですか?
これは以前PDFを見つけてくれた方がソースに起こして頂いたものです。

707デフォルトの名無しさん2018/09/05(水) 00:29:27.46ID:TND9Xsam
間違えました、済みません。

708デフォルトの名無しさん2018/09/05(水) 00:56:31.50ID:8BhrS90z
>>694
>>695
よくわからんのだが、お前が相手をしてるそいつはなぜプログラミングを初めたいと思ってると思ってる?
よくわからんのだが、ギークとかなんやらの最初とそいつの最初の具体的な差がよく分からん

709デフォルトの名無しさん2018/09/05(水) 07:35:22.74ID:p5l66rRv
C言語ポインタ完全制覇っていう書籍が気になってるんだけどこれはどの程度の知識がある人を対象にしてるの?

710デフォルトの名無しさん2018/09/05(水) 08:20:43.64ID:2JdbfNpR
どの程度っても難しいなw
簡単なポインタは分かるけど、二重ポインタとか配列が絡むと混乱しちゃう程度の知識の人向け?
初心者なら悪い本じゃないから買っちゃえ。

711デフォルトの名無しさん2018/09/05(水) 10:04:35.05ID:TsbO/g0i
>>701
円を書く時に使えると聞いて確かに書けるので使っていて、後で高校生向けのやたらやさしく書いてある図と絵が満載の参考書を見てどういうことか詳細がわかった。俺が中2の時の話。

で、今思うに、これぐらいならちゃんと教えれば小学生でもわかるんじゃないか?俺としては単に教えてないからできないだけのような気がしてならないぞ。

しかし後々高校に入ってから数学の授業で「これ割るこれがsin」などと教師が言ってるのを見て、こんな説明だけでわかるやつはいないだろうとも思った。
ちゃんと教えられる人があまり居ない事もわからないやつを続出させる原因なのかもなと。

712デフォルトの名無しさん2018/09/05(水) 10:24:41.46ID:mkiFi/5o
あの説明はひどいよな
だから何?がずーっと消えない

713デフォルトの名無しさん2018/09/05(水) 10:29:11.29ID:jTYdKpzW
sin,cos,tanそのものはアホな小学生でない限り余裕で理解できる。
ただ、それに付随した加法定理やらいろんな公式をセットにして教えたいし、それより先に教えることがたくさんあるので>>711の言っている通り教えてないだけだと思う。

714デフォルトの名無しさん2018/09/05(水) 10:29:52.26ID:TP9d0IJd
せんせい
「同じ授業を受けていい点数を取る生徒ももいるんだから、悪いのはIQの低い君達」
「分かる奴は塾に行ってる?じゃあ悪いのは君達の努力不足だ」

715デフォルトの名無しさん2018/09/05(水) 10:36:57.83ID:2JdbfNpR
論破やな・・・w

716デフォルトの名無しさん2018/09/05(水) 12:34:15.95ID:TWmx8fnR
>>709-710
初心者には、この本もよい

詳説 Cポインタ、2013、オライリー・ジャパン

717デフォルトの名無しさん2018/09/05(水) 12:40:26.88ID:BcgqOcGx
>>711
普通は円を書くのに三角関数を使わない
普通は

718デフォルトの名無しさん2018/09/05(水) 12:41:23.62ID:vNhhiwgZ
絵が円形に動くときは?

719デフォルトの名無しさん2018/09/05(水) 12:43:57.25ID:BcgqOcGx
絵が円形に動くとき
は普通に円を書く時ではない

720デフォルトの名無しさん2018/09/05(水) 12:45:48.51ID:vNhhiwgZ
え、
>>711ってarcとか使わないで円を書くって言ってるの?

721デフォルトの名無しさん2018/09/05(水) 12:54:42.87ID:usOBe9qe
アスペっすわ

722デフォルトの名無しさん2018/09/05(水) 12:59:20.81ID:TsbO/g0i
三角関数の説明に三角形だけの図を描いてこれ割るこれとか言って済まそうってのは手抜きな感じがする。やはり円も描かねば。

ま、しかし、sin. cos 使って円が書けるのがわかったのは良いが、当時のマイコンは貧弱で浮動小数点演算なんかやらせてたら遅くて仕方がなかった。
しかしBASICでグラフィックに円を描かせると妙に速い。正数計算して描いてるからだが、どうするとそんなことができるのかを延々と探り続けてようやっとわかったのが高校生になってからだったかな。
今はもうほとんど覚えてないが二乗して足してってオーバーしたら引いてみたいな計算したと思った。

723デフォルトの名無しさん2018/09/05(水) 13:00:45.01ID:TsbO/g0i
>>717>>720
まあ40年ぐらい昔の話だからね。

724デフォルトの名無しさん2018/09/05(水) 13:01:32.32ID:9Ih296dz
>>722
で?

725デフォルトの名無しさん2018/09/05(水) 13:07:48.81ID:D3bYtmsn
ポインタ限定でそんなに語ることがあるのか

726デフォルトの名無しさん2018/09/05(水) 13:15:30.75ID:Lw38WY1e
>>722
それってブレゼンハムやミッチェナーのDDAアルゴリズムを利用した直線や円周の高速描画だろ
懐かしいな

727デフォルトの名無しさん2018/09/05(水) 13:22:45.26ID:TsbO/g0i
>>726
何て言うのかは知らなかった。何かのプログラム解析してわかったんだったかな。その辺は忘れた。
直線も足してってオーバーしたら引くみたいなやり方だよね。今ではハードウェアで組み込まれてるんだろうな。

728デフォルトの名無しさん2018/09/05(水) 13:24:01.11ID:ElSUubWJ
>>725
ポインタが指す先が const の場合とかポインタそのものが const の場合とかさらに volatile が組合わさったりさらにそういうののポインタだったり配列だったり関数ポインタまで入り込んだりした場合に、
正確に型宣言したり読んだりするには結構修行が必要だからいろいろややこしいことが書いてあるんじゃないか

729デフォルトの名無しさん2018/09/05(水) 13:27:13.74ID:TND9Xsam
>>722
>当時のマイコンは貧弱で浮動小数点演算なんかやらせてたら遅くて仕方がなかった。

この辺は工夫次第
8bitPCが全盛だった頃、動く3Dオブジェクトを表示するのに機械語で演算処理組んでいた
全部整数化し、SIN関数値は全部テーブルで持たせていたな
試して見れば分かるが実際に必要なテーブル範囲は90度もいらない

730デフォルトの名無しさん2018/09/05(水) 13:37:21.57ID:7JsiFjUt
敵の弾が自分めがけて飛んでくる
ってたったそれだけでも中学の頃は大変だったな・・・
なつかしい

731デフォルトの名無しさん2018/09/05(水) 13:47:10.12ID:ElSUubWJ
>>730
大変だった
どんな式を立てたかは忘れたが、角度によって弾の速さが変わっちゃったりして試行錯誤してたな

732デフォルトの名無しさん2018/09/05(水) 13:51:42.60ID:mkiFi/5o
1フレームごとに最短距離で追尾してくる最も厄介なミサイルが実は一番簡単

733デフォルトの名無しさん2018/09/05(水) 14:58:15.54ID:jTYdKpzW
もうすでにC言語なんか関係なく回顧厨になっとるな。
俺も乗っかろう。
昔はBASIC標準のライン描画やらペイントルーチンが遅いので、いかに高速なアルゴリズムを作るかパソコン雑誌の特集になってたりしたな。
超高速中間色対応ペイントルーチン!みたいな。
ある意味、良い時代だった。

734デフォルトの名無しさん2018/09/05(水) 16:27:30.41ID:GAiajT5F
中間色とか20年以上聞いてない

735デフォルトの名無しさん2018/09/05(水) 19:06:16.01ID:83kKikU4
中間管理色

736デフォルトの名無しさん2018/09/05(水) 20:11:02.62ID:oFUMlVxX
タイルパターン

737デフォルトの名無しさん2018/09/05(水) 20:19:51.65ID:dRudxIH1
ランダムディザ

738デフォルトの名無しさん2018/09/05(水) 20:20:14.55ID:TND9Xsam
液晶上にある発光体の色は3種類
マゼマゼする原理は同じ

739デフォルトの名無しさん2018/09/05(水) 21:50:01.40ID:PklssQfn
>>734
CoolType/CelarTypeがそれに近いけどな

740デフォルトの名無しさん2018/09/05(水) 21:50:31.53ID:YeNc+rPy
R成分100%にB成分100%をビット演算で重ねる、みたいな話か。

741デフォルトの名無しさん2018/09/05(水) 22:58:16.11ID:Lw38WY1e
重ねるというよりも隣接するドットを違う色で決まったパターンで表示することで
擬似的に色調表現するテクニック
基本的に8色しか使えなかった頃に多色表現するために開発された手法
複数ドットでひとつの点を表現するためにいかに自然に見せるかといかに高速化するかが
プログラム的に腕の見せ所だった

742デフォルトの名無しさん2018/09/05(水) 23:26:42.92ID:ElSUubWJ
cleartype はそういうのじゃなく、三原色の並びを利用して擬似的に横方向の解像度を上げる方法でしょ。
1画素内に三原色が RGB と並んでた場合、それを2画素並べると以下のように画素の分解能を超えた位置に白点を表示できる。

RGB___ 白黒 … 座標 0 に白点
_GBR__ シアン赤 … 座標 1/3 に白点
__BRG_ 青黄 … 座標 2/3 に白点
___RGB 黒白 … 座標 1 に白点

743デフォルトの名無しさん2018/09/05(水) 23:39:34.25ID:PklssQfn
>>742
知ってるぞ。
ClearTypeはsubpixel技術で、中間色はsubcolor技術だ。
まあ2)GrayScaleAAの方が近いといえばそうだが。
> 2) Grayscale anti-aliasing
> https://en.wikipedia.org/wiki/ClearType

744デフォルトの名無しさん2018/09/06(木) 00:30:08.44ID:RM3Caylz
文字表示から離れればという気もするが

7457402018/09/06(木) 05:55:34.60ID:UQb09hzL
すまん、投稿が受け入れられたタイミングがマズくて
>>739 に対する反応みたいに並んでしもうた。
>>740>>739 の「マゼマゼする原理は同じ」に乗っかったネタ文だ。

R成分100%とB成分100%をマゼマゼして、HTMLの16進表記で#FF00FFの色を作ったら、
「そりゃ“マゼンタ”だよ、バカだねぇお前さんは」という想定(しかし破綻)。

746740 == 7452018/09/06(木) 06:16:09.23ID:UQb09hzL
もちろん「マゼマゼ」は >>738 だよ、引用アンカーを間違えるとは。
マゼマゼでダメダメ。再び「バカだねぇお前さんは」

747デフォルトの名無しさん2018/09/06(木) 09:31:52.28ID:/8o/0CpY
>>745
ん?俺は別に煽られたとは捉えてないし問題ないぞ。
そもそも話が通じないのは「抽象思考」が出来てないからだ。

三角関数で → 円も描ける、であって、(演繹)
円を描く為には → 三角関数、ではない。(暗記)

とはいえ適用する場合は大体お約束的だし、
大学入試なんて解けるように作ってあるのだから、「暗記」タイプでも努力すれば数学の点も上げられる。
しかしそれでは駄目なんだよ。意味がない。
そして小学生に三角関数を教えても「暗記」にしかならないから、その時点で教えるのはやはり間違っている。
> これ割るこれがsin (>>711)
これも、結局の所これ以外にどう表現しろと?という話だからね。

これが嫌だったのなら教育関係に就職して改革すべきだが、
実際ゆとり教育を先導した戦犯役人はこのタイプだった(はずな)ので救えない。
理解出来なかった奴が「俺が理解出来なかったから」という理由で主導するからおかしな事になる。
今現在の「プログラミング教育導入」もこれに近く、
そもそもプログラミングできない/やったこと無い奴らが主導してるから暴走してる。

三角関数なんて、円以外で適用される場合の方が多い。
それを過度に円に結びつけるのは数学としては間違っている。
単振動なんて、本来は円運動とは関係ないだろ。あれはma=kxの解がsinxだって話であって。
内積が|a||b|cosθになるのだって、円なんて全く関係ないし。
三角関数は、「偶々そういう関数を定義したら、何か知らんけど色々使える」であって、その見方だと
> これ割るこれがsin
になってしまう。これ以外に表現しようがない。
逆に、「宇宙の全ては円で出来ている」(なぜなら三角関数が適用出来る場合が多いから)
という捉え方も出来なくはないが、こっちの方がカルトだろ。
おそらく、数学の発達過程で他にも色々関数が定義されて、でも使えない物は淘汰されて、
結果的に今の三角関数だけが残ったのだと思うぜ。

748デフォルトの名無しさん2018/09/06(木) 09:33:21.82ID:/8o/0CpY
中間色/CoolType./AAも、俺にとっては「隣接するピクセルを用いて中間値を表現すること」で同じだ。
お前らはそれを
・フォントの場合
・色/ピクセルの場合
と別々に覚えてるから別物に見える。それはお前らの脳内が「暗記」ベースだからだよ。

暗記ベースでプログラミングの上達を目指すのは「デザインパターン」だ。
しかしこれも必要以上に細分化し、しかもJava文法が足りない点を必死で補っていたりで、
はっきり言ってポシャったろ。あれでは無理があるのさ。
勿論、「暗記」しかできない奴はいまだにそれにすがり続けているようだが。

ただ、実際の所、プログラミングは当然実装出来ると分かっている範囲で為されることが圧倒的に多いので、
「暗記」ベースの手法でもほぼ全ケースで何かしらの適用が出来、対応出来る。
だからそんなに問題にはならず、ある意味Javaプログラマが一定レベルまで順当に成長するのはこれがある。
ただ、「暗記」ベースだと、知らない事は発想出来ない。別物扱いだから。
中間色を「抽象思考」で捉えているのなら、
方向を変えて適用した結果がCoolTypeでありAAでしかなく、これらは自然に連結する。
この点がずいぶん違う。

749デフォルトの名無しさん2018/09/06(木) 09:34:16.38ID:/8o/0CpY
この点に於いて、「暗記」ベースの奴は文法リッチな言語、JavaやC++の方がいい。
というかな、プログラミングが上達する奴と全く上達しない奴が居て、
別段人間的に問題がある(全く努力をしてない)訳ではないのが不思議だったのだが、
今のところの俺の結論はこれだ。
「暗記」ベースの奴はCやJavaScript等の文法がスカスカな言語では上達しにくい。(上達出来ない)

文法リッチな言語だと、「この文法はこのときに使う」というやり方で、
「プログラミングパターン」を「暗記」で積み上げることが出来る。
(これは本来「デザインパターン」と呼ばれるべき物だが、
この用語は継承をこねくり回したゴミの呼称となってしまっているので、敢えて別に命名する)
だから、文法を一通り押さえれば、知識としてのプログラミングパターンを一定量積み上げることが出来、
結果、一定までは確実に上達するというわけだ。
Javaはこの手法で平均レベルのプログラマを大量確保出来ている。

ただし逆に、文法等の暗記事項に計上されてないと、彼等は上達出来ないので、過度に暗記にすがる。
これが今の「デザインパターン」の状態だ。必要以上に細分化し、また、無駄に増やし続けている。
彼等にとっては新規パターンの登録と暗記がすなわち上達であり、それ以外に方法がないからだ。
したがって、今後ともこの暴走は続く。

C++erで言えば、彼等は shared_ptr/unique_ptr/weak_ptr の使い方にはご執心だが、そこまでしか見えていない。
次に導入されようとしている observer_ptr については必要性も使い方も分かっておらず、理解も出来ない。
なぜなら、「暗記」出来るのはそれらが定義されて以降であり、
「暗記」では現在未定義の物を演繹的に作り出すことが出来ないからだ。
良くも悪くも、C++が文法リッチになる過程で、CerとC++erが自然発生的に分かれてきたのはこの辺だと思う。
Linusから見ると、C++の文法もデザインパターンと同様のゴミの山に見えているはず。
(JavaScriptなんて、たったあれだけの文法で、C++で表現出来る範囲を越えるのだから笑える)

750デフォルトの名無しさん2018/09/06(木) 09:35:06.90ID:/8o/0CpY
Cの場合には文法がスカスカだから、
ポインタで → 何でも出来る、とならないと上達しにくい。(演繹)
この場合は → shared_ptr、では無理だ。暴走出来ない。(暗記)
だから「暗記」ベースな奴は文法リッチな言語を選んだ方がいい。
(ただしポインタがあまりに汎用性がありすぎて最適化等に問題があり、
結果、他言語では色々制限を付けられてきたのはご存じの通り)

逆に「たったこれだけの文法で全て表現出来るなんてステキ」と思える奴は
CやJavaScript等の文法スカスカ言語の方が向いてる。
JavaScriptがゴミゴミ言われながらもここまで残っているのもこの点が大きい。
あれは使える奴が使ったら凄く使える言語だ。
ただ、今のJavaScriptプログラマの大半がゴミなのも事実だが。

Cの授業が全く無駄だ、という話も出所はここだ。
プログラミングなんて、結局、「代入、条件分岐、関数呼び出し、ループ」でしかなく、
ループですら代入と条件分岐で実装出来るのだから冗長だ。
一応チューリング完全であるbrainfuckは関数呼び出しすらないので、これも冗長とも言える。
そしてCの授業で行われるのはまさに「代入、条件分岐、関数呼び出し、ループ」だけであり、
これでどうやって初音ミクが歌って踊るのだ?と初心者には思えるだろう。
最終的にはGPUを介してVRAM上に代入(ラスタライズ)しているだけだとしても、
それが初心者に見えるはずもない。
(もっとも、今の3Dベースの2D《テクスチャとして貼ってるだけ》だと
ラスタライズ結果をVRAMに戻しているかも怪しいが)

ただ、MITがSICPを止めたのと同様、今時初心者がCをやる必要はない。
DrawLineで線が描ける、HTML出力したら絵が出る、で済む連中がCやるのが間違ってる。
逆に、デバイスドライバ等を書いたり、
計算機自体の専門家(HighPerformanceComputing)等を目指すならCは必修になる。

751デフォルトの名無しさん2018/09/06(木) 09:42:07.42ID:MYy5/YOc
量子化誤差の拡散!

752デフォルトの名無しさん2018/09/06(木) 09:50:36.43ID:2H4On29+
コードもだらだら書いてるんだろうなぁ

753デフォルトの名無しさん2018/09/06(木) 10:01:03.49ID:BRF//rri
メモリーリークについて質問です
プログラム終了時に残ってしまったものに関してはOSが解放してくれるから対処しなくていいと聞きました
今までデバッグしてメモリーリークが出ると無くなるまで結構あれこれやってたんですが全部無駄だったんでしょうか

754デフォルトの名無しさん2018/09/06(木) 10:10:29.24ID:2H4On29+
>>753
終了時には解放してもらえるけど、メモリリークしたままだと動き続けられないじゃん。
たまに再起動してもらうの?

755デフォルトの名無しさん2018/09/06(木) 10:21:17.68ID:BRF//rri
あーいや想定してるのはちょっとした処理を行って出力して落ちるだけのプログラムなんです
ループの中で何回もmallocしてメモリを食いつぶすとかそんなことも無くて、ただ終了時まで動的確保した変数が解放されてないみたいな
そういう状況でお願いします

756デフォルトの名無しさん2018/09/06(木) 10:37:52.78ID:2H4On29+
>>755
そういう限定的な条件では解放は省略するって方針もあるかもね。
終了パターンがいろいろあると解放するだけでも一苦労だったりするし。

ただせっかく作ったそのコードは制約が多く他には転用しづらかったりと資産としての価値は低いと思う。
そもそもデバッグでメモリリークを発見とか言ってるとなると、メモリの管理はしっかりしてて解放を省略していることも設計に入ってる、という状況ではないんじゃないの?
それはメモリを管理できてないってことじゃないのかな。
そんな場当たり的なことやってると大きなコード書けないよ。
メモリリークを潰させるのは、メモリを解放すること自体が目的というよりメモリを管理させる教育的な目的じゃないかね。

757デフォルトの名無しさん2018/09/06(木) 11:35:05.98ID:BRF//rri
いや教育というか、上司が作ったAPIを利用して機能作れって指示が出ててですね
そのAPIが上で説明したように変数解放しないままプログラム終了してたって状況です
んでこれいいんですかこうすれば治りますがみたいなこと言ったらいいんだ勝手に解放されるかと

ともあれそういう方針が有りだということは分かりました。どうもです

758デフォルトの名無しさん2018/09/06(木) 11:39:51.63ID:2H4On29+
上司を教育してやりたいなw

759デフォルトの名無しさん2018/09/06(木) 11:42:26.02ID:b42HI45e
ここに呼んできて

760デフォルトの名無しさん2018/09/06(木) 11:55:09.68ID:MYy5/YOc
>>753
プロセス終了するなら、無駄です。

761デフォルトの名無しさん2018/09/06(木) 12:07:29.83ID:NrF/VtsZ
そのAPIを流用するのは難しいな。
しないつもりなのかも知れないが。

まあしかしできればメモリリークしない方が良いな。
そのままだと常駐するプログラムのループの中で使えないし。

762デフォルトの名無しさん2018/09/06(木) 12:44:35.90ID:5MBNHP4w
>>757
上司の指示ならそのままにしとけばいい
メモリーリークしてもプロセス終了で解放されるから問題なし
って言う奴は一定数いて説得しても改心しないから放置しとくしかない
後々何かで事故った時のためにドキュメントに書いとけ

763デフォルトの名無しさん2018/09/06(木) 13:36:44.44ID:N1zpzsdE
たいていドキュメントは失われるので俺ならソースコメントに書いておくな。
「2018/09/06 メモリ解放してないので注意(先輩の指示で改修見送り)」

764デフォルトの名無しさん2018/09/06(木) 14:37:14.38ID:3QzfQDga
そりゃ、そういう状況では解放処理は抽象的な書き方にすべきなんですよ。
freeがなければ安心できないのって病気に近いよ。


lud20180906153756
このスレへの固定リンク: http://5chb.net/r/tech/1534430162/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「C言語なら俺に聞け 147 ->画像>6枚 」を見た人も見ています:
今期アニメ総合スレ 1247
C言語なら俺に聞け 150
ヒキなら新聞配達やろうぜ!Part-147
アイドルマスターシンデレラガールズ愚痴スレ(IDなし) 1847
comico 147
ソケット通信なら俺に任せろ
steamに関する質問なんでも答えます わからないことは俺に聞け
キャンプの事なら俺に聞け! [無断転載禁止]
NHK総合を常に実況し続けるスレ 147208 引きこもり支援
なんJVYouTuber部 1477
C言語なら俺に聞け 143
アイドルマスターシンデレラガールズ愚痴スレ(IDなし) 1647
Diners Club /// ダイナースクラブ 会員談話室 147
【LoL】League of Legends 1478LP【ipあり】
【LoL】League of Legends 1478LP【lPあり】
【Sガンロワ】スーパーガンダムロワイヤル Part.147
あかりちゃんなら俺にもチョコくれると思う
鉄血 ガエリオ・ボードウィンとその信者&松風雅也アンチスレ 147
【Rough】SixTONES 147ズドン【xXxxxx】
今期アニメ総合スレ 1477
NHK総合を常に実況し続けるスレ 147002 日テレ営業中
NHK総合を常に実況し続けるスレ 147138 ポーランドとコロンビアが勝つこと
■逃げ■星野源と新垣結衣の噂■恥■1147
Jざ 147
&#9724; 引きこもりの男が嫌いな喪女 147 &#9724;
芸能人の身長を推察するスレ part147
【画像】2147 [無断転載禁止]
C言語なら俺に聞け 149
C言語なら俺に聞け 151
今期アニメ総合スレ 1947
NHK総合を常に実況し続けるスレ 147277 残念でした
ゲームプログラムなら俺に聞け32
どのヘッドホンアンプ買えばいいかここで聞け47
なんJVYouTuber部 1347
【WoT】World of Tanks 1479
【この娘誰?】気楽に詳細を聞いてみるスレin半角147 [無断転載禁止]©bbspink.com
今期アニメ総合スレ 1479
【MHW】モンスターハンター:ワールド HR147
宇崎ちゃんは(´・ω・) カワイソス 山田ヲチスレ 1476
C言語なら俺に聞け 144
RED WING レッドウィング Part147
【WoT】World of Tanks 1347
■改竄なら俺にまかせろ(すが)■
THE NORTH FACE【ザ・ノースフェイス】147
岡山大学総合スレッド★147
NHK総合を常に実況し続けるスレ 147204 文月
なんJVYoutuber部 1047
Amazonに返品された商品の多くが廃棄処分となっていることが明らかに。いらないなら俺にくれよ
C言語なら俺に聞け 155
わたMeのなしすれ147 ほろらいぶ
パソコンのことなら何でも俺に聞け [無断転載禁止]
【COMITIA】コミティア&創作同人イベント147
韓国 文在寅、ついに検察を恫喝 『これ以上、俺の可愛いタマネギをいじめるなら俺にも考えがあるぞ』
【雑談】白猫プロジェクト 1471匹目
Jざつ 1347
Jざつ 1470
NoSQLならココで聞け!
嫌ポケモンGO部 ★147 [無断転載禁止]
今期アニメ総合スレ 1470
C言語を教えてください!!
C言語なら俺に聞け
艦これ愚痴スレ Part 1147
ドラマ今日から俺は!のヒロインに橋本環奈が決定
意味、発音的にかっこいい四字熟語ない?
arsざつだん147
03:47:07 up 28 days, 4:50, 0 users, load average: 147.44, 134.14, 137.22

in 0.29718399047852 sec @0.29718399047852@0b7 on 021017