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


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

C言語なら俺に聞け 152



1 名前:デフォルトの名無しさん [2019/06/17(月) 18:27:10.41 ID:3L1/L9kLa.net]
!extend:checked:vvvvv:1000:512
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
codepad.org/

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

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

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

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
※前スレ
C言語なら俺に聞け 151
https://mevius.5ch.net/test/read.cgi/tech/1554171817/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

2 名前:デフォルトの名無しさん mailto:sage [2019/06/17(月) 21:32:15.53 ID:6C3tyyZH0.net]
前スレ
https://mevius.5ch.net/test/read.cgi/tech/1554171817/945

> 928 名前: ◆QZaw55cn4c (ワッチョイ ba47-FGjx)[sage] 投稿日:2019/06/16(日) 13:35:27.88 ID:gDHKfsB60 [1/2]
> >>927
> 無指定でどうこう、というのは確か C89 までの話だったかと
> C99 では C++ と同じく省略しても void と記憶しています

> 945 名前: ◆QZaw55cn4c (ワッチョイ ba47-FGjx)[sage] 投稿日:2019/06/16(日) 21:15:12.39 ID:gDHKfsB60 [2/2]
> >>944
> 多分語義をわざわざ意識していないと思われ

そんなことはどうでもいい
C99でどうたらを早く説明しろ

 逃 げ ん な こ ら !

3 名前: mailto:sage [2019/06/17(月) 21:36:39.05 ID:mDiaA7dQ0.net]
>>2
ん?
今日はこちらに居ますよ、よろしかったら私の問題をぜひどうぞ
https://mevius.5ch.net/test/read.cgi/tech/1558168409/

4 名前:デフォルトの名無しさん [2019/06/18(火) 00:14:05.72 ID:4drhwQwf0.net]
えーと。ゲッターロボの話をしていたんだっけ?

5 名前:デフォルトの名無しさん [2019/06/18(火) 06:15:08.81 ID:3nOE2mBA0.net]
プログラム板にキチガイ降臨中!botに一晩も反応する異常さ
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
https://mevius.5ch.net/test/read.cgi/tech/1559872586/

142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。

6 名前:デフォルトの名無しさん mailto:sage [2019/06/18(火) 07:43:45.32 ID:EoNkeDzMa.net]
>>4
違うよ、ゲッターズ飯田の話だよ。

7 名前:デフォルトの名無しさん [2019/06/18(火) 11:36:59.75 ID:4drhwQwf0.net]
ゲッター(英語表記)getter
翻訳|getter

ブリタニカ国際大百科事典 小項目事典の解説
ゲッター
getter
真空装置内の残留気体を吸着しうる材料のことで,高真空を達成する目的に使用されるもの。固体で吸着作用を行わせるものを接触ゲッター,気体中に分散させて吸着させるものを分散または拡散ゲッターと呼んでいる。
ほとんどの金属は両方のゲッター作用をもっているが,トリウム,バナジウム,チタンなどは接触ゲッターとして,またカルシウム,マグネシウム,バリウムなどは分散ゲッター作用がおもに利用され,蒸着またはスパッタして用いられる。
真空管などの封じた系の真空度維持や,イオンポンプなどに利用されている。

8 名前:デフォルトの名無しさん [2019/06/18(火) 15:20:40.49 ID:oEueUArW0.net]
gccのmallocはdlmallocを元に作られているから
mallocを何度も使って小さな領域を沢山確保する場合にもパフォーマンスは
下がりませんか?

9 名前:デフォルトの名無しさん mailto:sage [2019/06/19(水) 02:34:24.10 ID:ZgdO+9arM.net]
>>8
推測するな計測せよ

10 名前:デフォルトの名無しさん [2019/06/19(水) 07:38:10.07 ID:vrDHbYoN0.net]
mallocを作るにはmmapつかえばいいの?
どうやるの?



11 名前:デフォルトの名無しさん mailto:sage [2019/06/19(水) 09:36:35.28 ID:nmMioiMa0.net]
>>10
まずは蟹炒飯本のmallocを実装して勉強する

12 名前:デフォルトの名無しさん [2019/06/19(水) 09:56:34.26 ID:8qBvJS/J0.net]
静的解析ツールはぬるぽとかメモリリークをどれくらい防げるものなの?

13 名前:デフォルトの名無しさん mailto:sage [2019/06/19(水) 10:09:33.60 ID:aZN2ypMKa.net]
ポインタが多階層にまたがって参照されるクソコード書かなければ、ほぼ見つけてくれるよ。
勉強になるから積極的に使った方がいいよ。

14 名前:デフォルトの名無しさん [2019/06/19(水) 11:35:55.89 ID:vrDHbYoN0.net]
>>11
カニチャーハンの本とは表紙がカニチャーハンの本のことか?
mmapはつかうのか?つかわないのか?
何を使うのかだでけも教えてちょ

15 名前:デフォルトの名無しさん mailto:sage [2019/06/19(水) 12:06:52.71 ID:hHOnGKPJa.net]
>>14
sbrk

16 名前: mailto:sage [2019/06/19(水) 19:23:38.95 ID:sgbXbKqu0.net]
>>13
静的解析ツールの定番はなんでしょうか?

17 名前:デフォルトの名無しさん mailto:sage [2019/06/19(水) 21:39:24.52 ID:2V8FHzvC0.net]
>>16
https://ja.m.wikipedia.org/wiki/静的コード解析
使ったことあるのはPGReliefとCoverity

18 名前:デフォルトの名無しさん [2019/06/23(日) 09:04:18.97 ID:6LMXkq2m0.net]
lintのポータビリティチェックはどれくらいポータブルにしてくれるものなの?

19 名前:デフォルトの名無しさん [2019/06/23(日) 10:44:43.88 ID:NJ0BedP7r.net]
演算に関する質問です。
8.21 * 5 = 41.050000000004←この4は何者でしょうか?
左の「8.21」が浮動小数点数、右の「5」は整数です。
演算の結果、制限の少ない型、すなわち浮動小数点数に変換されるのですが、
上記結果に示すように最後の4が何?不具合?
C言語の歴史は長いのに、こういう初歩的なミスをどうして今の今まで気づかず、放置したんですか。
これを契機に俺は浮動小数点数は使わないことにした。

20 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 10:49:35.98 ID:swNRnu090.net]
>>19
ネタか?
IEEE754を読んでこい。



21 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 11:00:21.67 ID:0CutuGif0.net]
そのような現象が起こるのはC言語の浮動小数点数に限った話ではない

基本的に0か1かの世界であるコンピュータがどうやって浮動小数点数を扱っているのか
その辺のことを考えながらすこし色々調べ直したほうが良い

正確な精度が必要なら浮動小数点数じゃなくて任意精度計算のライブラリを使いましょう

22 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 12:07:37.92 ID:LchWS7uN0.net]
マジモンのネタか
ホームラン級のアホか
それとも嵐か
第四の選択肢をもった世界初の偉人か

どれだ

23 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 12:20:26.35 ID:6tta8QXL0.net]
四次元空間の歪みが原因

24 名前:デフォルトの名無しさん [2019/06/23(日) 12:35:51.53 ID:NJ0BedP7r.net]
>>21
答えを教えてください。最後の4の正体はなんですか?初心者なので。

25 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 12:55:52.97 ID:0CutuGif0.net]
>>24
あなたがちゃんと>>20を調べたとは思えないので私は答えません。
調べているならちゃんと計算方法も出てくるし、本当にそうなるのか実際に自分の手で試してみようという気も起きると思います。
初心者だからこそ自分で調べて自分で計算してみてください。

26 名前:デフォルトの名無しさん [2019/06/23(日) 13:11:05.43 ID:WmqFlq0Wr.net]
>>25
スレタイにあるとおりC言語なら俺に聞けとあります。あなたは、その「俺」ではないのですか?なければやむを得ませんね。

27 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 13:19:19.31 ID:0CutuGif0.net]
ちなみにあなたの質問は「C言語」についての質問になっていません
「浮動小数点数を扱う規格」とそれを使った計算結果の質問です
なのでそもそもこのスレで答える筋合いがありません

28 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 13:38:06.54 ID:6tta8QXL0.net]
>>19
>8.21 * 5 = 41.050000000004←この4は何者でしょうか?

>8.21 * 5 = 41.050000000000004

コピペミスか?

29 名前:デフォルトの名無しさん [2019/06/23(日) 14:23:31.49 ID:WmqFlq0Wr.net]
>>28
コピペではありません。手入力です。0は重要ではありません。最後の4が曲者です

30 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 14:28:01.64 ID:q+spl44ja.net]
誰かと思ったら引数voidじゃん。



31 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 14:38:43.89 ID:6tta8QXL0.net]
手入力だったのかw
じゃあ犯人は君の右手だ

32 名前:デフォルトの名無しさん [2019/06/23(日) 14:55:34.65 ID:WmqFlq0Wr.net]
そもそもなぜ4でなく0で完結しないのか。0だと不都合があるのか、本質が議論されていないからいつまでたってても解決しませんよ。

33 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 15:22:02.08 ID:swNRnu090.net]
>>32
マジレスすると浮動小数点は内部で2^nの有限和でしか表現できないから(nはマイナスもあり)。
10進数に変換すると誤差が出る。
これで分からないなら諦めろ。

34 名前:デフォルトの名無しさん [2019/06/23(日) 15:27:27.16 ID:WmqFlq0Wr.net]
>>33
んむ、、。。

35 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 15:31:00.34 ID:6tta8QXL0.net]
桁数には頓着せずに見かけの数値に拘るって
どこかが変

36 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 15:31:16.28 ID:vVd52qKZ0.net]
>>32
答えは>>20で出ており、議論すべきことはなにも残っていない。
残っているのはお前さんが提示された情報をちゃんと調べて自分の頭で考えることだ。
それをした上でまた疑問が出たならそれを質問すればいい。

37 名前:デフォルトの名無しさん [2019/06/23(日) 15:36:12.25 ID:WmqFlq0Wr.net]
>>35
手入力で適当に0埋めたからヒューマンエラーがあってしかるべき。だからおかしくない。

38 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 16:21:26.48 ID:lZwOGhs8a.net]
>>37
ゲッターの話はもういいの?

39 名前:デフォルトの名無しさん [2019/06/23(日) 16:24:54.10 ID:QCIWb8Wa0.net]
0.821を=a/2+b/4+c/8+....ってやってみて
出てきたabcd.....を5倍すると最後が4になるってことだよ

40 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 16:48:18.15 ID:x5yyaGlX0.net]
マジレスできるが、おまえの態度が気に入らない



41 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 17:35:42.12 ID:2hTCNg/0M.net]
このレベルの質問者に対して、ieee754読んでこいおしまいも、そうとうどうにかしてる

42 名前:蟻人間 mailto:sage [2019/06/23(日) 17:39:16.12 ID:/bRV2XXvd.net]
基本情報の範囲でしょ。勉強不足。

43 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 17:50:45.53 ID:6tta8QXL0.net]
質問自体がネタにしか思えないからなあ

44 名前:デフォルトの名無しさん [2019/06/23(日) 18:04:53.73 ID:RHMsicrzr.net]
>>42
申し訳ありません。最初にコメントした通り初心者なもんでして。
1000人の初心者に対して同じ質問しても1000人とも答えられないでしょう。だから恥じらいとかないんです。

45 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 18:09:08.51 ID:6tta8QXL0.net]
>>44
回答してもらって納得するよりも、
自分でやる方が遙かに勉強になる
ヒントだけ書いておこう

数値の内部表現を調べて、演算仮定を追いかけ
計算結果の内部表現を見て、それを10進表示に戻す

以上を追いかけていけば自ずと回答がでる

46 名前:デフォルトの名無しさん mailto:sage [2019/06/23(日) 18:17:35.42 ID:CFRhe1LU0.net]
>>41
今時ググればいくらでも情報あるから自分で調べる気があるならキーワードだけで充分だろ

47 名前:デフォルトの名無しさん [2019/06/23(日) 18:18:38.46 ID:QCIWb8Wa0.net]
みんなこの質問に答えると中出しセックスできると本心では思っているからなかなかおしえてくれないよな
中出しセックスができなくなるアニメとかゲームとかパソコンの質問は簡単に教えてもらえるよ

48 名前:デフォルトの名無しさん [2019/06/24(月) 00:03:38.49 ID:JSF3ka2M0.net]
>>19
普通はCは浮動小数点を内部で2進数で扱っているため。
10進数で歯切れのよい数でも2進数では循環小数になったりして割り切れない値になることがある(例えば10進数で 0.1 は2進数では 0.00110011...という循環小数になる)。そうなるとどうしても10進数文字列への変換で近似値にしか変換できない。

では最初から内部も全て10進数で全て計算すれば良いではないかと思うかも知れないが、それではコンピュータ内部での計算が遅くなる。
遅くなってでも正確さが必用とされるお金の計算等はそれ用のコンパイラまたはライブラリを使用して実現する(あるいはC言語ではないそれ用に設計された言語を使う)。
デフォルトではCは誤差が出てもいいから素早く計算出来る状態になっていると考えて良い。

49 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 01:06:30.65 ID:zV4JNsEga.net]
cでデシマル型ってあんの?

50 名前:蟻人間 mailto:sage [2019/06/24(月) 03:15:28.63 ID:eqHVB1zL0.net]
ない。



51 名前:18 [2019/06/24(月) 05:23:21.67 ID:218UFAwP0.net]
home.a00.itscom.net/hatada/c-tips/lint01.html
こういうものでチェックしたら完全にクロスプラットフォームになるの?
ifdefとかなしで?

52 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 07:23:45.27 ID:zxVE+D4VM.net]
>>48
> では最初から内部も全て10進数で全て計算すれば良いではないかと思うかも知れないが、それではコンピュータ内部での計算が遅くなる。
それ以前に1/3ってやられたら同じことになる
10進数だと内部形式と外部形式で変換誤差が出ないだけで計算にまで言及したら10進数も2進数も同じだよ

53 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 09:50:57.10 ID:Ih+U6NjR0.net]
要は有効桁数を意識してりゃいいんだよ
それ以上の制度が欲しいなら専用ライブラリ使えばいい

54 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 11:14:12.23 ID:UiRTkeqO0.net]
2進数で計算する方が悪い
ちゃんと10進数で計算するライブラリを使え

55 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 12:10:10.27 ID:K2wdCfDba.net]
>>54
53の言ってる意味わからんでしょ

56 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 12:34:02.56 ID:yt8SVBnP0.net]
>>49
www.open-std.org/JTC1/SC22/wg14/www/docs/n1312.pdf

57 名前:デフォルトの名無しさん [2019/06/24(月) 12:50:07.91 ID:6xXOOyfaa.net]
>>52
そうだね。

>>53
そういう事だな。

58 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 13:01:39.05 ID:KbxaxfSBM.net]
有理数で計算するライブラリを使えばいい。
パイ?何それおっぱいのこと?

59 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 13:12:08.72 ID:BrGul7Md0.net]
有理数計算は実装してみれば分かるが圧倒的に遅いからな

無理数はどうやって実装するのか知らん

60 名前:デフォルトの名無しさん [2019/06/24(月) 15:14:23.48 ID:KYWI3ygZ0.net]
有理数で計算したあと最後に無理数に直すところで一番最後が4になったらどうするんだよ



61 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 15:23:01.79 ID:HSUghupZx.net]
>>60
4を引けばいいじゃない。

62 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 15:23:13.21 ID:zV4JNsEga.net]
無理数って円周率とかeだろ?
違ったっけ?

63 名前:デフォルトの名無しさん [2019/06/24(月) 15:30:42.35 ID:KYWI3ygZ0.net]
有理数じゃなければ無理数だろ

64 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 16:31:31.15 ID:Ih+U6NjR0.net]
メモリが有限である限り無理数を厳密に表現するのは不可能だよ

65 名前:デフォルトの名無しさん [2019/06/24(月) 16:33:17.68 ID:218UFAwP0.net]
C言語でWebAssemblyできるみたいだけど
ハードウェアに近いとこでもなければC言語は使わないほうが良いイメージだけど
実際WebAssembly的にCはどうなんだろうか?

66 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 16:44:03.34 ID:T0z2fm5aa.net]
>>64
数値演算に拘ならければ数式処理でπはπ、√2は√2のままで計算できるだろ。

67 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 16:50:34.10 ID:Ih+U6NjR0.net]
>>66
だから「厳密に」って言ってるじゃん
πは14桁で事足りるし31兆行も必要ないからね

68 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 16:52:25.55 ID:Ih+U6NjR0.net]
>>67
31兆桁ね

69 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 16:58:47.67 ID:Vk3kXnxv0.net]
> πは14桁で事足りるし
ぐるぐる回転するとだんだんずれてくる

70 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 17:08:19.82 ID:Ih+U6NjR0.net]
>>69
なら必要な精度だせばいいじゃん



71 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 17:09:23.06 ID:T0z2fm5aa.net]
>>67
いや、そうではなくて数式処理ならメモリ有限でも厳密に表現できるんだけど。
なんか俺変なこと言ってる?もしかして議論噛み合ってない?

72 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 17:13:52.11 ID:Ih+U6NjR0.net]
>>71
πはπとして表現するってことね
そりゃそうだよね

73 名前:デフォルトの名無しさん [2019/06/24(月) 17:15:00.84 ID:KYWI3ygZ0.net]
>>71
数式でいいなら紙に数式を書けばそれが答えじゃないのか?

74 名前:デフォルトの名無しさん [2019/06/24(月) 17:18:50.20 ID:KYWI3ygZ0.net]
でもpiを1として考えたら1が1/piになるんじゃないのか?

75 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 17:25:35.31 ID:T0z2fm5aa.net]
>>73
そりゃ紙に書いて数式演算って言い始めたら数値演算も紙の上でできるでしょ。
俺の言ってるのはMathmaticaのような数式処理。

76 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 17:32:02.39 ID:3Q+jRQuy0.net]
建築設計や土木設計の時の数量計算なら、数字を出さないといけませんよ

77 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 17:34:05.13 ID:S0Qqu87l0.net]
最終的に望む精度で出せばいいだけでは

78 名前:デフォルトの名無しさん [2019/06/24(月) 17:34:44.59 ID:KYWI3ygZ0.net]
>>75
じゃあはじめから紙でいいだろ

79 名前:デフォルトの名無しさん [2019/06/24(月) 17:37:46.46 ID:KYWI3ygZ0.net]
紙が足りなくなってきたら最初の方から消しゴムで消していけばいいだけだからいつかは書き終わるだろう

80 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 17:47:35.39 ID:Ih+U6NjR0.net]
半径5の円の面積求めなさいって言われて
78.5... と数値として答えるか 5^2*pi と数式で答えるか
俺は数値の精度の話をしてたんだよ



81 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 17:53:40.54 ID:HRlrDhQRa.net]
数値にしたら負けだよな

82 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 17:55:12.54 ID:7zvW/rVQ0.net]
BCDコードは流行りませんか?

83 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 18:08:31.47 ID:BrGul7Md0.net]
有理数を実装すればいかなる整数m, n に対しても m / n * n がきちんと m に戻る
(decimal型でも普通無理)
同じようなことを無理数でやる方法がわからんって話よ

無理数が厳密に数値化できないなんて誰でも知ってる話はせんわ

84 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 18:30:26.02 ID:Ih+U6NjR0.net]
>>83
現実問題としてそんな厳密解は必要がないってことだよ
だから数値の精度の話したんだけどな
NASAはπ15桁で軌道計算して誤差は約12cmだってよ

85 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 18:34:28.07 ID:BrGul7Md0.net]
>>84
「そんな厳密解は必要がない」ってのはお前の信条だろ
お前の信条を話に混ぜられても困る

86 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 18:37:48.29 ID:Ih+U6NjR0.net]
>>85
どこに俺の信条があるんだよw
じゃあ何が問題なのか具体的に言ってみろよ

87 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 18:39:33.96 ID:BrGul7Md0.net]
>>86
俺「どうすれば実現すればいいのかわからない」
お前「そんなものは必要ない」

話になってない

88 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 18:40:08.00 ID:BrGul7Md0.net]
「どう実現すればいいのかわからない」だった

89 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 18:40:45.27 ID:Ih+U6NjR0.net]
>>87
何を実現したいのよ

90 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 18:42:33.59 ID:BrGul7Md0.net]
>>89
計算の中で無理数を無理数として処理したい

最後に数値化したいならそのときの誤差だけは許容する



91 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 18:43:40.86 ID:Ih+U6NjR0.net]
>>90
じゃあ数式処理でいいじゃんw

92 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 18:46:56.46 ID:BrGul7Md0.net]
>>91
その数式処理をどうやるのか知らないって話なんだが

93 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 18:48:23.44 ID:Ih+U6NjR0.net]
>>92
>>75が言ってるじゃん
Mathmaticaでも使えば?

94 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 18:50:18.95 ID:DSBJ/2Do0.net]
Mathmatica 的に数式処理したいならそういうパーサーを書いてだな…
解析解が求まるといいですね (lol

95 名前:蟻人間 mailto:sage [2019/06/24(月) 18:50:43.29 ID:oK/rIQPyd.net]
C++ 数式処理ライブラリ
で検索。

96 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 18:51:36.46 ID:BrGul7Md0.net]
>>93
Mathmaticaいくらすると思ってんだよ…

97 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 18:53:18.44 ID:BrGul7Md0.net]
そもそもどう処理してるのか興味があるだけなんだがな
OSS漁ればあるかな

98 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 18:53:43.02 ID:Ih+U6NjR0.net]
>>96
じゃあお前が書けw
お前ならできる

99 名前:デフォルトの名無しさん [2019/06/24(月) 19:07:01.18 ID:KYWI3ygZ0.net]
「数式処理ソフト」と紙に書けばいいんじゃないのか?

100 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 19:23:05.36 ID:T0z2fm5aa.net]
>>80
やっぱり議論が噛み合ってなかったね。
俺は厳密解の話してたわ。
無理数が有限メモリで表現できないからの数式処理なら表せられるの流れだったのでまさか数値解の話で止まってるとは思わなかった。



101 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 19:26:15.32 ID:6eeWUnLH0.net]
「計算のステップごとに増えてく誤差の蓄積」と、
「最後に(それまで記号的に扱うことで保留していた)
無理数や無限小数を実際の数値に直す際の誤差」と、
話がゴッチャになってるでしょ。

102 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 19:27:51.25 ID:Ih+U6NjR0.net]
>>100
数式で表現できるのは当たり前だし
そんな当たり前の話されてもって感じだったわ

103 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 19:29:37.69 ID:3Q+jRQuy0.net]
ここはC言語のスレですよ
数式処理スレじゃないです

104 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 19:33:07.57 ID:T0z2fm5aa.net]
>>102
なら最初からそう書けばいいのに、何で数値解にこだわったの?俺は最初からこだわらなければと書いてるけど?

105 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 19:35:48.83 ID:3Q+jRQuy0.net]
C言語で扱えるのは数値解でしょ
それ以外はスレ違いのテーマ

106 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 19:38:12.07 ID:Ih+U6NjR0.net]
>>104
こだわりなんてないけどね
πは数式でπと表現するなんて当たり前だから
当然、無理数の数値表現の話だと思っただけだよ

107 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 19:40:21.01 ID:Ih+U6NjR0.net]
>>105
その通りだね

108 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 19:44:36.26 ID:rEOVCAEx0.net]
>>106
無理数を有限の有理数表現するなんて、議論するまでもないじゃんw

>>105
そだね、俺はMahmaticaのような数値処理をC言語で実装すれば無理数も有限メモリで扱えるよ、と言いたかったんだが、議論がスレチになったのでもうやめます。

109 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 19:47:11.95 ID:Ih+U6NjR0.net]
>>108
その当たり前を分かってないからこうなってるじゃんw

110 名前: mailto:sage [2019/06/24(月) 19:49:56.29 ID:SbfV+wvC0.net]
>>51
lint 前提のコードは、変てこなキャストとかが多用されているので、私は好きくない
(void)fclose(fp);
とか



111 名前: mailto:sage [2019/06/24(月) 19:54:09.43 ID:SbfV+wvC0.net]
多桁長演算は、私もすごく欲しくて遂には C++ で書いてみました
これさえあれば、有理数ライブラリもすぐに書けるでしょう
https://mevius.5ch.net/test/read.cgi/tech/1434079972/51

無理数は無理ですが

112 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 19:56:21.02 ID:rEOVCAEx0.net]
>>109
ま、ここではよくあるコミニュケーションエラーだったね。
建設的な議論になりそうにないので、もうやめとこ。

俺は数式処理にMathmaticaしか使ったことないけど、オープンソースでMaximaってソフトあるね。
どういう実装になってるのか今度見てみよう。

113 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 19:58:51.26 ID:zV4JNsEga.net]
数式処理はコンパイラ書くのと同じですよ。
記号操作なんだから、ある意味コンピュータの仕事の本質です。数値よりも。

114 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 20:00:22.77 ID:zV4JNsEga.net]
あと、mathematicaは任意桁の誤差なしの数値計算もできるけど、そっちはGNUのライブラリ使ってたのではないかと。

115 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 20:07:45.26 ID:Ih+U6NjR0.net]
Axiomってのもソース読めるな
探せば色々でてくる

パーサ書くなら昔はlexとyaccが定番だったけど今は何使ってるのかね

116 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 20:09:05.85 ID:zxVE+D4VM.net]
>>109
いや、わかってないのはお前
そもそも数式処理って最後に数値なんか出さないし
大学で(一般教養としての)数学やってないの?

117 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 20:12:05.34 ID:Ih+U6NjR0.net]
>>116
ああ、わかったわかったw
後出し多くて疲れるわw

118 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 20:14:52.08 ID:rEOVCAEx0.net]
>>115
俺はむしろ数式処理はPrologのようなパターンマッチングやってると勝手に思ってる。
知らんけど。

119 名前:デフォルトの名無しさん mailto:sage [2019/06/24(月) 21:54:22.85 ID:f0ou4boT0.net]
>>117
えっ、後出し?
マジで>>66の言ってることを理解できてなかったのかよ…
もしかして入試問題が「直径1cmの円の面積を求めよ、ただしπは3と仮定する」みたいな学校にしか入れなかったのか?w

120 名前: mailto:sage [2019/06/25(火) 01:19:55.45 ID:eaNcyZwN0.net]
πの定義って本当は難しいではないかと考えるようになりました…



121 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 01:28:22.57 ID:uTzXwYL5M.net]
定義そのものは単純
円の直径と円周の長さの比

122 名前: mailto:sage [2019/06/25(火) 01:34:45.27 ID:eaNcyZwN0.net]
>>121
円周の長さって曲線ですよね
曲線の長さ…んー、曲がっているのに長さ?
「円周の長さが存在すると仮定したら」円の直径と円周の長さの比である、なら理解できなくもないのですけれども

123 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 01:51:31.50 ID:9pz2xub80.net]
え?

124 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 02:12:37.49 ID:F7MMtx7f0.net]
>>122
もうC言語に関係のない話題なんだから黙ってろよ

125 名前:デフォルトの名無しさん [2019/06/25(火) 03:38:38.87 ID:t3KmtNcy0.net]
えーと、>>19から延々と話が続いてんのかな?

126 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 03:58:09.25 ID:XPL9ybbga.net]
引数にvoidを指定したときから続いてる

127 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 06:03:41.53 ID:JYAeHTmF0.net]
>>64
いや可能だよ
おまえさんがそう発言しているのは
有限のメモリを使って表示されている電子教材に厳密な定義が書いてあるからだ
それはおそらく自然言語で書かれたものだろうがCに翻訳するのはおまえさんの仕事だ

128 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 15:14:34.88 ID:9pz2xub80.net]
ホラーだなw

129 名前:デフォルトの名無しさん [2019/06/25(火) 16:03:33.62 ID:AVCUyi6k0.net]
いま気づいたんだけどgccの拡張使えばC++のテンプレート的なことできるな

130 名前:デフォルトの名無しさん [2019/06/25(火) 16:10:30.14 ID:AwR7wU0da.net]
素直にg++を使えばいいような・・・



131 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 16:24:43.72 ID:Z38gwzpf0.net]
>>129
させねーよ・・・

132 名前:デフォルトの名無しさん [2019/06/25(火) 16:35:26.91 ID:AVCUyi6k0.net]
>>131
どいうこと?

133 名前:デフォルトの名無しさん [2019/06/26(水) 02:05:22.90 ID:alD8Bem60.net]
このMSの新コンソールのデモビデオ
https://youtu.be/8gw0rXPMMPE

編集してるのは C のソースのように見えるけど
"<=" を "≦" に変えたり、"==" を "=" にしたりとか何の冗談だろう
それとも本当に こういう文字も OK になるのか?
オレが知らないだけで すでに OK なのか?

134 名前:デフォルトの名無しさん mailto:sage [2019/06/26(水) 02:17:04.58 ID:dK4c3UqUM.net]
お前が知らないだけ

135 名前:デフォルトの名無しさん mailto:sage [2019/06/26(水) 02:19:08.09 ID:dK4c3UqUM.net]
リガチャでググれ

136 名前:デフォルトの名無しさん mailto:sage [2019/06/26(水) 02:38:59.73 ID:alD8Bem60.net]
>>134-135
ググった。どうも
Unicode のリガチャ? とすると見かけだけではなくて、ファイルに格納したときの文字コードも
変わるってこと?
ていうか最近の C コンパイラはそれを認識するのか?

137 名前:デフォルトの名無しさん mailto:sage [2019/06/26(水) 03:00:34.30 ID:alD8Bem60.net]
>>136
自己れす
考えるに、やはり見かけだけのことだな
CSS のスタイル指定と同じことをやってると

138 名前:デフォルトの名無しさん [2019/06/26(水) 05:32:18.41 ID:vCLnuco30.net]
fira codeっていうのがあってな
emacsでもつかえる

139 名前:デフォルトの名無しさん mailto:sage [2019/06/26(水) 11:01:02.69 ID:kpnHwXwW0.net]
行書体フォントは合字で見映えを変えてるだけだな

嵯峨本フォント公開 - Togetter
https://togetter.com/li/691328

140 名前:デフォルトの名無しさん mailto:sage [2019/06/27(木) 18:52:32.86 ID:tbUThdPVa.net]
>>64

3.1415926535897... ≒ 3.14

これだけの話



141 名前:デフォルトの名無しさん mailto:sage [2019/06/27(木) 19:26:18.86 ID:fhoZJ8gK0.net]
>>96
raspberry piからなら無料で使える
raspberry pi 4も3日くらいまえに発売された

142 名前:デフォルトの名無しさん [2019/06/27(木) 21:23:07.41 ID:tw9eT+4Xa.net]
およそ3

143 名前:デフォルトの名無しさん [2019/06/27(木) 22:09:24.03 ID:E9QSvqb40.net]
C11を使っています。

#include <stdbool.h>

void main( void)
{
int cnt = 0;
bool hoge = false;

while( !hoge){
if( cnt++ >= 10) hoge = true;
}

このような感じのコードを実行したところ、ループから抜けません。
stdbool.hにはtrueが1と定義されているので、10回ループを回ると
while(!1)と同じ状態になると思います。

これはfalseと等価とは扱われないのですか?

144 名前:デフォルトの名無しさん mailto:sage [2019/06/27(木) 22:17:33.62 ID:xVmqmc55a.net]
C11とは

145 名前: mailto:sage [2019/06/27(木) 22:18:44.31 ID:xOvGlzCg0.net]
>>143
私の手元で実行するとループを抜けています
https://ideone.com/1uEulv

146 名前:143 mailto:sage [2019/06/27(木) 22:22:52.82 ID:E9QSvqb40.net]
>>145
そうですか・・・
TrueSTUDIO for STM32のコンパイラはgccじゃないかと思うのですが、
何か違うのかもしれません

147 名前:蟻人間 mailto:sage [2019/06/27(木) 22:23:58.00 ID:PK9sLC9K0.net]
あまり一般的じゃないコンパイラだね。バグか。

148 名前:デフォルトの名無しさん mailto:sage [2019/06/27(木) 22:36:05.09 ID:xVmqmc55a.net]
!!!hageとかすると動くんでしょうね

149 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 09:20:40.61 ID:aeC7bTCc0.net]
>>144
まさか知らんのか?
ISO/IEC9899:2011のことだよ
ISO/IEC9899:2018が現行規格で、
それの1個前の旧規格だ

・・・またおかしいことになってるな
ISO/IEC9899:1990がC89なのと同様
ISO/IEC9899:2018がC17だ

150 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 09:29:32.78 ID:1Q6Ak4jma.net]
>>149
C11を使ってます、で意味が通じたということ?
あと引数にvoidがあるけど、大丈夫だった?



151 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 09:46:32.88 ID:apo2D6tyx.net]
>>143
何か変な最適化されてるのかな?
逆アセンブラ見てみたいね。

152 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 11:05:29.15 ID:BZSAOrWQ0.net]
hoge は不変とみなしてループ外に追い出すような類推が働いてしまうコードっぽくないのに
true との比較ではなく !hoge だから間違いもおこさない形式だし

153 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 12:18:07.65 ID:T5ABk70zM.net]
そもそもこのループは最適化で1行も生成されてないと推測。
んで何かの勘違いで抜けてないと思ってしまったと予想。

154 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 12:24:53.76 ID:xv7yRtbc0.net]
gccの -std=c11 -O0 でやったら終了した

155 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 12:52:11.88 ID:aeC7bTCc0.net]
>>148

 
                 ノ
          彡 ノ
        ノ
     ノノ   ミ
   〆⌒ ヽ彡     
   (´・ω・`) 

156 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 12:54:28.02 ID:6cUEPi280.net]
if文の中を hoge == true とタイプミスしているとか

157 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 13:12:10.56 ID:aeC7bTCc0.net]
>>143
      str      fp, [sp, #-4]!
      add      fp, sp, #0
      sub      sp, sp, #12
      mov      r3, #0
      str      r3, [fp, #-8]
      mov      r3, #0
      strb      r3, [fp, #-9]
      b      .L2
.L3:
      ldr      r3, [fp, #-8]
      add      r2, r3, #1
      str      r2, [fp, #-8]
      cmp      r3, #9
      ble      .L2
      mov      r3, #1
      strb      r3, [fp, #-9]
.L2:
      ldrb      r3, [fp, #-9]
      eor      r3, r3, #1
      and      r3, r3, #255
      cmp      r3, #0
      bne      .L3
      nop
      add      sp, fp, #0
      @ sp needed
      ldr      fp, [sp], #4
      bx      lr
問題なさそうだが、本当に抜けなくなったのか?

158 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 13:22:10.14 ID:j6O/VBH7M.net]
そのコードはx86 じゃないの?
STM32用の開発ツールらしいしARMのコードを吐くコンパイラだろ

159 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 16:31:54.35 ID:aeC7bTCc0.net]
おまえさん、x86のレジスタ名は知ってるか?

160 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 16:42:37.66 ID:BZSAOrWQ0.net]
疑いだしたらきりがないけど
>このような感じのコード
と言ってるあたり、このコードが100%再現する最小コードではない可能性もあるということだろうか?

擬似的に if( cnt++ >= 10) hoge = true; と書いてるけど
実情は割り込みや別スレッドかなんかで hoge を書き換えてたりとかさ



161 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 17:40:23.39 ID:F+VtS9/i0.net]
へんな動きしたらデカい配列作ってスタック破壊してないか疑う。
アセンブラ使てたらショートジャンプで128バイト以上離れてるラベル指定してないかとかも。
16/32bit時代のことですが。

162 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 18:37:17.90 ID:tgbP+JHV0.net]
スタック破壊は高確率でリターンアドレス壊して暴走(coreダンプとか例外とか)が発生するので発生しちゃえば案外すぐに分かる。

163 名前:デフォルトの名無しさん [2019/06/28(金) 19:29:54.68 ID:k4pW0x/X0.net]
ポインタは値と参照どちらですか?
f(&v);みたいにポインタを渡す事を参照渡しと呼ぶのは妥当ですか?

ポインタをインクリメントしたりアドレス計算に使う場合があるから
値っぽい気もしますよね

164 名前:デフォルトの名無しさん [2019/06/28(金) 19:32:57.11 ID:k4pW0x/X0.net]
「C言語は数値でアドレス指定してデータにアクセスする能力を持つ言語だ」
と捉えて、ポインタ渡しはあくまで値渡しと捉えるのも妥当そうじゃないですか?

165 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 19:41:54.17 ID:gZBVzR2k0.net]
そういう認識ができてるなら十分だな
その値から指し先が示す実体を引っ張ってこれるってだけで
関数のインターフェースとしては値を渡してる

C言語ではできないが
int a = 0;
foo(a);
呼び出した結果 a の値が書き換わって戻ってくる
っていう渡り方があって、そっちを参照渡しって呼ぶし

166 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 20:38:41.57 ID:TwLtdi9D0.net]
「C言語に参照渡しは無い」という理解でよくね?

167 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 20:56:34.47 ID:tgbP+JHV0.net]
そういう意味では全ての言語は参照または値を表記の違いこそあれ何かの値を渡してるわな。
「参照のための値(アドレス)を渡している」という意味において、C言語もまた参照渡しのある言語になるんじゃない?

168 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 21:07:11.36 ID:1Q6Ak4jma.net]
違います。

169 名前:デフォルトの名無しさん [2019/06/28(金) 21:13:05.54 ID:ASw3jrNxa.net]
Cに参照はないが、ポインタ経由のアクセスを参照だと脳内定義するなら参照ということにはなる。
ただC++は参照もポインタ経由のアクセスも両方使えるようになってるので後でC++やろうとすると混乱するかもね。

170 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 21:16:07.88 ID:lanM6mt5d.net]
先輩「〜〜」
新人「なるほど、つまり参照渡しですね」
先輩「違います」
新人「オオ…オ……オ……」

そして新人はIT業界を去ったのであった



171 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 21:38:39.85 ID:TwLtdi9D0.net]
ポインタを特別扱いする必要とか無いがな

172 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 21:38:47.78 ID:DEsb2BLF0.net]
C言語の場合は素直にアドレス渡しで良いと思う
紛らわしい用語使うとかえって混乱するだけ

173 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 22:56:11.75 ID:K80D90id0.net]
先輩「〜〜」
新人「なるほど、つまり参照渡しですね」
先輩「まあそうだね」
新人「なるほど理解しました」

優しい世界

174 名前:デフォルトの名無しさん mailto:sage [2019/06/28(金) 23:31:41.66 ID:TwLtdi9D0.net]
そして姑息な優しさによりC++の参照で混乱する

175 名前:デフォルトの名無しさん mailto:sage [2019/06/29(土) 00:30:28.54 ID:kzB3RaMy0.net]
C++なんてクソ言語は回避すればいい

176 名前:デフォルトの名無しさん mailto:sage [2019/06/29(土) 00:57:44.40 ID:CfES0TXk0.net]
姑息じゃない先輩「〜〜」
新人「なるほど、つまり参照渡しですね」
姑息じゃない先輩「まあそうだね」
新人「なるほど理解しました」
姑息じゃない先輩「でもC++の時は注意が必要だよ。その時にまた質問してね。」

素晴らしい先輩

177 名前:デフォルトの名無しさん [2019/06/29(土) 01:04:38.27 ID:k/WM/TXw0.net]
Java は参照の筈なのにある日 NullPointerException を見て愕然とする。

178 名前:デフォルトの名無しさん mailto:sage [2019/06/29(土) 07:27:30.85 ID:HFXZY0WT0.net]
NullPointerException を見て愕然

「ぬるぽ」を見ると「ガッ!」と返されることの由来。

179 名前:デフォルトの名無しさん mailto:sage [2019/06/29(土) 17:54:21.19 ID:8z7l0ZZs0.net]
ポインタ?BASICのPEEK、POKE、CALL、DEF FN使ったことあるなら(ry

180 名前:デフォルトの名無しさん mailto:sage [2019/06/29(土) 18:15:02.25 ID:Ec0dmaS10.net]
>>179
DEF FNが全てのBASICにあると思うなよ。



181 名前:デフォルトの名無しさん mailto:sage [2019/06/29(土) 18:24:39.84 ID:0fRKmc/o0.net]
I/Oの何十ページもあるダンプリスト打ち込んでたなあ・・・

182 名前:デフォルトの名無しさん mailto:sage [2019/06/29(土) 18:28:11.52 ID:QwBwV953M.net]
かつて皆一度は通ってきた道

183 名前:デフォルトの名無しさん [2019/06/29(土) 18:58:28.75 ID:SkCg/0zJ0.net]
デバドラを作った事がないんだけど
C言語で作ったとして、
CPUやOSの違いに対してクロスプラットフォームなソースコードを作れるものなの?

184 名前:デフォルトの名無しさん mailto:sage [2019/06/29(土) 19:11:10.87 ID:KCwWGOZi0.net]
>>179
それを言うならDEF USRだな
富士通のやつ
CALLつーと早川電機か?

185 名前:デフォルトの名無しさん mailto:sage [2019/06/29(土) 19:12:21.23 ID:VF6wNxfU0.net]
クロスプラットフォームなデバイスドライバなんて見たことが無いんだけど存在するの?
デバイスにもよるんだろうけどインストーラが分けてあるイメージある

186 名前:デフォルトの名無しさん mailto:sage [2019/06/29(土) 19:15:54.19 ID:jvYtCUwd0.net]
この話題に付いてこれるのは50代より上

187 名前:デフォルトの名無しさん [2019/06/29(土) 19:24:10.90 ID:SkCg/0zJ0.net]
実行ファイルは環境毎でも
ソースコードは共通化されてるかもしれない

188 名前:デフォルトの名無しさん mailto:sage [2019/06/29(土) 19:45:16.95 ID:0fRKmc/o0.net]
早川電機ってw
何歳なんだよw

189 名前:デフォルトの名無しさん mailto:sage [2019/06/29(土) 19:46:57.93 ID:Ec0dmaS10.net]
>>183
そりゃ無理だ。
デバドラはデバドラでOS毎にお作法がちがう。
>>184
早川電機じゃオッサンでも分からんだろ(笑)
シャープと言えや。
確かにS-BASICにCALLはあったけども。

190 名前:デフォルトの名無しさん mailto:sage [2019/06/29(土) 19:57:31.13 ID:dqvciFo5a.net]
同じデバイスに対しては同じ様なプログラムになると思うぞ。



191 名前:デフォルトの名無しさん [2019/06/29(土) 20:13:31.33 ID:SkCg/0zJ0.net]
>>189
CPUの違いだけならクロスプラットフォームにできる?

192 名前:デフォルトの名無しさん [2019/06/29(土) 20:17:37.78 ID:VF6wNxfU0.net]
クロスプラットフォームの意味履き違えてない?

193 名前:デフォルトの名無しさん mailto:sage [2019/06/29(土) 20:26:03.44 ID:jvYtCUwd0.net]
東京通信工業なんて会社、知らないだろうな

194 名前:デフォルトの名無しさん [2019/06/29(土) 20:33:24.22 ID:SkCg/0zJ0.net]
間違えてはいないが単にその言葉が曖昧だ。
ifdef等を使わずにCPUの違いに対処できるCコードは書けるか?

195 名前:デフォルトの名無しさん mailto:sage [2019/06/29(土) 20:51:37.84 ID:Ec0dmaS10.net]
>>191
デバドラの種類によるかな?
ユーザモードドライバだけで済むような環境だとCPUが違ってもソースコードを共用できる可能性が高い。

196 名前:デフォルトの名無しさん mailto:sage [2019/06/29(土) 20:51:42.07 ID:dqvciFo5a.net]
>>194
プラットフォームの差を吸収するレイヤがありゃできるだろう。
普通のプログラムだってリンク時に解決してる部分がかなり大きいんだから。
Cで書いてる時点でそれなりに抽象度が高いと思うよ。

197 名前:デフォルトの名無しさん [2019/06/29(土) 21:58:02.57 ID:k/WM/TXw0.net]
>>195
Linux は結構共通になってない?ものにもよるか。

198 名前:デフォルトの名無しさん mailto:sage [2019/06/30(日) 21:20:05.21 ID:28buo1qB0.net]
PC-98、TWONS、AT互換機でDOSのファンクションコールしか使わないなら同じexeファイルが使えたと思った。

199 名前:デフォルトの名無しさん mailto:sage [2019/07/01(月) 00:10:17.16 ID:cUStBYS8a.net]
MSX-DOSとかCP/Mのプログラム動いたぜ。
Z80だし当たり前なんだけど驚いた。

200 名前:デフォルトの名無しさん mailto:sage [2019/07/04(木) 18:46:50.22 ID:RufwSseDM.net]
hoge.hというヘッダーファイルがシステムで使用可能ならインクルードして、ないならローカルに用意したものをインクルードしたい時はどうすればいいですか?
イメージはこんな感じです
if (exists("hoge.h")):
#include<hoge.h>
else:
#include"./src/hoge.h"



201 名前:デフォルトの名無しさん mailto:sage [2019/07/04(木) 18:59:45.02 ID:ead2oXvp0.net]
>>200
#if EXISTS_HOGE
#include <hoge.h>
#else
#include "./src/hoge.h"
#endif

コンパイラオプションで-DEXISTS_HOGE=1を指定するとシステムのヘッダをインクルードできる
これの欠点は手動で指定する必要があること
自動でやりたいならautotoolとかcmakeを使うしかない

202 名前:デフォルトの名無しさん mailto:sage [2019/07/04(木) 19:38:05.76 ID:j+BKfkH80.net]
>>200
includeパスの優先順位を利用するのじゃダメなの?

203 名前:デフォルトの名無しさん mailto:sage [2019/07/04(木) 19:40:09.58 ID:CiYpNsgja.net]
自分の hage.h を用意しとけば。名前何でもいいけど。
で、本物のhageのインクルードガードのマクロ定義をチェックすればいい。マクロがあればの話だけど。

204 名前:デフォルトの名無しさん mailto:sage [2019/07/04(木) 20:01:31.43 ID:DFmBoT0+d.net]
こっそり__has_include使えたりしないの?

205 名前:デフォルトの名無しさん mailto:sage [2019/07/04(木) 22:38:29.59 ID:YXLsgD0T0.net]
cmake便利だよな。これを覚えたせいで仕事を簡単に家に持って帰れるようになってしまったよ……

206 名前:デフォルトの名無しさん mailto:sage [2019/07/04(木) 23:09:00.36 ID:Dgm46w9S0.net]
社畜w

207 名前:デフォルトの名無しさん mailto:sage [2019/07/05(金) 07:37:58.54 ID:gYSYJWLY0.net]
ハッカータイプの人はそれが普通なんだよ
パンピーには解らないし解ってもらいたいとも思わない

208 名前:デフォルトの名無しさん mailto:sage [2019/07/05(金) 07:39:43.05 ID:RJCpPwwqa.net]
いわゆる暇プロタイプの人だな。

209 名前:デフォルトの名無しさん [2019/07/05(金) 10:42:30.79 ID:/9SntML6a.net]
タクシー運転手の趣味がドライブみたいなものだな。

210 名前:デフォルトの名無しさん mailto:sage [2019/07/05(金) 10:48:27.91 ID:V1OP8/TU0.net]
会社でマルウェア製造していたのか



211 名前:デフォルトの名無しさん [2019/07/05(金) 12:21:58.01 ID:/9SntML6a.net]
四角くてもマルウェア

212 名前:デフォルトの名無しさん mailto:sage [2019/07/05(金) 19:35:27.70 ID:cg54bwGhM.net]
山田く~ん

213 名前:デフォルトの名無しさん [2019/07/07(日) 01:12:52.69 ID:ibboI0jYa.net]
マ板化してる・・・

214 名前:デフォルトの名無しさん [2019/07/07(日) 12:35:21.67 ID:L+nDH+YyF.net]
>>163 >>167
ポインタと配列の違いを説明してみ

215 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 13:52:06.12 ID:rNUlAIMGM.net]
*p[]
(*p) []
**p
*(*p)

216 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 16:31:13.26 ID:hqXlVeni0.net]
>>214
ポインタは変数で4バイトのメモリ領域で、
配列は連続したメモリ領域?

int arr1[] = {1,2};
int arr2[] = {3,4};
arr1 = arr2;

がエラーになるから配列はポインタ変数とは明確に区別されてるみたいだが

217 名前:蟻人間 mailto:sage [2019/07/07(日) 16:40:40.99 ID:0lH1eUtNd.net]
16-bitのMS-DOSの時代だと2バイトのポインタがあったし、64ビットのCPUなら、8バイトもあり得る。

218 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 16:45:42.38 ID:YcHC3knN0.net]
また値渡し、ポインタ渡し、参照渡しは〜ってやるのか?

219 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 16:52:42.60 ID:21BbIGV/0.net]
> *(*p)

ああ、こいつ解ってないな

220 名前:デフォルトの名無しさん [2019/07/07(日) 18:03:14.45 ID:XjejoYnQ0.net]
>>219
それ顔文字っぽいよね。



221 名前:デフォルトの名無しさん [2019/07/07(日) 18:04:40.15 ID:XjejoYnQ0.net]
>>216
うちのポインタは8バイトだ。

222 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 19:09:15.76 ID:bN7H9WWH0.net]
配列はポインタのシンタックスシュガーでしかない
ポインタは何でも許されるが配列は操作が簡略化と同時に制限されてる

223 名前: mailto:sage [2019/07/07(日) 19:31:01.29 ID:wvjux2100.net]
>>222
配列名は定数扱いのポインタですね
しかし、配列だけに許される簡素化ってなんですか?

224 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 19:32:54.23 ID:bN7H9WWH0.net]
>>223
配列は宣言した瞬間に領域が確保されてるだろ

225 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 19:33:00.70 ID:SGQz+b0c0.net]
>>222
x[-1]、これも許されるんだよな

226 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 20:07:07.70 ID:OUCQisjNM.net]
int a[1];

int *a;
a=(int *)malloc(sizeof(int));
の違いって何?

227 名前:蟻人間 mailto:sage [2019/07/07(日) 20:12:27.77 ID:0lH1eUtNd.net]
>>226
前者はスタックか静的領域に確保される。後者はヒープに確保される。前者はスコープを抜けると自動で解放。後者は解放しないとメモリーリークする。

228 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 20:15:53.10 ID:OUCQisjNM.net]
>>227
ということは配列ってメモリのことよく分からない初心者プログラマ以外には無用の長物なん?
解放漏れの考慮以外でわざわざ配列使うメリットってあるの?

229 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 20:17:35.62 ID:bN7H9WWH0.net]
>>228
寧ろ配列で済むのにポインタを使う意味がないぞ

230 名前:蟻人間 mailto:sage [2019/07/07(日) 20:18:55.18 ID:JhpdhjN90.net]
>>228
繰り返し(iteration)の処理で連続データを処理・制御するときに配列がないと困る。



231 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 20:29:34.92 ID:OUCQisjNM.net]
>>229-230

int a[3];
for(int i=0;i<3;i++) a[i] = 0;

int *a;
a=(int *)malloc(sizeof(int * 3));
for(int i=0;i<3;i++) *(a+i) = 0;

これとこれだと違うの?
ポインタだとchar型の時とか文字列代入出来るし
上位互換な気がするんだけど。

232 名前:蟻人間 mailto:sage [2019/07/07(日) 20:32:06.26 ID:JhpdhjN90.net]
>>231
sizeof(int) * 3の間違い。
ヒープだと可能なかぎり自由に実行時にサイズを決められる。

233 名前:蟻人間 mailto:sage [2019/07/07(日) 20:34:52.90 ID:JhpdhjN90.net]
配列のサイズが決まるのはコンパイル時だ。

234 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 20:36:22.20 ID:bN7H9WWH0.net]
>>231
前者の方が簡潔だし
書かなくていい確保・開放処理は避けるものだ

パフォーマンスも配列の方が上

235 名前:デフォルトの名無しさん [2019/07/07(日) 20:36:48.46 ID:HZba7DSz0.net]
>>228
自分で書いたんだから分かると思うけど、言語構造の話でも>>226の場合は記述量で配列の方が楽だし、読む側もひと目でわかるじゃん。

236 名前:デフォルトの名無しさん [2019/07/07(日) 20:37:18.16 ID:HZba7DSz0.net]
かぶった

237 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 20:50:54.62 ID:OUCQisjNM.net]
じゃあ配列は、ポインタの一部機能を制限して使いやすさの向上を図ったものという認識でいいの?
それとも生まれも育ちも全く別の概念?

何か、今やってるcの教材が、まず最初に配列を使ってプログラム書いて、
次の章でポインタ出てきて、今まで配列使って書いた奴をポインタで書き変えろみたいな例題ばっかりだから
だったら最初から配列いらなくない?と思ってしまいました。

238 名前:蟻人間 mailto:sage [2019/07/07(日) 20:52:43.83 ID:JhpdhjN90.net]
実用的なプログラム書いてたら、そのうちわかる。心配要らない。

239 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 21:00:11.30 ID:OUCQisjNM.net]
分かりました。unionもわざわざこんなの使わずstruct使えばよくねって思うけどそういうもんだと今は思っときます。

240 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 22:02:44.50 ID:o4vR1s03a.net]
>>237
むしろ、何故ポインタが不要だと思わんのか謎だわ



241 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 22:15:20.04 ID:2f8BNWqD0.net]
なぜopenとfopenの二つのファイルアクセス手段が用意されているのか。

242 名前: mailto:sage [2019/07/07(日) 22:18:01.98 ID:wvjux2100.net]
>>241
open() は OS が提供するシステムコールそのもの
fopen() はライブラリ関数であり open() をラップして「使いやすくした」(本当か?)もの

243 名前:デフォルトの名無しさん [2019/07/07(日) 23:10:44.83 ID:XjejoYnQ0.net]
>>242
バッファっリングしてくれるとか、fprintf()もあったりしてテキストをフォーマットして出力するのも楽というのがある。

244 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 23:15:22.66 ID:o4vR1s03a.net]
Cライブラリとしてはfopenしかないわけだけど、正直あんまり便利じゃないよな。

245 名前: mailto:sage [2019/07/07(日) 23:16:29.46 ID:wvjux2100.net]
>>243
バッファリングはね…バッファリングは今は大部分 OS が抱いているものなんじゃないかな…アプリケーションが各々のユーザーランドに抱いていてメリットがあるのかな…

246 名前:デフォルトの名無しさん [2019/07/07(日) 23:34:13.80 ID:XjejoYnQ0.net]
>>245
ま、そうだけどね。Cってそういう今時のちゃんとしたOSのないところや完全にOSなし環境用のプログラム作るのにも使われるし、ああいうライブラリはあってもいいと思う。

まあしかしちょっと古くなった感はあるのでリニューアルしても良いんじゃないかとは思うけどね。てか、最低でも標準ライブラリなのにセキュリティーホール作ってしまうようなのは廃止した方が良いよな。

247 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 23:42:46.95 ID:sq3gNEgUd.net]
システムコール自体相当重いから、OS呼び出す回数減らすためのバッファリングだろ

248 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 23:47:08.94 ID:YcHC3knN0.net]
入出力バッファリングしてくれるファイルシステムなんてあるか?
ジャーナリングと勘違いしてるんだろ

249 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 23:54:40.74 ID:sq3gNEgUd.net]
しない方が珍しくね?
writeしたらディスク書き込み完了するまで次がブロックするとか?

250 名前:デフォルトの名無しさん mailto:sage [2019/07/07(日) 23:59:57.04 ID:YcHC3knN0.net]
それジャーナル制御の話だろ



251 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 00:13:01.27 ID:cSAl/tEC0.net]
バッファリングとキャッシュの区別が…。

252 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 00:15:59.34 ID:+tWapxmU0.net]
>>248>>245へのレスな
バッファリングはアプリの仕事

253 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 00:21:05.88 ID:G56xs+BGM.net]
>>240
char *str;
str = "abc\n";
が許されるから。
配列に文字列を代入出来ないのが不便

>>241
それ言うならfopenとfopen_sの方が意味分からんね
VS使ってたら書き換えろと警告出してくるわ、書き換えたら引数の取り方違うとかいうクソ仕様だし

254 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 00:29:20.86 ID:EniIIYRYa.net]
>>253
そりゃ、現実としてそういう建て付けになってんだから使うよ。
でも文字列だったら最初からもうちょっと抽象的な操作の方がいいわ。ポインタ使いたかったら&つけてもいいんだし。

255 名前:デフォルトの名無しさん [2019/07/08(月) 00:44:01.80 ID:YBWHLZTU0.net]
>>253
一応初期化の時だけ char s[] = "..."; って書き方できるけどね。これは初期化だけの特別な書き方だな。

256 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 01:20:48.92 ID:6nQUGxHg0.net]
OSによっては遅延書き込みってしているだろう

257 名前:デフォルトの名無しさん [2019/07/08(月) 02:05:54.23 ID:YBWHLZTU0.net]
やってるな。外付けのHDD付けた時なんかはするかしないか設定できたりして。

258 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 08:34:21.82 ID:IKtCR6xL0.net]
DOS時代、ディスクキャッシュはドライバーが必要だったな。

259 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 08:57:53.53 ID:YymrlAAVd.net]
str[9]="おはよう"
str[9]={'お','は','よ','う'}

こうやってまとめて配列に日本語を入れるのは出来るんだけど「お」、「は」、「よ」、「う」と一文字ずつ入れることって出来ますか?
英語ならstr[0]=…、str[1]=…って済むけど

260 名前:デフォルトの名無しさん [2019/07/08(月) 09:43:06.34 ID:tzeJFuHla.net]
>>259
> こうやってまとめて配列に日本語を入れるのは出来るんだけど

え?できる?

>「お」、「は」、「よ」、「う」と一文字ずつ入れることって出来ますか?

wchar_t 型を使ってL付けたらできないか?



261 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 09:53:54.58 ID:jiAfHW5M0.net]
要素数を明示してるので、文中の代入ではなく、初期化のときの話だろうとは予測できるが
「入れる」というのは、代入を連想させるので、うまい言い回しではないかもね

262 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 11:00:59.71 ID:sWBK4Oik0.net]
>>253
関係ないけどconst違反だね
そのケースだけ特別に見逃すことになってるけど

>>255
その書き方はK&Rでは静的記憶域期間にのみ許されていた
なぜだかわかるか?

263 名前:デフォルトの名無しさん [2019/07/08(月) 11:23:23.17 ID:tzeJFuHla.net]
>>262
そうだったっけ?そうだったような気もするが。

なかったのは自動変数だと毎回コピーすることになって無駄だからかな?

264 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 11:25:22.35 ID:Y+Xu67y40.net]
>>262
初回のみ限定警告100%オフ! 送料無料! だからね
いちおう違反ではないことになってる

265 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 11:45:28.78 ID:IKtCR6xL0.net]
>259
>str[9]={'お','は','よ','う'}
マルチバイト文字をこう書く時はエンディアンにも気をつけないとね。

266 名前:デフォルトの名無しさん [2019/07/08(月) 12:17:44.27 ID:tzeJFuHla.net]
>>265
てか、それできる?

267 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 12:23:54.16 ID:sWBK4Oik0.net]
>>263
memcpyみたいのは言語自体に組み入れるべき機能ではないという判断だ
俺は今でもそう思っている

268 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 12:29:40.10 ID:SgFxP6hn0.net]
思ってるって……
じゃK&Rにはwhyは書いてないってこと?

なんでお前の脳みその中身を当てこしなきゃいけねーんだ
バカかこいつ?

269 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 12:30:19.48 ID:sWBK4Oik0.net]
>>265
エンディアンが同じでも解釈が違うことがあるぞ
printf("%x %x", 'あ', L'あ');
bcc32: a082 3042
cl: 82a0 3042
gcc: error

270 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 12:31:09.46 ID:sWBK4Oik0.net]
>>267
じゃあ言い直そう
- 思っている
+ 賛成している



271 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 12:31:47.98 ID:sWBK4Oik0.net]
くそ、安価ミスとは俺としたことが
- >>267
+ >>268

272 名前:デフォルトの名無しさん [2019/07/08(月) 13:00:33.95 ID:tzeJFuHla.net]
>>267
なるほど。

273 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 13:43:50.72 ID:IKtCR6xL0.net]
>266
どのあたりに疑念を持ってるの?

274 名前:デフォルトの名無しさん [2019/07/08(月) 13:58:51.22 ID:tzeJFuHla.net]
>>273
'あ' みたいなのは char じゃないから少なくとも警告出そうな感じするんだが。

275 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 14:09:16.87 ID:IKtCR6xL0.net]
int Code='ABCD';
なんて書き方できるから文字列はOK。(Code=0x41424344; と解釈)

全角文字の解釈はコンパイラ次第。unicodeやutf-8対応なら問題ないと思う。
S-JISはよく"\"が含まれる文字で誤作動起こすけど。

276 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 14:54:14.01 ID:jiAfHW5M0.net]
C99 6.4.4.4 Character constants で
 character-constant:
  'c-char-sequence'
  L'c-char-sequence'
 c-char-sequence:
  c-char
  c-char-sequence c-char
こうなってて文法的には 'ABCDEF' は許されるんだな ちょっと意外

277 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 15:31:05.17 ID:sWBK4Oik0.net]
>>275
printf("%x", Code);
bcc32: 44434241
cl: 41424344
gcc: 41424344

278 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 15:37:58.06 ID:u+KjwOdz0.net]
処理系定義の動作だから移植性は落ちるよね

279 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 20:12:45.44 ID:84rxMJ1M0.net]
文字定数は
Cではint型
C++ではchar型

280 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 20:54:00.78 ID:ibRWBgM50.net]
int *ptr;

↑なんですが、「int型のポインタ変数ptr」、それとも「int *型のポインタ変数ptr」のどちらでしょうか?



281 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 20:55:50.12 ID:Fr0SEB8b0.net]
int*型の変数

282 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 21:09:00.76 ID:ibRWBgM50.net]
>>281
読み方としては
int (イント) * (ポインタ) 型の変数
でしょうか

「ポインタ変数」と言った場合は「* (ポインタ)変数」という捉え方でいいのでしょうか?
「ポインタ」と言った場合に「*」を指すのは普通ですか?

283 名前: mailto:sage [2019/07/08(月) 21:12:57.52 ID:qs7HTSo50.net]
>>282
好きなように把握すればよい、しかし int * の使われ方は決まっているのだから、それがすんなりできるかどうかが問題

284 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 21:24:04.62 ID:/2nq94DTa.net]
pointer to int

285 名前:デフォルトの名無しさん [2019/07/08(月) 21:42:19.26 ID:prK3AyGza.net]
>>280
Cの場合は変数に*がくっついた形で宣言されていると考えた方が良い。というのは int *a, b; と書いた場合に a は int * 型だが b は int 型になるからだ。

286 名前:デフォルトの名無しさん mailto:sage [2019/07/08(月) 22:54:53.21 ID:ibRWBgM50.net]
なんとなくわかりました
ありがとうございました

287 名前:280 mailto:sage [2019/07/09(火) 00:31:35.20 ID:L+Vy/ftS0.net]
規格書には
pointer to a character type
pointers to structure types
という文が頻繁に出てきますね
日本語で言ったら「char型へのポインタ」のほうが「charのポインタ型」より正しい気がします
>>284さんのpointer to intは日本語なら「int型へのポインタ」ですね

と思ったんですが規格書には
pointer type
も出てくるので、どっちでもいいということでしょうか
つまり「char型へのポインタ」=「charのポインタ型」ということになりますが

288 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 02:08:12.29 ID:Mm2yqLXca.net]
変数の宣言と型の宣言が同じ形というCの事情もありそうだが、そこは曖昧だと思うね。
アップキャストしたら単にポインタだし、ポインタ型と言う場面もあるだろう。

これいいね
https://cdecl.org/

289 名前:デフォルトの名無しさん [2019/07/09(火) 09:14:08.91 ID:gdYXIa6pa.net]
typedef char *pchar; とすると pchar 型は「charのポインタ型」というとにはなる。

290 名前:280 mailto:sage [2019/07/09(火) 11:14:54.62 ID:L+Vy/ftS0.net]
ということはどっちでもいいんですね



291 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 11:27:52.60 ID:knKJba5J0.net]
気にしたことが無いくらいどうでもいい話。

292 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 12:21:07.04 ID:J4x6YR7aa.net]
引数のvoidが一体なんなのか考える方が有意義

293 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 12:41:16.87 ID:jbK1WB2u0.net]
引数なしの関数を書くときはvoidと書く

以上

294 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 12:59:36.67 ID:PyDbCO5q0.net]
voidって引数じゃないの?

295 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 15:08:36.62 ID:jbK1WB2u0.net]
引数に予約語使えるの?

296 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 15:44:50.86 ID:+qcz+46H0.net]
some_type foo() と戻りがあるのに、その戻りを捨てる意図で
(void)foo(); と呼び出すコードを見たことがあるような気がするが C++ かもしれん

最適化の際にうまいことしてくれるのを期待してるのかしら

297 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 15:55:38.40 ID:td6qAd7k0.net]
>>296
コンパイラかコードチェッカーのwarning抑止のためじゃないかな

298 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 16:02:30.30 ID:+dEKq4+ba.net]
Cでも使える。
一度も使ってない引数変数があるとか、関数の戻り値を使っとらんとかで警告が出る場合にくっつけるのが主だと思う。

299 名前:デフォルトの名無しさん [2019/07/09(火) 16:03:09.93 ID:NP6oYl9g0.net]
> 引数なしの関数を書くときはvoidと書く
プロトタイプじゃなかったっけ

300 名前:デフォルトの名無しさん [2019/07/09(火) 16:07:01.41 ID:gdYXIa6pa.net]
>>299
プロトタイプと違ったらエラーになる。



301 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 16:20:41.31 ID:+qcz+46H0.net]
>>297-298
なるほど、警告避けかー

引数に対してのは
callback 関数として、引数の型&数は限定されてるけど
実装時には一部の引数を使わずに実装できちゃうときに発生しそうね

void foo(int arg1, int arg2)
{
 /* 色々書くけど arg2 は使わない: callback 関数の都合で引数の型と数は変えられん */
 (void)arg2;
}

302 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 17:10:50.55 ID:NP6oYl9g0.net]
>>299
これ OKでしょ
int func(void);
int func()
{
return 0;
}

303 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 17:12:50.99 ID:NP6oYl9g0.net]
アンカミスった >>300

304 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 17:17:21.63 ID:+qcz+46H0.net]
>>302 のは 非ANSI の K&Rフォームで警告されるんじゃ

引数有りの記述では
 int func(int);
 int func(a)
 int a;
 { return 0; }
と等価

305 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 17:26:13.08 ID:jbK1WB2u0.net]
>>302
これアウトでしょ
int func(void);
int func()
{
return 0;
}

func(hoge);

306 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 17:28:26.22 ID:PyDbCO5q0.net]
>>302
VCだと
> warning C4255: 'func' : 関数プロトタイプがありません : '()' を '(void)' に変換します。
って警告出て、関数部分の引数を変えてしまってる

307 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 17:41:06.68 ID:3UBru1uA0.net]
>>302
おまえさん、自分のところで動作確認してるか? でたらめこくな

308 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 17:43:09.00 ID:8Y9GhXx/M.net]
char *p;
p = "str1";
p = "str2";

こんな風に文字列リテラルのポインタを付け替える時に前の文字列リテラルのメモリ領域を解放するにはどうすればいいの?

309 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 17:49:15.98 ID:PyDbCO5q0.net]
>>308
静的領域に確保しているから解放は無理

310 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 17:59:43.14 ID:3UBru1uA0.net]
exit関数を呼び出せば解放できるね



311 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 18:21:06.36 ID:NP6oYl9g0.net]
X 3010:2003 では

6.7.5.3 関数宣言子(関数原型を含む)
「並びの中の唯一の項目が void 型で名前のない仮引数であるという特別な場合,関数が仮引数をもたないことを指定する。」

6.9.1 関数定義
typedef int F(void);
F f, g;
int f(void) { /*... */ } // 正
int g() { /*... */ } // 正

という訳で
int func(void); /* prototype */
int func() /* definition */
{
return 0;
}
どこかまちがっているか

312 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 18:28:37.94 ID:8Y9GhXx/M.net]
>>309
まじですか。じゃあこのような書き方してたらいずれクラッシュするってことですか?

char *p;
while(1) {
//何かの処理
p = "hoge";
}

313 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 18:36:42.49 ID:lRtOoeh80.net]
それは同じ"hoge"のアドレスがロードされるだけ
文字列リテラルのポインタ扱うならconst char *使いなされ

314 名前:デフォルトの名無しさん [2019/07/09(火) 18:43:38.45 ID:gdYXIa6pa.net]
>>312
文字列の定数は静的な領域に作られるだけで実行時に動的に作られたりしないのでそれは問題なし。

315 名前:デフォルトの名無しさん [2019/07/09(火) 18:46:20.39 ID:gdYXIa6pa.net]
あ、でも、定数でなくても同じか。単にポインタ代入してるだけだもんな。

316 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 18:47:53.66 ID:jbK1WB2u0.net]
>>311
プロトタイプと同じだからOKだよね
>>302は何を言いたいのか分からんな

317 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 19:48:16.54 ID:YXbnrG+I0.net]
>>301
その場合は↓で良いはず
void foo(int arg1, int)
{
}

318 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 20:34:43.07 ID:3UBru1uA0.net]
>>311
おまえさんは「関数原型を含む」を、「関数原型についてのみ」と脳内変換しているのか?

> int func() /* definition */
これのどこに、void型で名前のない仮引数があるんだ?

319 名前: mailto:sage [2019/07/09(火) 21:57:18.11 ID:Rbs4mLR80.net]
>>296
それは lint 対策ですよ

320 名前:デフォルトの名無しさん [2019/07/09(火) 22:42:13.74 ID:pf5t+DpRa.net]
最近C言語学び始めた者ですが練習がてらトランプのブラック・ジャック的なものを作っています
そこで11以上がでた時10とするという単純なプログラムを書きたいのですがつまづいています。
ご教授頂ければありがたいです



321 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 23:16:49.68 ID:PyDbCO5q0.net]
>>320
パッと思いつくのは、要素数13の配列用意して
対応する番号の所に希望する数を入れておく

322 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 23:46:17.89 ID:pf5t+DpRa.net]
>>321
一応rand関数というのをつかって1~13までの数をランダムで出すようには組めたのですがそのランダムで出た数が11以上だった時10として扱うというのが組めません

やはり13個全部配列組む方が確実なのでしょうか

323 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 23:52:36.31 ID:khnvGGZh0.net]
ブラックジャックのルール全部適用させようとすると初心者には結構ハードル高いような気がする。

324 名前:デフォルトの名無しさん mailto:sage [2019/07/09(火) 23:54:18.16 ID:PyDbCO5q0.net]
>>322
式でやりたいなら、

i>10? 10: i

325 名前:デフォルトの名無しさん [2019/07/09(火) 23:59:20.27 ID:pf5t+DpRa.net]
>>324
ありがとうございます!早速試して見ます!

326 名前:デフォルトの名無しさん [2019/07/10(水) 00:04:27.37 ID:YFbFPCAXa.net]
>>323
あんまり細かいことはさすがに手が出ないのでとりあえず
・11以上は10として扱う
・21超えたら負け
・1がでたら1か11好きな方を選べる

この3つだけできればとりあえずブラック・ジャックとしてゲームは成り立つかなと考えてます

327 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 00:04:44.92 ID:q0FoS2hTa.net]
カード52枚作るのがいいと思いますよ。
シャッフルもしがいがある。
配列の要素は見た目(ハートのJとか)を表す構造体。なんだったら実際の値も入れる。Aが微妙ですが。

328 名前:デフォルトの名無しさん [2019/07/10(水) 00:14:34.49 ID:YFbFPCAXa.net]
>>327
作り始めた時52枚全部定義すれば本格的になるかなと思ったのですが、ご教授お願いしている身で申し訳ないんですけど少し面倒だなと思ってしまいましてorz

やっぱりちゃんとしたブラック・ジャックを作りたいなら52枚全部定義した方がいいですよね

329 名前:デフォルトの名無しさん [2019/07/10(水) 02:58:29.54 ID:Jh4oErcv0.net]
そうしないと確率が変わってしまうのではないかな。

330 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 07:53:06.60 ID:c5IU7AfX0.net]
某ゲーム内のブラックジャックは同じカードが自分と相手に出てきた。
カジノのブラックジャックだとトランプを何セットも混ぜてやってるらしいね。



331 名前:デフォルトの名無しさん [2019/07/10(水) 08:45:30.08 ID:FsJSBTR40.net]
絵札の数が決まっていると残りの絵札を数えれば勝てるらしい。

332 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 08:48:48.34 ID:q0FoS2hTa.net]
実際は6セットとか使うわけです。
有限なのでカウンティングができる。
過去の結果に依存するってことはサイコロ使うような無記憶な試行ではないってことだね。

333 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 09:15:26.99 ID:1T4zvF6/x.net]
カウンティングだけで勝つのは驚異的な記憶力がないとなかなか難しいと聞く。
小説「マルドゥックスクランブル」でのBJシーンは有名だけど、読んででも半分も理解できなかった記憶があるわ。

334 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 09:18:07.74 ID:8OTK1K8V0.net]
麻雀よりは簡単

335 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 09:20:35.29 ID:8OTK1K8V0.net]
麻雀の方が簡単か
すまん

336 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 09:37:28.19 ID:z7915HRG0.net]
BJのカードカウンティング、結構な種類があるんだね
ttps://vegasdocs.com/blackjack/counting.html

337 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 17:29:16.11 ID:6YiGFI5ep.net]
麻雀の役判定、得点計算できるライブラリってある?

338 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 18:23:48.87 ID:Tg8SA/BfM.net]
>>337
ググれ

339 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 18:44:07.65 ID:rAQ8nA0Y0.net]
>麻雀の役判定、得点計算

あると思う
判定も計算も難しくはないし
無くても自製可能なレベル

340 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 19:16:43.40 ID:iZJC1PSD0.net]
ものすごく基礎的な質問で申し訳ないんだけどテトリスのようなゲームを作るとき、実行中のプログラムとは別にn秒ごとにあるプログラムを実行するようなのってどうすればいいの?
キーボードからの入力待ちの状態と並行して時間の計測とブロックを落下させるみたいなの



341 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 19:21:28.73 ID:rAQ8nA0Y0.net]
OSによって違いがあるけれど、
指定した時間間隔でイベントを発生させ
そのイベント通知を受けて処理を行うようにする

342 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 19:24:28.60 ID:c5IU7AfX0.net]
DOSならVSYNC割り込みとかタイマ割り込みっていうのがある。

343 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 19:37:55.05 ID:b2TgwlJAa.net]
入力待ちしてるはずなのになんでブロックは落ちてるんだ

344 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 19:48:07.07 ID:wGS7rpFP0.net]
待ってないから。

345 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 19:48:36.59 ID:YAEkGiKl0.net]
ブロッキング/ノンブロッキング
同期/非同期

346 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 19:59:01.20 ID:iZJC1PSD0.net]
うーん…前提から間違ってるのか?
ブロックを生成した後、キーボードからの入力を待ちながら一定時間毎に落下させるのかと思ってたけど、一定時間毎に落下させる中でキーボードからの入力があればそちらを実行する感じ?

347 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 20:00:37.82 ID:b4vpo7xg0.net]
非同期処理

348 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 20:08:27.28 ID:iZJC1PSD0.net]
なるほど
同期処理、非同期処理を使えば割り込ませたりすることができるのか
まだほとんど理解できてないけどある程度方向性は見えてきた気がする
サンクス

349 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 20:10:55.04 ID:rAQ8nA0Y0.net]
>>346
マルチスレッドって分かるかな?
同時に複数の処理を行うんだけど
多分イメージしているプログラムは
それを利用する事で出来ると思う
ただし、OSが何かによって実装方法が変わってくる

350 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 20:23:29.74 ID:nUGO9xykM.net]
>>346
そうだよ。古典的なゲームは、1秒間に30回または60回、入力の取得と状態の更新と画面の更新を行う。
ギャラクシアンもといタスクシステムでぐぐれ



351 名前:デフォルトの名無しさん [2019/07/10(水) 20:48:50.43 ID:lDiVjXP/a.net]
テトリス程度の(コンピュータからしたらゆっくりな動きの)ゲームならマルチタスクやマルチスレッドにしなくても順番に処理すればできそうだけどな。
キー入力については何も押されてなかったらすぐに処理を抜けるようにしとけば良い。
で、画面書き換えたりする処理して、またキー入力されてるかを見て、という感じで繰り返す。
キー入力されてたらそれによって変化するパラメータ(テトリスならブロックの向き等)を変更する。

352 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 21:05:28.75 ID:gc55JO0Da.net]
マルチスレッドだって順番だろう
昔はコアが一つしかなかったんじゃよ

353 名前:デフォルトの名無しさん [2019/07/10(水) 23:25:08.72 ID:QCGATMsz0.net]
ソフトタイマ ポーリング 状態シーケンス制御

354 名前:デフォルトの名無しさん [2019/07/11(木) 01:13:09.90 ID:9IeQUu2b0.net]
>>352
順番って、時分割で切り替わるって意味?
しかしそれは普通はOSレベルでやってるので切り替え部分までユーザが考える必要はないね。
そこまで自分で作らねばならないようなOSなし環境や昔の 8 bit CPU みたいなのだと別だが。

355 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 02:10:12.63 ID:j5kiUrVb0.net]
>>351
それってキー入力取り逃したりしないの?

356 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 06:43:27.53 ID:bnplrtu80.net]
>>352
マルチスレッドじゃなくて単なるループだと思うが

357 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 07:08:26.92 ID:l57S3jiM0.net]
ハードウェア割り込みとマルチタスクOSがごっちゃになってるんだろ

358 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 08:25:52.40 ID:Osy0Da+v0.net]
>>355
処理のサイクル(1/30秒 や 1/60秒)の間に off->on->off とパルス状に入力されると取りこぼすよ

359 名前:デフォルトの名無しさん [2019/07/11(木) 09:26:29.26 ID:42U1oSKOa.net]
高橋名人の16連射でもコンピュータからすれば物凄く遅いスピードだから問題ない。40年ぐらい前のクロック4MHzで動く 8 bit CPU でも余裕だ。
それにゲームなら一回や二回入力が失敗しても文句を言うやつはまずいない。

360 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 10:34:43.73 ID:nMYI1ORia.net]
>>356
まあユーザースレッドなんて言葉もあるけども

昔のCPUだとぶんまわすしかなかったけど、ある意味わかりやすい気がするわ。
リッチな環境でアクションゲームってどうやって作るの?条件変数とか使うのかね?



361 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 11:38:42.52 ID:KgOJMZpN0.net]
>>358
炎のコマの解説は嘘だったんだよな
あれ以来、人間を信用しなくなった

362 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 12:18:10.67 ID:xCkJ5LaR0.net]
組み込みでは、0.1〜1秒など、長時間に渡って、
何回もキーを押しているかどうか確認してから、機械を動かす

そうやって、ボタンを確実に押しているかどうかを判断する

1回で判断すると、ボタンの接触不良で、
モーターのon/off が繰り返されてしまうから、短時間で判断できない

この判断を、ハードウェア回路で行うのと、ソフトウェアで行うのと、2つの方法がある

詳しくは、組み込み(エンベッド)情報処理資格の教科書を参照

363 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 12:23:27.06 ID:ZSl7eG940.net]
一々教科書を読まなくても「組み込み チャタリング」などで調べれば分かるのでは

364 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 15:03:35.76 ID:vYMpRAzp0.net]
Windows初期はVsync待ちとかウェイトかけずに処理してて、CPU速度が上がったら実機より速くなって(60fps以上)ゲームにならんのもあったわ。

365 名前:デフォルトの名無しさん [2019/07/11(木) 21:07:12.90 ID:W9yQmyPFa.net]
エイリアンの動きが速すぎて穴を掘ってる暇がないと

366 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 21:08:10.26 ID:+FsFkp9e0.net]
それ何ていう平安京エイリアン?

367 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 21:47:38.69 ID:BSTUJEPb0.net]
space panic

368 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 21:55:53.90 ID:pe38QhTW0.net]
Linuxってconio.h使えないのかよ
getcheもkbhitも駄目とか面倒臭いな

369 名前:蟻人間 mailto:sage [2019/07/11(木) 21:57:23.76 ID:JEmOAlRld.net]
コンソールで色を付けるならpdcurse使え。ncursesは古い

370 名前:蟻人間 mailto:sage [2019/07/11(木) 21:57:56.88 ID:JEmOAlRld.net]
pdcurses



371 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 22:15:03.30 ID:BSTUJEPb0.net]
ioctl

372 名前:デフォルトの名無しさん mailto:sage [2019/07/12(金) 04:02:10.72 ID:30ixxYg+0.net]
pdcursesってcursesのWindows実装なんだけどな

373 名前:デフォルトの名無しさん [2019/07/12(金) 12:58:51.21 ID:4AR7dspsa.net]
>>368
ncursesとかを使ってそういうラッパー関数作れば良いのではないかな。

374 名前:デフォルトの名無しさん mailto:sage [2019/07/12(金) 18:40:44.71 ID:q8HbeEfz0.net]
Cで面白いワンライナーとかない?ICCCMとかにも案外ワンライナーという分類はないんだよね。

375 名前:デフォルトの名無しさん mailto:sage [2019/07/12(金) 19:20:34.57 ID:rA9WmwUa0.net]
1行と言うのは難しそうだが、7行で良ければ

https://uguisu.skr.jp/othello/7gyou.html

376 名前:デフォルトの名無しさん mailto:sage [2019/07/12(金) 19:24:01.49 ID:Vt6HtS1w0.net]
BASIC時代に1画面プログラムってのがあったな。

377 名前:デフォルトの名無しさん mailto:sage [2019/07/12(金) 19:40:11.46 ID:aSZPouska.net]
1行の定義って何?

378 名前:デフォルトの名無しさん mailto:sage [2019/07/12(金) 19:56:09.02 ID:pYBNura/0.net]
>>373
既に世界中で書かれて公開されている予感

379 名前:デフォルトの名無しさん mailto:sage [2019/07/12(金) 19:56:09.31 ID:zAF1v8/n0.net]
\n

380 名前:デフォルトの名無しさん mailto:sage [2019/07/13(土) 01:22:11.42 ID:+XrRzYc00.net]
>>378
結婚して///



381 名前:デフォルトの名無しさん mailto:sage [2019/07/13(土) 06:35:45.40 ID:GFbMPvry0.net]
#defineを-Dでやれば1行にできるかも
https://www.ioccc.org/2004/vik1.c

382 名前:デフォルトの名無しさん [2019/07/13(土) 07:12:15.59 ID:THUdwCLa0.net]
そもそも改行しないでプログラム書けば一行

383 名前:デフォルトの名無しさん mailto:sage [2019/07/13(土) 13:07:12.18 ID:BfevEbDR0.net]
cppディレクティブは1個1行

384 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 22:19:01.35 ID:uXqqdpfBM.net]
int i = 0;
int s[2];
s[i] = i++ + 1;
printf("%d", s[1]);

これの出力が1になります。これは理解できません。
事実、3行目は以下のようにすると出力は0になります。
s[i++] = 1;
また、3行目は以下のようにすると出力は0になります。
s[i] = i++;

385 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 22:22:40.77 ID:/MgLlV8v0.net]
>>384
www.kouno.jp/home/c_faq/c3.html#0

386 名前:蟻人間 mailto:sage [2019/07/14(日) 22:30:43.07 ID:uXkiDi0Ud.net]
「式の評価」という言葉はわかるか?
1+1という式を評価すると2になる。
C/C++の後置演算子では、全ての評価が終わった後で変数を書き換える。
i++は、++がiの後ろについているから、後置だ。i++を評価すると、評価した瞬間の値はiであり、そして式全体の評価が終わると、iはプラスいちになる。
後置の反対は前置演算子であり、式全体の評価の前に変数を+1もしくは-1する。

387 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 22:48:05.04 ID:uXqqdpfBM.net]
演算規則に従い、インクリメント後置なので、元の3行目の式は
s[i(==0)] = i(==0) + 1
i = i + 1
の順に行われて結果、
s[0]に0が代入されてs[1]の値は初期値0だと思うのですが。
事実、3行目がs[i] = i++;なら上の通りの順で実行されます。
演算規則が無視されて結果がコンパイラ依存になる理由は何ですか?

388 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 22:48:51.03 ID:uXqqdpfBM.net]
私は間違えました、s[0]に1が代入されます。

389 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 22:52:20.27 ID:uXqqdpfBM.net]
また、3行目を以下の通りにすると演算規則通りに結果2が得られます。
s[i] = ++i + 1;

390 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 22:53:42.53 ID:uXqqdpfBM.net]
順番はこの通りです、
i = i + 1
s[i(==1)] = i(==1) + 1



391 名前:蟻人間 mailto:sage [2019/07/14(日) 23:13:20.84 ID:uXkiDi0Ud.net]
>>387
主な原因は順序が決められないことと最適化のためらしい。詳しくは知らん

392 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 23:15:43.21 ID:uXqqdpfBM.net]
i = i++;
これの結果が未定義なのは直感的に理解できます。
代入とインクリメント増分の関係が不明だからです。
s[i] = i++;
これの結果が未定義なのは直感的に理解できません。
演算規則に従えば、iはインデックスとしての間接参照でしかないからです。

393 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 23:18:12.85 ID:XOVWGW1L0.net]
>>387
左辺と右辺の評価順序は未定義だからだ
gccとclとか違う環境で試してみれば分かる

394 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 23:28:34.66 ID:uXqqdpfBM.net]
int x = 2*i + i++;
それでは、これの結果もまた未定義ですか?

395 名前:デフォルトの名無しさん mailto:sage [2019/07/14(日) 23:55:54.94 ID:XOVWGW1L0.net]
iの評価は何回だ?
評価が複数回入る式は書くなということだ
仕事でそんなコード書いたらどやされるぞ

396 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 00:20:47.65 ID:wok43DsHM.net]
私は勉強のためにコードを書いています。
コードがどのような動きをするか興味があります。
int a = 1;
int x = (a = a) + a;
それでは、この式ではxは定義されますか?
左辺と右辺の評価順序に関わらず、答えは同じです。

397 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 00:33:43.29 ID:mPPf+F39a.net]
されます

398 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 00:46:03.12 ID:E9YINa1F0.net]
そんな無意味なコードから何を学ぼうとしているのか分からんわ

399 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 00:55:35.98 ID:wne2EA+X0.net]
優先順位や式の評価順が曖昧かもって考えるソース、
書いてて気持ち悪くなりませんか?私はなりますよ。

400 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 01:14:29.35 ID:Voexy70f0.net]
>>394
副作用完了点でググってこい



401 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 02:04:55.42 ID:wok43DsHM.net]
while((s[i++] = t[j++]) != '\0') ;
元々気になったのは、tをsにコピーするこのコードです。
これを見て、他にインクリメントで簡略化出来そうなコードを考えています。

402 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 02:10:16.53 ID:wok43DsHM.net]
for(;t[j] != '\0'; j++){
s[i] = t[j];
i++;
}
s[i] = t[j];
従来の私なら、このようにコードを書いていました。
新しいコードの記述なら1行で書けます。

403 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 02:19:48.51 ID:wok43DsHM.net]
while((s[i++] = t[i + 1]) != '\0') ;
そこでtをsに1つずらしてコピーするコードをこのように書けないか考えていたら、未定義の問題が生じました。
私は演算規則から考えてこのコードは上手く働くと思いました。

404 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 03:09:03.53 ID:mPPf+F39a.net]
俺はmemcpy使う
性能は知らん

405 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 07:21:57.18 ID:ex33LrHm0.net]
せっかくC-FAQのリンク書いたのに…
バカって人の言う事聞かないからバカのままなんだな…

406 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 07:41:01.06 ID:Voexy70f0.net]
>>401
「簡略化」とは、何を目指しているんだ?
行数が少ない方がいいとか考えているならバカな考えだからやめとけ。
コンパイラの最適化で同じコードになるような範囲の変形で行数を減らしたところで、可読性を下げてるだけで何のメリットもないぞ。

407 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 08:20:49.21 ID:wok43DsHM.net]
私は行数の少なさというよりはむしろ見た目の単純さで読みやすいと感じます。
C-FAQのリンクは事実が書かれているのみで演算規則が無視される理由が理解できませんでした。

408 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 08:32:41.44 ID:Voexy70f0.net]
>>407
演算規則って何のことだ?
構文解析や演算子の結合の優先順序と副作用の発生するタイミングはまた別の話だぞ。

409 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 09:10:34.41 ID:ex33LrHm0.net]
どうせちゃんと読んでないか理解する能力がないんだろうな…

410 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 09:22:44.79 ID:IpJNQ16e0.net]
>>389
それはおかしいだろう
算術プラスの第1オペランドと第2オペランドの評価順序は未規定だぞ



411 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 10:07:24.78 ID:Voexy70f0.net]
>>410
未規定の動作がたまたま自分の期待する動作と同じになったということが理解できてないんだろうね。人の話を聞かない相手に何を言ってもダメそうだね。

412 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 10:40:21.72 ID:r5uSGSCiM.net]
愛繆私は未定義な理由について理解できません。
なぜなら、演算規則に従い前置インクリメントを代入の評価より先に行えば、389の結果は一つと決まるからです。
しかし、評価順序が未定義となりコンパイラに依存となる理由は何ですか?
この式を定義することによる問題の例を理解したいです。

413 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 10:44:14.06 ID:mPPf+F39a.net]
左辺は

414 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 10:45:20.28 ID:r5uSGSCiM.net]
つまり、私は未定義と規定されている理由を知りたいです。
定義することで発生する問題の例などです。

415 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 10:49:35.01 ID:6m2OA1zn0.net]
この人の言ってる「演算規則」って何なんだろうね。
「C言語 "演算規則"」でググっても、それらしきものは出てこないし。

416 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 10:57:10.32 ID:r5uSGSCiM.net]
int i = 0, j = 0;
int x = i++;
int y = ++j;
これです。xでは代入の後に後置インクリメントされます。(x = 0)
yでは代入の前に前置インクリメントされます。(y = 1)

s[i] = ++i + 1;
つまりこの式では代入の前に前置インクリメントされます。(次と等価です、)
i = i +1;
s[i(==1)] = i(==1) + 1;

417 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 10:59:07.47 ID:mPPf+F39a.net]
>>414
だから、左辺は

418 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 10:59:28.08 ID:r5uSGSCiM.net]
これは、未定義と規定されていますが、理由が理解できません。
私が示した通り、定義することによる問題の例は何ですか?

419 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 11:01:03.87 ID:r5uSGSCiM.net]
389の中では、左辺はs[1]です。
なぜなら、代入より前にiが前置インクリメントされます。

420 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 11:01:37.73 ID:r7SsHRFS0.net]
i++のポストインクリメントとi+1の評価順が不定だから



421 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 11:02:04.90 ID:E9YINa1F0.net]
これ読んで分からないなら諦めろ


未規定の動作とは、複数考えられる動作のうち、どれが実行されるかの要求が課されない動作のこと。
未規定の動作への依存で移植性が低下します。

未規定の動作
・部分式が評価される順序、及び副作用が発生する順序。
ただし関数呼出しの()、&&, ||, ?:, カンマ演算子は除く。(6.5)
・代入演算子のオペランドが評価される順序。(6.5.16)

未規定の動作
www.c-lang.org/detail/unspecified_behavior.html
未定義の動作
www.c-lang.org/detail/undefined_behavior.html

422 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 11:04:11.05 ID:r5uSGSCiM.net]
i++のポストインクリメントとi+1の評価順が不定な理由は何ですか?

423 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 11:07:31.48 ID:r5uSGSCiM.net]
i = i++;
これが未定義なのは理解できます。
しかし、389の中で私が示した通り、の定義をすると発生する問題の例は何ですか?

424 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 11:09:44.83 ID:ex33LrHm0.net]
未定義な理由?
言語作った奴がそう決めたから
要するに「仕様だから」
そう決めた理由は想像になるけど最適化しやすい(と言うかそうしないと最適化の妨げになる)と考えたんだろうと思うよ

425 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 11:12:06.88 ID:mPPf+F39a.net]
>>419
なんで?
その添字いつ評価されんの?
演算子[]の中身だよ
カッコだけどvoid書いちゃだめだよ

426 名前:デフォルトの名無しさん [2019/07/15(月) 11:12:37.37 ID:3cpTbRIL0.net]
インクリメントは式全体の前か後に実行されるからだろ
式の途中で実行されるとかあるの?

427 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 11:19:52.48 ID:r5uSGSCiM.net]
定義すると最適化の妨げになるという理由は、私には反論する知識は全くないので了承します。私は理解しました。

428 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 11:22:41.60 ID:r5uSGSCiM.net]
425の中で、書かれているように、実際には、演算規則でsのインデックスは0でした。
私は[]の優先を見落としていましたが、私が述べたかったことは、演算規則の優先で順番は決定できると思うことでした。

429 名前:デフォルトの名無しさん [2019/07/15(月) 11:23:12.12 ID:3cpTbRIL0.net]
最適化の妨げにはならないだろ
コンパイラー簡単に作れるとかじゃないの

430 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 11:25:19.08 ID:b7u0RgVG0.net]
現行のCの仕様に文句があるなら、ANSI?ISO?の仕様策定に参加でもすればいいんじゃね?



431 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 11:29:05.40 ID:IpJNQ16e0.net]
>>411
すまん
俺はとんでもない失言をしていて
突っ込まれるの覚悟しておとなしく待ってたんだが

432 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 11:36:42.62 ID:ZvCggxzR0.net]
一通り勉強しましたが、次に何をやったらいいのか分かりません!
何も作れません!
どうしたらいい?

433 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 11:38:20.09 ID:mPPf+F39a.net]
>>428
そりゃ決定するための規則を作れば決定するけど、めんどくさいじゃん

434 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 11:39:31.38 ID:E9YINa1F0.net]
>>432
作りたいものが無いなら無理に作らんでもいいじゃん

435 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 11:40:09.15 ID:3cpTbRIL0.net]
>>432
散歩したり 景色を見たり…
昼寝したり 何もしない
そのうちに急に書きたくなるんだよ

436 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 12:05:05.25 ID:ex33LrHm0.net]
>>426, >>429
> インクリメントは式全体の前か後に実行されるからだろ
> 式の途中で実行されるとかあるの?
どのように実装してもいい
並列に処理することすら可能
と言うような最適化を妨げないための仕様

437 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 12:24:44.13 ID:E9YINa1F0.net]
要するに++,--は混ぜるな危険ってこと

438 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 12:36:46.00 ID:IpJNQ16e0.net]
能なしど低脳

439 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 12:47:17.16 ID:0wrdUuzC0.net]
>>403
>while((s[i++] = t[i + 1]) != '\0') ;
for(;(s[i] = t[i + 1]) != '\0';++i) ;
これじゃ駄目な理由ってなんだろう

440 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 12:55:44.11 ID:wne2EA+X0.net]
評価順序以前にループ条件が直感的に分かりにくい様なコードは書くべきでない



441 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 12:56:34.33 ID:14ut6KBx0.net]
for(@;A;B)

この123が全部必要だと思ってるんじゃね

442 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 13:04:03.21 ID:Voexy70f0.net]
>>431
こちらこそすまん。>>411>>410宛ではなく>>409宛だった。

443 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 14:30:35.03 ID:y88H95dP0.net]
MISRA-C 2004 の100ルールを守っていないソースコードは、読むに値しないw

まず、コーディングルールを5年勉強しろ!w

444 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 14:33:44.55 ID:Voexy70f0.net]
>>443
その特徴的な書き方はいつものRuby大好きマンか?
バカなこと言ってないで巣に帰れ。

445 名前: mailto:sage [2019/07/15(月) 15:05:29.64 ID:Nn+acajv0.net]
>>443
MISRA なんて鎖や束縛を作りたがる「管理職」の思考法でしょう?なんでそんなものに従わなければならないのでしょうかね

446 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 15:14:40.80 ID:mPPf+F39a.net]
ルールはあってもいいけど、MISRAはあれアホだよね。
考えたやつお前はCを使うなよっていう。

447 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 15:25:22.82 ID:ex33LrHm0.net]
>>446
どこがアホなのか詳しく書いてみ

448 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 15:26:34.84 ID:mPPf+F39a.net]
>>447
rubyが嫌になったってことですか?

449 名前: mailto:sage [2019/07/15(月) 15:28:03.17 ID:Nn+acajv0.net]
>>446
あの阿呆なMISRAを制定した人間の種族はなにか、どんな属性か?得意な思考方法、苦手な思考方法は?信条・信念は?
というところには興味があります、そのためだけに MISRA を読んでいたりします

450 名前:デフォルトの名無しさん [2019/07/15(月) 16:02:12.44 ID:3UWFYY1V0.net]
>>432
自分が作りたいものを作れ。
作る技術がまだ足りないならそれについて学習したり研究したりしろ。

一つ間違えてはいけないことは、自分の作りたいものを今の自分が持っている技術力で出来る範囲内に無理に収めないようにすることだ。
収めれば実現はたやすいが飛躍はできず本当にやりたかったことには届かない。



451 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 16:06:07.03 ID:QcIx6aGf0.net]
MISRAは実際の不具合を分析して作られたいわばバットノウハウ集だけど、言い換えると最低限のバカ避け。
バカがバカな不具合出すもんだからその他の人が迷惑を被る。
ま、バカはプログラム作るなって事だ。

452 名前:443 mailto:sage [2019/07/15(月) 16:14:22.25 ID:y88H95dP0.net]
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006

この研究会は、トヨタなど大企業から、数十人のベテが集まって、
欧州人に聞きながら、完成された本w

未だに、コーディングルールのバイブルだろがw

元々は、Andrew Koenig の本

C Traps and Pitfalls, 1988, c1989
Cプログラミングの落とし穴

453 名前:デフォルトの名無しさん [2019/07/15(月) 16:20:24.64 ID:3cpTbRIL0.net]
自分が馬鹿だとしっている賢い人はMISRAを使うということか

454 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 16:26:07.09 ID:IpJNQ16e0.net]
ブランドにすがるだけで自分の頭で考えないやつは相手にならん
あれ読んでて異論を持つことが全くないやつはその疑いが強い

455 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 16:34:38.99 ID:ex33LrHm0.net]
>>454
だからどこに異論持ってるのか書けよ
もしかしてグダグダ言うだけ君なの?w

456 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 16:42:13.17 ID:IpJNQ16e0.net]
命令すんな
そもそも自分が書かねえくせに

457 名前: mailto:sage [2019/07/15(月) 16:43:21.75 ID:Nn+acajv0.net]
>>452
>この研究会は、トヨタなど大企業から、数十人のベテが集まって、
トヨタってコーディングを製造と言い切っちゃう人たちの集まりでしょう?そんな人たちの考え方って信じていいのでしょうかね…

458 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 16:48:48.65 ID:ex33LrHm0.net]
>>456
どうせ書けないんだろ、無理すんなよw

459 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 16:49:33.71 ID:ex33LrHm0.net]
>>457
信じるのはダメだと思うよ
内容見て判断しなきゃ

460 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 16:51:54.40 ID:Voexy70f0.net]
>>452
お前さんはいつも、有名な誰それがこう言った!とか、なんとかの本にこう書かれていた!とか、他人の発言を字面だけなぞって記憶するだけだから、中身の本質も適用すべき場面も長所短所も理解せずに垂れ流して害悪にしかならないから、もういい加減消えてくれないか?



461 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 17:02:08.44 ID:14ut6KBx0.net]
多分MISRAはΣ計画とセットだったんじゃねえの
とするとゾンビだよ

462 名前:443 mailto:sage [2019/07/15(月) 17:25:49.24 ID:y88H95dP0.net]
>>457
日本の研究会の考え方・思想は、ほとんどない!
MISRA-C は、Andrew Koenig の本を参考にして、欧州人が作ったから

日本の研究会は、各ルールの例題を作って、誰でもわかるように解説した。
各ルールは、こういう事を言ってます、という解説書

江添 亮の「C++11/14 コア言語」のみたいな本。
無数の例題を並べて、各ルールを解説した本

だから、この2冊は、神の書と言える!

463 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 17:32:05.00 ID:dKUxLoi20.net]
ルールとかくそどうでもよくね
動いて読めればそれでいい

464 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 17:32:21.62 ID:IpJNQ16e0.net]
>>458
ブーメラン乙

465 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 17:43:32.93 ID:ex33LrHm0.net]
>>464
バカなのか?
俺は別に異論があるとは言ってない
異論があるなら書けよって言ってるだけ
俺に何を書けって言ってるんだよw

466 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 17:46:56.60 ID:IpJNQ16e0.net]
>>465
またブーメランかよ、ワンパターンなやつだな
俺はさっき相手にならんと言ったはず

467 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 17:47:07.64 ID:biXPcN21d.net]
落ちものゲーム作れたと思ったけど落下処理の度に今表示中のものが上にズレて処理後のが新しく表示される仕組みのせいで目が死んだ
これダメな奴だ

468 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 18:01:17.82 ID:ex33LrHm0.net]
>>466
ハイハイ、結局具体的には何も言えないグダグダ君だったなw

469 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 18:41:39.94 ID:IpJNQ16e0.net]
煽っても情報は得られない
インタビューの下手な人だな

470 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 19:25:33.92 ID:ex33LrHm0.net]
情報持ってない奴からなにか得ようとしてるってか?
心配するなよ、お前に期待なんてしてないからw



471 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 20:06:52.59 ID:14ut6KBx0.net]
githubに存在するMISRA適合のソースコードとかどんだけあるんだよ

472 名前:443 mailto:sage [2019/07/15(月) 20:23:31.95 ID:y88H95dP0.net]
そのルールを守らないという、逸脱手続きをすれば、OK

トヨタでも、MISRA-C で採点したら、5/100点(ルール)しか取れなかったとかw
70〜80点は、欲しい

473 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 20:27:21.89 ID:QcIx6aGf0.net]
>>472
それはそうなんだけど、逸脱したらレビューと品質記録が必須になるので逸脱しない方向へのバイアスが強くなる。
結果、強制されてるのと同じになっちゃう。

474 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 20:28:56.79 ID:dKUxLoi20.net]
ちなMISRAってどんなの?
pdfのリンクはってれ

475 名前:443 mailto:sage [2019/07/15(月) 20:31:45.40 ID:y88H95dP0.net]
例えば、Linux では、関数の冒頭部分に、return がよくある。
冒頭部分で、処理しないものをはじいてしまう

でも、MISRA-C では、関数内で、return は、最後に1つしか使えない。
複数箇所に、出口があってはならない

そのルールを守らないなら、逸脱手続きをすればよい。
その代わりに、点数が下がっていく

476 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 20:32:43.56 ID:ex33LrHm0.net]
>>471
ほとんどないんじゃね
>>451が言う通りバカ避けだから
>> 関数は、その最後に1つだけの出口を持たなけらばならない
みたいに適合させようとすると人によってはちょっと書き辛いルールもあったりするし

477 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 20:33:46.38 ID:ex33LrHm0.net]
あっ、被ったわ
みんな結構このルールに抵抗あるんだなw

478 名前:443 mailto:sage [2019/07/15(月) 20:35:21.08 ID:y88H95dP0.net]
>>474
「misra-c 2004」「misra-c 2012」で検索して!

479 名前:443 mailto:sage [2019/07/15(月) 20:37:59.21 ID:y88H95dP0.net]
他にも、MISRA-C では、2重ループ内から、一気に脱出できないから、フラグを持ちまわる事になる

このルールも嫌われる

480 名前:443 mailto:sage [2019/07/15(月) 20:48:48.44 ID:y88H95dP0.net]
組み込みとか医療用では、バグると簡単に人が死ぬから、
MISRA-C を勉強していない香具師が、コーディングするとヤバイ!

だから、コーディングできる資格を作るべきだっていう話も聞く



481 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 20:50:33.69 ID:dKUxLoi20.net]
なんでルールブックが有料やねんあほか勝手にやってろ

482 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 21:07:10.69 ID:IpJNQ16e0.net]
>>476
語るに落ちたな
ブランドvsブランドの対戦成績を
自分の頭で考えないブランド志向なやつに出せるわけがない

483 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 21:19:39.89 ID:pdudwpaZ0.net]
>>481
検索したら出てきた
www.c-lang.org/detail/misra_c.html

484 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 21:36:18.18 ID:r7SsHRFS0.net]
4.12 必要 動的なメモリ割り当てを使用してはならない

って酷くね

485 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 21:47:13.82 ID:Xch0qlQL0.net]
俺以外は絶対守れよって思うルールも多々ある

486 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 21:57:44.30 ID:ex33LrHm0.net]
>>482
何を言ってるのか自分でもわかってないだろww
ブランドとかバカじゃね

487 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 21:58:24.78 ID:QcIx6aGf0.net]
関数の中盤以降からreturnするならともかく、早期returnまでも認めないのはナンセンスだよな。
杓子定規すぎるわ。

488 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 22:00:39.84 ID:ex33LrHm0.net]
>>484
組込みだと実行時間が読めなくなるのとフラグメンテーションで総容量足りててもエラーになることがあるからしょうがない

489 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 22:06:28.61 ID:IpJNQ16e0.net]
>>486
おまえがすがっているのはブランド以外の何物でもない
とぼけたら誤魔化せると思っているならおめでたいやつだ

490 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 22:43:50.22 ID:ex33LrHm0.net]
MISRAをブランドとか言うアホがいるんだ…
まあ具体的な内容には突っ込めないグダグダ君だしなぁww



491 名前:デフォルトの名無しさん mailto:sage [2019/07/15(月) 22:45:14.79 ID:ex33LrHm0.net]
そもそもうちはMISRAは参考にしてるけど全面適用なんてしてないし

492 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 00:24:39.33 ID:UHx9kM+ca.net]
>>491
いや、しろよ

493 名前:デフォルトの名無しさん [2019/07/16(火) 00:48:27.21 ID:/MIJx2vXM.net]
プログラムは書く人によって千差万別
書く物によっては複雑な物を書かなきゃならない
そしてその上でのバグ千差万別
ルールブックなんてプログラム書かない管理者がこれを守れば大丈夫(キリッ
ってするものだろう

494 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 01:07:51.42 ID:EySzsoWc0.net]
普通は大勢で開発するときに必要な取り決めだけどな
そういう規模で仕事しないなら,何しても良いけど

495 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 01:37:13.82 ID:UHx9kM+ca.net]
>>494
MISRAは明らかに小規模なプログラムのための規約だと思うよ

496 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 02:37:59.80 ID:EySzsoWc0.net]
大規模なプロジェクトのコーディング規約を決める人がここにいるとは思わないからね
小規模だと思うなら,そのルールでやれば良いんじゃない?

497 名前:デフォルトの名無しさん [2019/07/16(火) 03:09:26.20 ID:FvAVzBqbM.net]
大規模とか小規模とかじゃなく実際にプログラムを書いてると必要になったりとかあるって話で
プログラムを書いた事内物が大規模ではとかいってるのか

498 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 03:18:03.55 ID:UHx9kM+ca.net]
そうそう、MISRAはクソ

499 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 03:29:07.35 ID:UHx9kM+ca.net]
MISRAを尊重するひとって、returnを書く位置によって返る先が変わると思ってるんだよ

500 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 07:29:02.49 ID:UAKGOqEv0.net]
間違ったことばかり書いてあるわけじゃないけどね
現場にそぐわないスキル不足なやつを庇うところには同意しかねるわけよ

> ルール 8.14 必要 restrict型修飾子を使用してはならない

規格票が読めないようなアホの相手はやってらんね
C++が混ざるところでも対策は簡単だし



501 名前:デフォルトの名無しさん [2019/07/16(火) 07:43:27.01 ID:1j77iOOZ0.net]
トヨタのやってることは一つのミスでも人が死ぬということだよ
もしrestrictを使って人が死んだら責任とれるの?

502 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 07:45:28.75 ID:/V8NdDl/M.net]
それなら、人が死なないプロジェクトではMISRAは守る必要がないですね。

503 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 07:58:46.16 ID:UAKGOqEv0.net]
>>501
規格票を確認しないやつにミスがどうたら言われたかねえぜ

504 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 08:02:25.27 ID:UAKGOqEv0.net]
○○を使って人が死んだら責任とれるの?

○○に何でも突っ込めるウルトラクソ論法
ポインタ、共用体、仮定義、数学関数、それから?

505 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 08:50:54.07 ID:7HVrvnq4a.net]
>>501
お前が作ってるプログラムはテストしないのか?

506 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 09:07:55.77 ID:csbTSCSc0.net]
>>492
絶対守るべき指標と守った方がいい指標、といった具合に何段階かにわかれていて
別途ルールがあるならば守らなくても良い(無理して守るべきでない)指標もあるよ

507 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 09:35:00.37 ID:UXD1By8p0.net]
上司のバカかバカの上司でも理解できるまでに破壊されたC言語だろ
それを規格と言ってるだけだ

安全かもしれないけど対照実験がないでしょ
安全であることをどうやって確かめたのか論文の欠片も見つからなかった
だからMISRAの安全神話は神話かデマかフェイクニュースだよ

508 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 09:46:10.29 ID:MyJUZjZxa.net]
プライドだけは高いこの道30年の社畜が書いた様なルールだよ。
「してはいけない」ばかりでこうしろという記述が圧倒的に少ない。
フレームワークという発想がない。指摘だけ。すべて勘と経験という名の錯覚に基づいてる。

あと内容的に「最適化はしてはいけない」とか書いておけばいいんじゃないかと思う。次は入れて欲しい。

509 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 10:35:01.62 ID:Yi/rfLM50.net]
>>463
処理系依存や未定義だけどなんか上手く動いてる
というのは、ちょっと怖い

510 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 12:58:57.36 ID:EySzsoWc0.net]
たまたま動いているのは
処理系のバグかも知れない



511 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 13:18:30.94 ID:uQ5be57j0.net]
組込み系の開発経験者いなくて草
MISRA準拠が納品物の条件にあるんだよ
でもプロジェクト毎にカスママイズするから
100%適用するわけじゃないよ
わけわからんルールは適用除外してる

512 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 14:13:08.82 ID:i1fbuZ/pM.net]
>>511
> 組込み系の開発経験者いなくて草
ID:y88H95dP0 あたりは経験者だろ

513 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 15:01:33.68 ID:csbTSCSc0.net]
>>511
8進数使うな、とかいやだよね

514 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 15:05:03.91 ID:Yi/rfLM50.net]
エディタ上での見栄えで桁合わせに 空白を使わず 0 で補ってやらかす

515 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 15:14:31.06 ID:EySzsoWc0.net]
>>513
2進数や16進数は見慣れているんだが
8進数ってどういう時に使いたい?

516 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 15:27:11.60 ID:UHx9kM+ca.net]
バイトが6bitの時は便利だったとかいう話だけど、今要らんよね
emacs使っててエンコードがアレだと出てくるね

517 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 15:32:14.71 ID:Yi/rfLM50.net]
文字列で [ESC] を埋めるのに \033 を使ってるのを見るぐらい

(2進数のリテラルをマクロでなんとかするとき 一時的に8進化するけど 中の話)

518 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 15:40:10.80 ID:uQ5be57j0.net]
大昔のアーキテクチャは18bit,24bit とかで3bit 区切りが扱いやすかった
今は16,32,64と16進数が扱いやすいって話だね
ゼロ始まりは8進数というのはB言語からきたらしいよ

519 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 15:44:50.30 ID:i1fbuZ/pM.net]
>>513
いや、もうコンパイルオプションで禁止してもいいレベル

>>515-516
Unix/Linuxのファイルパーミッションが3ビット単位だからと言うのはあるけど今時直書きなんてしないし

>>517
それも "¥x1b" の方が馴染みがあると思う

520 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 16:30:56.95 ID:SpxSpG+wx.net]
\0 … 8進数
\x0 … 16進数



521 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 16:37:07.34 ID:cpfSTA9t0.net]
>>487
if の nest が深くなってしまう?

522 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 16:54:01.54 ID:Yi/rfLM50.net]
>>521
教条主義的に守るなら そうせざるを得ないだろうね

if (エラー) return ; // 即脱出
後続コード
return ; // 最終

即脱出を禁ずるなら
後続コードは即脱出条件とは排他的なので if (or else) 内に収めるしかない

if (!エラー) {
 後続コード
}
return ; // 最終

523 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 16:58:26.41 ID:EySzsoWc0.net]
goto ___exit; /* 震え声 */

524 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 16:59:45.97 ID:Yi/rfLM50.net]
多分 goto も塞がれてる気配w

525 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 17:24:48.72 ID:uQ5be57j0.net]
うちはreturnは最後に一つのみってやつは適用除外になってる
理由はネストが深くなって読みづらくなるから

gotoもネストしたループから一気に抜ける場合のみ使ってもよいことになってる
フラグ使ってbreakで抜けるより読みやすいからね

526 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 17:27:15.45 ID:glyNXuyHa.net]
もちろんgotoも禁止さ。
あと、各関数の頭で引数チェックも必須なのでreturn禁止とのコンボでほぼ必ず正常系処理のネストが一段以上深くなる。
引数チェック必須はISO26262だったかもしれん。

527 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 17:27:59.62 ID:UHx9kM+ca.net]
途中のreturn禁止を徹底するなら、ifとかelseの後に2行以上書くの禁止にした方がいいね。
代入だけ許容するくらいでいい。

528 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 17:28:40.15 ID:T78CNDqDd.net]
>>513
0は0x0とか書かなきゃいけないんかね

529 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 18:10:37.85 ID:QICQY/wp0.net]
>515
そりゃもう512色カラー設定に(ry

530 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 18:31:58.85 ID:2nARKc5Ld.net]
ここまできたらC言語も禁止だな。
pythonでコーディングしてコンパイルしてやればいい。



531 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 18:35:56.79 ID:/Cc9wbE10.net]
結構前から言われてない?
「C言語を使う必要が無いなら使うな」と

532 名前:デフォルトの名無しさん [2019/07/16(火) 18:47:43.53 ID:K50k857la.net]
pythonを使って人が死んだら責任とれるの?

533 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 18:54:47.98 ID:2nARKc5Ld.net]
>>532
大丈夫さ。プログラム全体をtryで囲んで引っ掛かったらprint("手動運転に切り替てください")のコンボがある。

534 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 18:58:26.32 ID:uQ5be57j0.net]
pythonでOSやデバドラ書けるようになったら考えるわ

535 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 20:05:19.62 ID:WsWptbblx.net]
#define xxx 06
#define yyy 07
//#define zzz 08 // なぜかエラーになる

536 名前:デフォルトの名無しさん [2019/07/16(火) 20:31:07.37 ID:K50k857la.net]
なぜかはひみつ

537 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 20:54:46.50 ID:GCGNUpCjM.net]
>>535
なんてありがちな…

538 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 21:03:30.93 ID:GCGNUpCjM.net]
ここらへん嫁
https://programming-study.com/technology/lets-learn-how-to-express-constants/#i

539 名前:デフォルトの名無しさん [2019/07/16(火) 21:05:08.13 ID:K50k857la.net]
祈りが足りないからだな

540 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 21:08:14.38 ID:uQ5be57j0.net]
ちょっと前に8進数が〜ってやってるのに
あ、ネタかw



541 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 21:22:48.20 ID:/Cc9wbE10.net]
このスレの人って少し前のレス読まないよね

542 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 21:31:28.73 ID:7JXDuVC90.net]
const char *sの順番が納得いかない
直感的にはchar * const sだろうが!!

543 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 21:32:10.10 ID:W8tOKWg20.net]
char const*だろ?

544 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 22:16:46.03 ID:Qe+dZ6A/0.net]
* const char s
じゃね?

545 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 22:17:34.37 ID:Qe+dZ6A/0.net]
おれは何を言ってるんだ??

546 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 22:20:37.80 ID:dxLim7GAx.net]
>>542
>const char *sの順番が納得いかない
>直感的にはchar * const sだろうが!!

前者はポイントされる文字列が const で、後者はポインタ自体が const でしょ

547 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 22:42:49.53 ID:uQ5be57j0.net]
const char* const s
これも直感的じゃないって言うんだろうか

548 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 22:43:19.23 ID:dxLim7GAx.net]
546です
すみません、それを踏まえてということか…

549 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 22:50:32.56 ID:g+WSNcLQ0.net]
const は後置で書いたほうが整合性が取れる
char const * const s:
しかし、見た目的にかわいいのは前置である
const char * s;
私はかわいいのが好きである
よって前置は使わない

550 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 22:58:11.13 ID:g+WSNcLQ0.net]
そこで私が提案したいのが「strong」である
strongは修飾したデータをすべてconstにする
つまり
char const * const s;

strong char * s;
は等価である



551 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 23:13:59.86 ID:ICazHXPW0.net]
>>550
安易な予約語の追加は嫌われるよ

552 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 23:18:11.31 ID:EySzsoWc0.net]
「strongがやられたようだな…」
「フフフ…奴は四天王の中でも最弱…」

553 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 23:19:03.80 ID:/Cc9wbE10.net]
<strong>char* s</strong>

554 名前:デフォルトの名無しさん mailto:sage [2019/07/16(火) 23:22:51.61 ID:uQ5be57j0.net]
stringと間違えそうで嫌だなw
readonlyはc#で使ってるしな
やっぱconstだな

555 名前:デフォルトの名無しさん [2019/07/16(火) 23:40:17.89 ID:awioItM70.net]
大文字で CONST にするとか。

556 名前:デフォルトの名無しさん mailto:sage [2019/07/17(水) 04:24:07.40 ID:CqcyHUxLd.net]
フン
char *const_s

557 名前:デフォルトの名無しさん mailto:sage [2019/07/17(水) 06:33:32.66 ID:Pp4wfZXK0.net]
>>546
const int a → constなint型のa
const char *s → constなchar *型のs
constなのはchar *つまりポインタ(直感)
char * const s → char *型のconstなs
constなのはsつまり文字列自体(直感)
なんで逆!!

558 名前:デフォルトの名無しさん mailto:sage [2019/07/17(水) 06:46:44.61 ID:NB17uhF90.net]
> const char *s → constなchar *型のs

ギャグだよな?

559 名前:デフォルトの名無しさん mailto:sage [2019/07/17(水) 06:57:50.40 ID:i06pHchL0.net]
宣言は右から左に読む
const等の修飾は左にかかる
char const * const s; // sは、const *である、const char型の

右にかかるなら↓のように書けないとおかしいがこれは構文エラーである
const char const *s;

変数名はただの識別子で、ある領域にsという名前を付けただけにすぎない
constやvolatileは型修飾子であり、これらが付くのは型に対してである
〜という領域を、以後sと呼ぶ、である

560 名前:デフォルトの名無しさん mailto:sage [2019/07/17(水) 07:14:03.66 ID:NB17uhF90.net]
ちげーよ
宣言は真ん中から左右に読むんだよ
char const *(* const s)[1];



561 名前:443 mailto:sage [2019/07/17(水) 09:21:48.88 ID:u050lnGw0.net]
>>526
引数チェックに関しては、Java のコーディングルールでは、
外部の人用のAPI、つまりpublic な関数には、必要

一方、そのモジュール・クラスの実装者が使う、
内部的なAPI、つまりprivate な関数には、いらない

既にどこかで、エラーチェックしてるから、何回も同じエラーチェックするのは、無駄

562 名前:デフォルトの名無しさん mailto:sage [2019/07/17(水) 21:08:01.97 ID:E0YvS3zE0.net]
const char *sは*sがconst
つまりポインタsの指すアドレスにある値が不変だけどsがどこを指すのかは可変

char *const sはsがconst
つまりポインタsがどこを指すかは不変だけどsの指すアドレスにある値は可変


大体こんな認識で合ってる?

563 名前:デフォルトの名無しさん mailto:sage [2019/07/17(水) 23:04:57.90 ID:Pp4wfZXK0.net]
あってるけど納得いかないって話
1つ目がまず何で*sにかかるんだよ
自然に読んだらconstはchar *にかかるだろ
右から読むとか頭おかしいわ、アラビア語かよ

564 名前: mailto:sage [2019/07/17(水) 23:22:42.51 ID:UrUB0t8/0.net]
>>563

char * s;

に 1 個の const を追加するとき、形式的に追加できる場所は 4 箇所

a) char * s const;
b) char * const s;
c) char const * s;
d) const char * s;

このうち a) はコンパイルできない
b) c) は可能だが、の二つの間で意味は異なる
d) は本来ならエラーであるべきだと私は考えているが、実際には c) と一緒の意味になっている

565 名前:デフォルトの名無しさん mailto:sage [2019/07/17(水) 23:34:56.30 ID:RL7WDafS0.net]
C言語使う時はいつ?
早いコードが欲しい時
メモリー消費に無駄のないコードが欲しい時
他ある?

566 名前: mailto:sage [2019/07/17(水) 23:39:48.74 ID:UrUB0t8/0.net]
>>565
他の言語はほとんどわからず(かじってはみたものの使えるまでにはMPがあがらず)、C/C++ でしかまともに書けないし発想できないからです…

567 名前:デフォルトの名無しさん mailto:sage [2019/07/17(水) 23:42:49.57 ID:FDkzfNlT0.net]
>>563
実はアラビア語って可能性はないのか?

568 名前:デフォルトの名無しさん mailto:sage [2019/07/17(水) 23:49:47.36 ID:Pp4wfZXK0.net]
そもそもconst char *sの宣言の時の切れ目がconst / char / *s なのも何だかなぁ
const / char * / s でconstはchar *にかかれよjk
現実に間違ってるのは渋々受け入れてるけど開発者が許せない

569 名前:デフォルトの名無しさん mailto:sage [2019/07/18(木) 00:00:28.28 ID:OLFUgkogx.net]
>>564
自分は b or(and) d かなー

570 名前:デフォルトの名無しさん mailto:sage [2019/07/18(木) 00:33:34.97 ID:Nr80YdQr0.net]
>>565
他に思い付くところとしては、
組み込み環境などで、C言語以外の選択肢がない、または他の言語で実行できる環境を整えるよりCを使った方が楽な場合。
外部のライブラリのインタフェースがC言語で、呼び出す部分をCで作る方が楽な場合。
バイナリファイルの操作などポインタ操作を使って実装しやすい場合。



571 名前:デフォルトの名無しさん mailto:sage [2019/07/18(木) 00:48:28.58 ID:Nr80YdQr0.net]
>>568
単純なポインタのことしか考えないから、左から右にこだわってんだろ。
>>560も指摘している通り、変数宣言の構文は内から外だぞ。配列や関数ポインタも交えて、それらを多段階の組み合わせにしても一意に解釈できるのを理解すれば、合理的な物だとわかると思うよ。

>>563
1つ目は、constがかかってるのはcharだぞ。内側から解釈するとsは*が付いているからポインタであり、それが指す型がconstなcharだ。

572 名前:デフォルトの名無しさん [2019/07/18(木) 05:33:10.45 ID:yO5P6Jqp0.net]
char *s
の意味は*sはchar型だよって意味で
sはchar *型だよって意味じゃないよ

573 名前:デフォルトの名無しさん mailto:sage [2019/07/18(木) 05:43:05.99 ID:xY9KzRxOd.net]
>>572
こう理解できてるとわかりやすいね。つまり
const char *s

*s(sの指す先)はchar型でさらにconstだよ
となる。

574 名前:デフォルトの名無しさん mailto:sage [2019/07/18(木) 06:48:06.17 ID:2qyz/4gG0.net]
>>572
その宣言から以後、
sという式がchar*型
*sという式がchar型
2つの意味を同時に表現してるんだよ

575 名前:デフォルトの名無しさん mailto:sage [2019/07/18(木) 07:54:18.60 ID:kb0ZHGx0M.net]
*と*const があると憶えるべき。

576 名前:デフォルトの名無しさん [2019/07/18(木) 09:56:03.22 ID:q9HPUerJa.net]
>>563
ポインタを表す * が型にくっついてるんじゃなくて変数にくっついてるからでは?
分かりにくいなら typedef でポインタの型を作ってそれを使えばいいんじゃないな。

右から読む事に関しては英語を日本語に翻訳する時に順序を入れ換えた方が自然な感じになる事があるのでなんとも言えんな。漢文のレ点みたいなものもあるしな。
日本語とは逆順の方が自然な表現になる言語はある。そして歴史的な事情で混在してしまっているのもある(アメリカでの年月日が月日年の順だとか)。
生まれながらにしてその言語使ってればその人にとってはそれが一番自然な表現だからな。

577 名前:デフォルトの名無しさん mailto:sage [2019/07/18(木) 10:04:50.81 ID:xY9KzRxOd.net]
>>574
結果はいっしょでも解釈の仕方は複数ある感じだね。
自分にとって理解しやすいので
char *s

sの指す先はchar型、つまりsはポインタ
って言う風に捉えてる。

578 名前:デフォルトの名無しさん [2019/07/18(木) 21:25:27.83 ID:PbeogWAD0.net]
この話は何時も混乱するんだけど
結局の所は
自分の言葉で理解するまでやる
これをやらないと混乱してしまう

なぜそうなってしまったのか?
という視点で解釈しようとしないと
なかなかにc言語って難しい
その辺は例のc言語ポインタにのみついて書かれた本
あれを読んで
後は何とか自分の言葉で理解して解釈するしか方法が無い

それとこんなになってしまっている原因に
キーボード上の記号が少ない
というのもある
basic何かでは記号類は四則演算類だけ使って
なるだけ英単語?を使って記述するようになっている
だから使う場所によって記号の意味が違う
なんていうのが起こりにくくなってる
ある意味c言語が普及してしまったのはプログラミング世界にとっては不幸なのかもしれない

579 名前:デフォルトの名無しさん mailto:sage [2019/07/18(木) 21:30:10.98 ID:1zgaXsge0.net]
C言語って初心者向けに作られたものではないと思う

580 名前: mailto:sage [2019/07/18(木) 21:32:28.55 ID:/oDno/7H0.net]
>>578
私も最初に C をやったときには、ここまで流行るとは思わなかったんです、むしろ pascal の方が筋がいいと思っていたのですが、どうしてこうなってしまったのでしょうか?



581 名前: mailto:sage [2019/07/18(木) 21:34:00.28 ID:/oDno/7H0.net]
>>579
当時は初心者用とかは特に無くて、BASIC でもある程度できる人はすぐに peek, poke を連発するようになったものです、最近の人は甘えていると思います

582 名前:デフォルトの名無しさん mailto:sage [2019/07/18(木) 21:41:19.07 ID:AzHVv8Pq0.net]
>>580
UNIXがCで云々というのもあるけど、良い意味で高級アセンブラとして使い勝手が良かったからじゃないかな?

583 名前:デフォルトの名無しさん mailto:sage [2019/07/18(木) 22:00:46.19 ID:8m1lI2X40.net]
厳格で融通がきかないと嫌われる
pascalはそんな感じ

584 名前: mailto:sage [2019/07/18(木) 22:15:37.33 ID:/oDno/7H0.net]
>>583
delphi は結構流行ったと思ったんですけれど…

585 名前:デフォルトの名無しさん mailto:sage [2019/07/18(木) 22:18:08.64 ID:0kCblb2b0.net]
pascal失速最大の原因は:=だろう
これを採用している言語はもう一つも無い
プログラミング業界最大かつ唯一にして不可侵の大例外を抱えてるのがpascalだ

586 名前:デフォルトの名無しさん mailto:sage [2019/07/18(木) 22:30:23.30 ID:1zgaXsge0.net]
pascalで開発したアプリっていうと
JaneStyleが有名かな?

587 名前:デフォルトの名無しさん mailto:sage [2019/07/18(木) 22:32:00.45 ID:1zgaXsge0.net]
厳格で融通がきかないのは、教育用として最適だと思う

588 名前:デフォルトの名無しさん mailto:sage [2019/07/18(木) 22:35:15.64 ID:ugDCzjFC0.net]
pascalでUNIX張りのOS書いていれば流行ったかもね

589 名前:デフォルトの名無しさん [2019/07/19(金) 00:19:03.24 ID:7Hdy7m6i0.net]
>>585
Modula-2は:=だったような気がする。

590 名前:デフォルトの名無しさん [2019/07/19(金) 00:22:05.35 ID:7Hdy7m6i0.net]
>>588
Delphiみたいに拡張されてれば可能だとは思うがコードが大きくなりそうなので昔のPCでは苦しいかもね。
ただし、Androidみたいに元のOSの上に乗っけて動くOSなら行けるかも。



591 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 00:25:42.16 ID:Mih8lrFJ0.net]
もう一つが奥の深さでC言語ではポインタが奥の深い箇所にあたる
この難易度が絶妙で難しい難しいと言われていて初学者には適度に難しいので挫折者が増える、
挫折者の総量が言語の価値を決定する

教育用に作られた言語は難しい箇所とか理屈に合わない箇所とか奥の深い箇所とかが無いのでオカルトとしての魅力が無い
学習曲線がいびつじゃないと流行しない

592 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 00:30:44.87 ID:QK1dwfXD0.net]
ポインタはただの入り口だろ
Cは入り口で躓く奴が多いだけで奥は寧ろ浅い

593 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 00:36:04.81 ID:nbu0jJrl0.net]
ポインタ使わないでもC言語ってプログラム書けるんだよな
無理して難しいことをしなくても良いと思う
ちゃんと動くかどうかの方が重要

594 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 00:38:14.85 ID:QK1dwfXD0.net]
ポインタを使わないならCを使わない方がいい

595 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 01:10:46.83 ID:0vO2r76S0.net]
超無理矢理ならポインタ使わずになんでもできるんかな?
いずれにせよポインタ理解してないとライブラリ使えなくて詰むでしょ。たぶん突然落ちたりメモリリークだらけのプログラムができあがるはず。

596 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 01:25:31.41 ID:nbu0jJrl0.net]
グローバル領域に予め必要な変数や配列確保しておけば
メモリーリークが発生する余地はないw

597 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 01:28:45.01 ID:QK1dwfXD0.net]
ネタで言ってるのか本気で言ってるのか判断が付かない

598 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 01:46:29.51 ID:ZOnA3nWq0.net]
ポインタ難しいって言われてるけどそんなに難しいか?
メモリイメージできれば理解できると思うけどな

599 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 02:19:29.42 ID:1jezjf9K0.net]
俺はポインタは難しいことがわかってたから、一度にすべて理解しようとしなかった
数年使って徐々に理解した
それが正解だった

600 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 02:49:16.94 ID:ApXEphk20.net]
初期化してないポインタにアクセスするとどうなっちゃうの
とか危険そうなのは試してないからわからないが
ハードウェアのイメージがあれば難しさはあまりない
(命名規則で Xxx_p と書いておけば



601 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 06:09:16.79 ID:8762T9lH0.net]
> (命名規則で Xxx_p と書いておけば

システムハンガリアンは大大大大大嫌い

602 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 07:17:09.85 ID:gH0zRzIgM.net]
>>585
ada, APLも知らない情弱知ったかは黙っとけ

>>589
まあ作者は同じだから後継って感じだし

603 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 09:10:50.31 ID:EJb/7aTM0.net]
>>599
そういう人もいるのか
おれはアセンブラもやってたので秒で理解した

604 名前:デフォルトの名無しさん [2019/07/19(金) 09:29:24.25 ID:uab/wKdga.net]
>>580
マイコン用の小さいコードも作れるから。
昔のマイコンやPCはメモリが物凄く少ないのでその辺は重要。
少なくとも毎回でかいランタイムライブラリがくっついてしまうようではダメだ。

それと元々 UNIX の記述用に使ってた言語なので Linux 等の互換OSでも使われていて、そういうのが徐々に広まっていったので、それを通してCが流行った面もあると思う。

605 名前:デフォルトの名無しさん [2019/07/19(金) 09:39:17.61 ID:uab/wKdga.net]
>>603
アセンブラできるとポインタについては理解が楽だよね。
アセンブラの方では普通に使う考え方だし。(というかないとプログラム作れないぐらい重要)。

606 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 11:29:42.41 ID:1jezjf9K0.net]
>>603
はじめてのプログラミング言語がCだったからな
けっこう苦労したよ、先輩

607 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 11:43:44.67 ID:nbu0jJrl0.net]
プログラムはZ80からなので、当たり前のようにアセンブラから学習した
CPUの仕組みを学ぶのにちょうど良かった気がする

608 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 12:47:23.54 ID:8762T9lH0.net]
Z80だとパイプラインとかあんまり憶えないよな
でRISCブームのとき苦労させられたと

609 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 13:03:51.18 ID:hLCIQJ7mx.net]
まぁZ80全盛期にパイプラインしてたCPUなんて限られてたしな。
そういう汎用コンピータはほぼ高級言語使われてたし。

610 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 13:07:02.40 ID:8762T9lH0.net]
6502とか



611 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 13:28:17.26 ID:EJb/7aTM0.net]
>>606
C++とかじゃ未だにオーバーライドとオーバーロードを間違えるので
レベル的にはおまえとドッコイだよ、後輩

612 名前:デフォルトの名無しさん mailto:sage [2019/07/19(金) 14:13:06.92 ID:ZOnA3nWq0.net]
ムカデ長老を見習え

613 名前:デフォルトの名無しさん mailto:sage [2019/07/20(土) 21:04:06.20 ID:lWqONft90.net]
泣いてる顔文字→( ; ; )がforの無限ループにしか見えないのですが、職業病でしょうか?

614 名前:デフォルトの名無しさん mailto:sage [2019/07/20(土) 21:31:18.65 ID:TRa6Slo50.net]
8086のアセンブラはセグメントで挫折する・・・と言われてたけど
Z80やってたらすんなり理解できたな。

615 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 01:27:26.84 ID:3tY7pLz50.net]
>>613
煽りとかで()とか書かれてると関数に見えるときある
例: 職業病()とか言われましても

616 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 04:14:55.91 ID:Nmc6oncn0.net]
>>615
草、見えたことないわw

617 名前:デフォルトの名無しさん [2019/07/21(日) 06:51:52.49 ID:F3an1Rtm0.net]
>>613
はい。

>>614
セグメントすごくわかりやすいと思うけどな。まともに説明出来る人と巡り会えなかったのだろうか。

618 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 08:20:20.57 ID:/atv33Bt0.net]
>>608
わかりやすいけど面倒だよね

619 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 15:59:50.66 ID:FmQzr+LX0.net]
>>613
forで無限ループつかうの?
おれはwhileかなw

620 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 16:10:09.79 ID:g8U8cyIO0.net]
forの方が短くてすむじゃないか



621 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 16:20:48.28 ID:PhbbaTTy0.net]
>>614
Z80にセグメントの概念なんてあったけっけ?
メモリバンク切り替えは機種によってはあったけど、あれはZ80の機能ではないし。

622 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 16:27:59.21 ID:m/GaQUZU0.net]
空白のcontinue節みたいなのに入る必要がないから
ちょっとwhileのほうが早いイメージ

623 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 16:43:59.35 ID:g8U8cyIO0.net]
>>622
インタープリターじゃないんだからさ

624 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 16:52:32.65 ID:/atv33Bt0.net]
>>619-620
俺はfor(;;)だな
while(TRUE)は警告表示されることが多かったから

625 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 18:08:15.14 ID:Q0wcPMRB0.net]
for (;;) とwhile (1) がどっちがぱっと見分かりやすいか戦争勃発しますか?
あとfor派は;;周りにスペースを入れるか入れないかでさらに細かく派閥が分かれていると聞きました!

626 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 18:19:58.86 ID:FmQzr+LX0.net]
>>625
まさに永久ループ戦争!

627 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 18:30:02.78 ID:+S54SSox0.net]
字下げのいらないgotoも参戦

628 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 18:32:50.79 ID:Q0wcPMRB0.net]
あ、do {} while(1);派も出てくるとおもうので皆さん頑張ってください応援してます

629 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 18:38:59.23 ID:g8U8cyIO0.net]
do while(0)は便利

630 名前: mailto:sage [2019/07/21(日) 18:39:57.32 ID:vddupZNY0.net]
>>629
それは #define で使うときだけでしょう?



631 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 18:44:37.26 ID:g8U8cyIO0.net]
いや、エラー判定とかでもよく使うだろ?

632 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 18:48:06.96 ID:I0JRxlnTx.net]
for (;;) は forever と読むとか

633 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 18:50:32.60 ID:/atv33Bt0.net]
バッドノウハウに近いが
do {
if(...) break;

if(…) break;

} while(0);
みたいなのは昔書いてたわ

634 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 18:52:10.72 ID:Q0wcPMRB0.net]
do {} while (0); の意味と目的【do while false イディオムの利点】 | MaryCore
ttps://marycore.jp/coding/do-while-false-idiom/

635 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 18:58:23.23 ID:FmQzr+LX0.net]
flag=true;
while(flag)
{
flag=(....);
}

636 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 19:09:32.73 ID:/atv33Bt0.net]
>>634
do {
if (that(value)) break;
if (value == -1) break;
if (value == 0) break;
puts("有効な値です");
} while (0);
みたいなのは
do {
if (
that(value)
|| value == -1
|| value == 0
) break;
puts("有効な値です");
} while (0);
って書けばいいだけ
do {
if (that(value)) break;
value = f(…);
if (value == -1) break;
value = g(…);
if (value == 0) break;
puts("有効な値です");
} while (0);
みたいに間に処理をはさまる場合が難しい

637 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 19:18:11.94 ID:Q0wcPMRB0.net]
このスレって直接ここに複数行のソース書き始める人多いよね

638 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 19:37:52.68 ID:m/GaQUZU0.net]
>>633
小さなスコープを作るため?

639 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 19:39:13.75 ID:g8U8cyIO0.net]
breakが使えるスコープね

640 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 20:14:20.69 ID:/SITzbMm0.net]
#define fe for( ; ; )
が最強



641 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 20:35:26.43 ID:+S54SSox0.net]
>633
おかしな事してるのが一目で、continue が外に漏れるこれ オススメ
switch(0)default:{

642 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 20:45:42.22 ID:R+Rb+3j1d.net]
gotoが便利すぎて禁止されがちなのが悪い。ちゃんと使えばコードが見やすくなることこの上なしなのに。

643 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 21:09:22.26 ID:/atv33Bt0.net]
>>642
そう言うこと
なので最近は素直にgotoで書くことが多い
一部の言語の様にブロックに名前付けて
break 名前;
でそのブロックを抜けられるようにしてくれれば良いのにと常々思う

644 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 21:21:29.94 ID:m/GaQUZU0.net]
ないものねだりではありますが
perlのようにブロックやループの頭にラベルをつけて、
redo next last があったらもっと良い
do {...} while(0); も {} と簡潔

645 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 21:42:59.10 ID:ZJZWYLqf0.net]
>>642
便利すぎってどういうことだよ
教条主義的goto禁止論の域を出とらんだろうが

646 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 21:46:07.68 ID:AbjqA2h30.net]
>>621
インデックスのことかも

647 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 22:36:03.44 ID:c+HlyquL0.net]
>グローバル領域に予め必要な変数や配列確保しておけば

>ネタで言ってるのか本気で言ってるのか判断が付かない

実際に仕様なんかがしっかりしているタイプで
メモリー確保が動的に大きく変化しないものなら
実際にそういう風に作っているのを聞いた事は有る

配列式だと動的に確保したり開放したりが無く
リークしたり無効になったりしない分かなり安全
実行開始時に使用する領域が完全に確保されているから

648 名前:デフォルトの名無しさん mailto:sage [2019/07/21(日) 23:24:53.03 ID:R+Rb+3j1d.net]
>>645
すまん、そんなに深い意味はない。

649 名前:デフォルトの名無しさん mailto:sage [2019/07/22(月) 00:04:19.79 ID:PN8KKKdJa.net]
静的な所にプール作るのはメモリ制限ある組込では割とあったと思いますよ

650 名前:デフォルトの名無しさん [2019/07/22(月) 15:35:08.24 ID:vmYUDJ0Ja.net]
>>643
最近の言語ではそういうのあるね。
とはいってもJavaには既にあったのでかなり前からあるな。
Java以前はあるかどうか俺は知らん。



651 名前:デフォルトの名無しさん [2019/07/22(月) 15:37:04.86 ID:vmYUDJ0Ja.net]
あ、Perlもループにラベル付けてlastで抜けるなんてのあるな。

652 名前:デフォルトの名無しさん mailto:sage [2019/07/22(月) 16:18:33.80 ID:QnLUYAOH0.net]
break ラベル で、多重ループから一気に抜けられると便利なんだがな

653 名前:デフォルトの名無しさん mailto:sage [2019/07/22(月) 16:35:14.27 ID:rxI3cfFL0.net]
gotoが便利すぎというより
単純な break returnで間にあわないときには
それしか制御がないのでは

654 名前:デフォルトの名無しさん mailto:sage [2019/07/22(月) 17:24:33.59 ID:7pc0Xm6O0.net]
二重ループから抜けるにはgotoが一番
gotoを廃止した言語制作者は天罰を受けるべき

655 名前:デフォルトの名無しさん mailto:sage [2019/07/22(月) 17:30:50.79 ID:rxI3cfFL0.net]
goto はそれで使われている保障がないから、
保守性のためにも
ループなどに名前付けて、それを抜けると明記したい

656 名前:デフォルトの名無しさん mailto:sage [2019/07/22(月) 17:54:19.31 ID:e8FkVPqsa.net]
まず多重ループを避けろと

657 名前:デフォルトの名無しさん [2019/07/22(月) 18:05:34.66 ID:LktYqlpm0.net]
gccで X Window System (x11) でウインドウつくって画像合成するのって

どうすればできますか? なにかサンプルプログラムなど無いでしょうか?

658 名前:デフォルトの名無しさん mailto:sage [2019/07/22(月) 18:22:30.58 ID:QnLUYAOH0.net]
>>656
二次元配列を総なめする場合に
ループを 1変数でやるのかな?

659 名前:蟻人間 mailto:sage [2019/07/22(月) 18:36:31.65 ID:zh10SCAHd.net]
>>657
古本を漁ればやり方が書いてあるかも。
XScreenSaverのソースみれば参考になるかも。

660 名前:蟻人間 mailto:sage [2019/07/22(月) 18:39:10.09 ID:zh10SCAHd.net]
いにしえのシステムなら、関数名をmanコマンドで引けば、X Windowの関数のマニュアルが見られるはず。



661 名前:デフォルトの名無しさん [2019/07/22(月) 18:42:21.76 ID:LktYqlpm0.net]
>>659
linuxOSだとSDL(Simple DirectMedia Layer)で書いたほうが情報が多く 
描画書き換え速度もはやい気がします

SDLに移行したほうがやはり無難でしょうか?

662 名前:デフォルトの名無しさん mailto:sage [2019/07/22(月) 18:50:51.45 ID:QnLUYAOH0.net]
質問者自身で決定すれば良いと思うが

663 名前:蟻人間 mailto:sage [2019/07/22(月) 18:54:21.58 ID:zh10SCAHd.net]
>>661
X11は将来、Waylandにバトンを渡すらしい。新しい端末ではX11が採用されない状況が考えられる。クロスプラットフォームの方が安心かな?

664 名前:蟻人間 mailto:sage [2019/07/22(月) 18:56:55.15 ID:zh10SCAHd.net]
暗号化されてないX11をネットワークで見たら丸裸だからあんまり使いたくないよね。

665 名前:デフォルトの名無しさん [2019/07/22(月) 19:02:32.68 ID:LktYqlpm0.net]
ネットワーク環境はsshしか使ったこと無いのですが
SDL_net などは関数に暗号化などがふくまれているのですか?

666 名前:蟻人間 mailto:sage [2019/07/22(月) 19:08:12.59 ID:zh10SCAHd.net]
>>665
ソーシャルゲームを作るなら、暗号化は必須。暗号化方式を決めて、それに合った暗号化専用のライブラリーを使う形になる。

667 名前:デフォルトの名無しさん [2019/07/22(月) 19:10:57.83 ID:LktYqlpm0.net]
>>666
C言語の暗号化ライブラリで使いやすいのおせーてください

668 名前:蟻人間 mailto:sage [2019/07/22(月) 19:22:24.63 ID:zh10SCAHd.net]
ソーシャルゲームは専門ではないが、暗号化なら
https://ja.m.wikipedia.org/wiki/%E6%9A%97%E5%8F%B7%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E6%AF%94%E8%BC%83

669 名前:デフォルトの名無しさん mailto:sage [2019/07/22(月) 19:25:19.41 ID:MRg17CtQa.net]
いろいろあるんですけど、ライセンス的にopensslでいいやみたいな感じになりましたね
waylandは5年後くらいにはなんとかなるんかな。どういうレイヤでサービス提供したいのかよくわからん所がある。

670 名前:デフォルトの名無しさん mailto:sage [2019/07/22(月) 21:33:35.10 ID:tAjmkx+m0.net]
同じくopensslでいいんじゃないかと思いますな



671 名前:デフォルトの名無しさん [2019/07/23(火) 03:25:09.81 ID:/ZO3BTO70.net]
gchar **command = (gchar *[]){"./Hello.exe","World",NULL};

を gcc6 で compile すると以下の2種類の warning が出ます。

warning: ISO c++11 does not allow conversion from string literal to 'gchar *' (aka 'char *') [-Wwritable-strings]

warning: pointer is initialized by a temporary array, which will be destroyed at the end of the full-expression [-Waddress-of-array-temporary]

どう書くのが正解なのでしょうか? 教えてください。最後の NULL がなければ、

gchar **command = (gchar **)((char [][20]){"./Hello.exe","World"});

で良いと思うのですが、最後の NULL も必要です。よろしくお願いします。

672 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 04:01:15.67 ID:XJs/DfWFa.net]
要素の文字列をそれぞれキャストしてみるとか?
でも別に文字列の実体を用意した方が無難では。

673 名前:デフォルトの名無しさん [2019/07/23(火) 05:54:57.80 ID:XS6t8zxL0.net]
char * const command[3] = {"./Hello.exe","World"};

674 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 09:58:47.20 ID:J+ZHGa1Mr.net]
初心者で勉強中なんですが、
switch文は
if文みたく
switch(a >0)のように()の中に関係演算子を使った式はかけないんでしょうか?
エラーがでるので無理なのかなと思ったんですが

675 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 10:46:29.88 ID:DdnFitx+M.net]
エラーじゃなくて警告では?
動かない理由はないと思うのでgccで試してみたけど、ちゃんと動いたよ。
ただ、結果は1か0の2値しかないのでif文使ったほうが良いと思うよ

676 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 10:51:17.50 ID:unlUKZmGx.net]
本当は
 switch (a) {
 case a > 0:
...
的なことをしたかったのではないかとエスパーしてみる。

677 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 11:36:41.71 ID:LSxEgoA20.net]
>>674
これなんか意味あるの?
具体的に何がしたいか知りたいなあ

678 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 11:42:11.95 ID:CU39ntZ20.net]
>>676
switch(true) って裏技 あれマジで気色悪いよね

679 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 11:44:08.90 ID:SF2VCGvmM.net]
case に何を書けばいいんだ?false は 0 でいいだろうけど、true は?

680 名前:671 [2019/07/23(火) 11:49:30.09 ID:/ZO3BTO70.net]
>>673
>char * const command[3] = {"./Hello.exe","World"};

ありがとうございます。これでも1つめの warning "does not allow conv..." は出ました。皆さんの所では出ませんか?

それと、 command はどうしても char ** 型である必要があります。
仮想端末で何かを実行させる関数 vte_terminal_spawn_async() に与えるためです。
https://developer.gnome.org/vte/unstable/VteTerminal.html#vte-terminal-spawn-async

引き続きアドバイスをお願いします。



681 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 11:53:01.06 ID:4sm3RNn+0.net]
>>674
書くことはできる
関係式は int 型の 0 または 1 という結果を生じるので
switch (a > 0) は a の値により
switch (0) もしくは
switch (1) と等価になる

おまえさんが言いたいのは switch で範囲チェックができるのか
ということだろうがそれはできない
a と case に指定した定数の == 比較しかできないのが switch だ

不等号や != が使いたければ if 文か3項演算子ということになる

682 名前:671 [2019/07/23(火) 12:04:01.45 ID:/ZO3BTO70.net]
>>672
ありがとうございます。具体的にはどうしたら良いでしょうか?

char list[2][20] = {"./Hello.exe","World"};  
gchar **command = (gchar **){ (char *)list[0], (char *)list[1], NULL};

だと、↓のエラーになります。
error: function-style cast to a builtin type can only take one argument

正しいやり方をお願いします。

うーむ。どうしたものか。 gchar ** 型をどうやって作るのかさっぱり分からない。。。
ダブルポインタがよく分かってない。もう warning は放っておくしかないのかな?

683 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 12:10:49.21 ID:XJs/DfWFa.net]
その前に、671の警告でC++11って出てるのはなぜなのか。
複合リテラルってあれキャストではないよな。知らんけど。

684 名前:671 [2019/07/23(火) 12:21:12.41 ID:/ZO3BTO70.net]
>>672

gchar list1[][20] = {"../Exe/H2O.exe","World"};
gchar *list2[] = {(gchar *)list1[0], (gchar *)list1[1], NULL};
gchar **command = (gchar **)list2;

いろいろ試したところ、↑だと warning でなくなりました。意図されたのはコレでしょうか?コレで良いでしょうか?

685 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 12:21:15.34 ID:d2s+lfJ+0.net]
>>682
https://ideone.com/a1eBqF
これなら警告出ないけど、やりたいことと合ってるかどうかは知らん

686 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 12:22:08.73 ID:7yf4dx7Q0.net]
>>680
文字列リテラルは書き換え不可なので当然の警告。
char const* const command[] なら警告は出ないだろうけど、渡した先で書き換えしない保証がないならアウト。
渡した先で書き換えしない保証がないなら、リテラルでの初期化は無理だと思う。

687 名前:671 [2019/07/23(火) 12:24:46.80 ID:/ZO3BTO70.net]
>>683
なんかおかしいですよね。

でも Makefile に書いていいて実際に compile に使っているのは間違いなく gcc6 です。
warning が g++6 と共通なのですかね?

688 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 12:30:44.31 ID:d2s+lfJ+0.net]
https://ideone.com/Cek4Tz
そもそもgcharってなんなの?
charのエイリアスかなんか?

689 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 12:33:40.67 ID:d2s+lfJ+0.net]
> warning: ISO c++11 does not allow conversion from string literal to 'gchar *' (aka 'char *') [-Wwritable-strings]
charのエイリアスか
なら最初に書いとけよ

690 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 12:38:30.05 ID:XJs/DfWFa.net]
>>684
そういう話です。



691 名前:671 [2019/07/23(火) 13:18:08.85 ID:/ZO3BTO70.net]
>>688
ありがとうございます。スマートですね。参考にします。
gchar は char の別名です。すみません。

692 名前:671 [2019/07/23(火) 13:24:51.89 ID:/ZO3BTO70.net]
>>683
Makefile には gcc6 と書いてあるのですが、出力をみると c++ でコンパイルしていました。。。
今気づきました。 -std=c++11 もつけてある。
Cのソースを c++ でコンパイルするとマズいですか?今のところ何も問題はないです。

693 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 14:56:41.16 ID:XJs/DfWFa.net]
>>692
C++に複合リテラルないんじゃないかな。なくても困らんか。

あとさっきの配列の要素にstrdup突っ込むとconstにしなくていいかもな。
もしくはmemcpy(malloc(100),"hoge",5)とか。
標準に沿った書き方かどうかは知らん。

694 名前:671 [2019/07/23(火) 17:13:31.67 ID:TCk4qRZWa.net]
>>693
ありがとうございます。なるほど、複合リテラルですね。調べてみます。

自分、C で書いていて compile も C でやっているつもりだったんですが、コンパイラが c++ だった。。。
これは c++ 用の Makefile を流用した為です。
最初 c++ でアプリを作ろうとして、Makefile を用意して、ソースを書き始めたのですが、途中で仮想端末オブジェクトが c++ ではうまく使えない事が判明して、
ソースを C に書き変えたのです。Makefile はフラグ等あるので流用してしまった...

これ以上は困らないですかね。困った時にはコンパイラが c++ な為を疑ってみます。

strdup と memcpy も試してみます
これをヒントに検索していて g_strsplit なる関数もある事を発見しました。

695 名前:デフォルトの名無しさん [2019/07/23(火) 18:36:28.60 ID:5chEKyGia.net]
C++ には引数に void だけって関数がないらしいぞ。
その他細かい違いがあるかも知れないので要注意だ。

696 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 18:58:12.02 ID:Ffr5F2PG0.net]
どちらかというと()の解釈が違う
c++だと()は(void)と同じ
cは()が(void)と同じになる文脈とそうでない文脈がある

697 名前:デフォルトの名無しさん [2019/07/23(火) 19:36:26.79 ID:5chEKyGia.net]
こうしてまた(void)論争が始まり3スレぐらい消費されるのであった。

698 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 19:42:24.88 ID:FnKSwmbm0.net]
生兵法家しかいないスレだから仕方ないね

699 名前:デフォルトの名無しさん [2019/07/23(火) 19:45:15.53 ID:5chEKyGia.net]
また一つ燃料が投下された

700 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 20:15:50.53 ID:xWhG5FgG0.net]
線香花火程度



701 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 20:23:08.15 ID:d2s+lfJ+0.net]
strdupはいつになったら標準ライブラリに入るんですか?

702 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 20:55:09.99 ID:4sm3RNn+0.net]
> cは()が(void)と同じになる文脈とそうでない文脈がある

ほほう、それはどんな場合だ? 具体的なコードで示せるか?

703 名前:デフォルトの名無しさん [2019/07/23(火) 20:56:28.16 ID:LLlz9dHQ0.net]
>>668
>>669
>>670
ありがとう!
なんとかがんばってやってみます

704 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 21:08:17.10 ID:Ffr5F2PG0.net]
int f();

int f()
{
return 1;
}

705 名前: mailto:sage [2019/07/23(火) 21:21:24.40 ID:JcFEdZGk0.net]
>>702
@(void) と同じ
void f() { return; }
A(void)と違う
void f();

706 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 21:47:42.09 ID:4sm3RNn+0.net]
>>705
https://paiza.io/projects/v_bGi1kbrLaV_smq5mvcNA
https://ideone.com/iJZS6H
codepad.org/gy8qyLSL

707 名前: mailto:sage [2019/07/23(火) 21:55:11.77 ID:JcFEdZGk0.net]
>>706
thx 納得しました
https://ideone.com/0Bi6G8

708 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 21:58:12.31 ID:Ffr5F2PG0.net]
>>706
https://ideone.com/whHGrw

709 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 22:01:20.82 ID:4sm3RNn+0.net]
>>708
ん、何が言いたい?

710 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 22:13:17.57 ID:Ffr5F2PG0.net]
>>709
()と(void)が違う例
1行目のコメントはずして、2行目にコメントつけたらコンパイル通る

定義の時は()は(void)と同じで引数の無い関数の定義になる



711 名前: mailto:sage [2019/07/23(火) 22:19:55.80 ID:JcFEdZGk0.net]
>>710
>定義の時は()は(void)と同じで引数の無い関数の定義になる
そ、れ、が…
https://ideone.com/1jHHOQ

712 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 22:31:08.37 ID:cffvmBp10.net]
プロトタイプ宣言で引数部分を空にすると引数チェックがされなくなる
例えばこんなコードも動く
ideone.com/rjTqQt

713 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 22:43:31.16 ID:Ffr5F2PG0.net]
https://softwareengineering.stackexchange.com/questions/286490/what-is-the-difference-between-function-and-functionvoid

draftだから正規版で変わった可能性もあるが
n1570の133,134ページに記載がある

714 名前:デフォルトの名無しさん mailto:sage [2019/07/23(火) 23:42:31.01 ID:4sm3RNn+0.net]
>>710
すまんが、寝落ちする
明朝またくる

715 名前:デフォルトの名無しさん [2019/07/24(水) 02:42:47.45 ID:S0ZgllDI0.net]
はっ。ちょっと目を離したスキに(void)ネタだけでもうこんなに書き込みが。

716 名前:デフォルトの名無しさん [2019/07/24(水) 03:03:06.58 ID:VPRaWuN40.net]
2進数で表現されている多倍長整数を10進数の文字列に変換する場合、機械語レベルではどうするのが現代風ですか。

レジスタ長までならBCD変換でしょうか?

例えば、Cのprintf(“%d”, 12345)はどういう実装がされますか。

多倍長ならまた違ってきますか。

717 名前: mailto:sage [2019/07/24(水) 05:30:33.02 ID:+4E3jW9F0.net]
>>716
C++ ですが多桁長演算を書いています。
https://mevius.5ch.net/test/read.cgi/tech/1434079972/51
std::ostream &operator<<(std::ostream &stream, mpz_base_class c)
std::ostream &operator<<(std::ostream &stream, mpz_class c)

718 名前:デフォルトの名無しさん [2019/07/24(水) 06:54:11.66 ID:VPRaWuN40.net]
>>717
ありがとうございます。
多倍長演算では内部2進数のまま演算しているのですね。

719 名前:デフォルトの名無しさん [2019/07/24(水) 06:55:28.24 ID:VPRaWuN40.net]
改めて質問します。

2進数で内部表現されている整数を10進数の文字列に変換する場合、
機械語レベルではどうするのが現代風ですか。

レジスタ長までならBCD変換でしょうか?

例えば、Cのprintf(“%d”, 12345)はどういう実装がされますか。

720 名前:デフォルトの名無しさん [2019/07/24(水) 09:34:09.57 ID:UuFmwqvta.net]
現代風?

現代だろうが古代だろうが10で割った余りを並べながら10で割る事は変わらんと思うが。(CPUによってはBCDに一発変換なんて命令あるのかな?あればそれ使うと速いだろうね)。



721 名前:デフォルトの名無しさん mailto:sage [2019/07/24(水) 10:27:00.90 ID:H/U9sRCS0.net]
JIS X3010:2003
6.7.5.3 関数宣言子(関数原型を含む)
意味規則 宣言“T D1”においてD1 が形式
D ( 仮引数型並び )
又は
D ( 識別子並びopt )
をもつ場合,次のとおりとする。
識別子並びは,関数の仮引数の識別子だけを宣言する。関数定義の一部である関数宣言子で識別子並びが空の場合,関数が仮引数をもたないことを指定する。関数定義の一部でない関数宣言子の識別子並びが空の場合,仮引数の個数及び型の情報がないことを指定する(124)。
(124) “今後の言語の方針”(6.11.6 参照)。
(125) 両方の関数型が“古い形式”の場合,仮引数の型は比較されない。

6.11.6 関数宣言子 空の括弧を伴う関数宣言子(関数原型形式の仮引数型並びではない。)の使用は,廃止予定事項とする。
6.11.7 関数定義 仮引数の識別子並びと宣言並びを別々に与える関数定義(関数原型形式の仮引数の型及び識別子の宣言ではない。)の使用は,廃止予定事項とする。

722 名前:デフォルトの名無しさん mailto:sage [2019/07/24(水) 10:30:48.21 ID:sKxa8jzv0.net]
>>719
こうなっているらしい

printf()のソースコードで、ソースコードリーディングのコツを身に付ける (2/3):main()関数の前には何があるのか(5) - @IT
https://www.atmarkit.co.jp/ait/articles/1703/01/news170_2.html

723 名前:デフォルトの名無しさん mailto:sage [2019/07/24(水) 10:35:17.11 ID:q7vPBAFqa.net]
ソースのコメントで変数毎に「16進整数」とか「10進整数」とか区別してるのあったけど意味わからんかった。
全部intなのに。

724 名前:デフォルトの名無しさん mailto:sage [2019/07/24(水) 10:50:43.56 ID:H/U9sRCS0.net]
void f() {} //関数定義の一部である関数宣言子で識別子並びが空の場合,関数が仮引数をもたないことを指定する。
void g(); //関数定義の一部でない関数宣言子の識別子並びが空の場合,仮引数の個数及び型の情報がないことを指定する(124)。

int main()
{
f(1); //NG: 0個の仮引数に1個の実引数
g(1); //OK: 任意の仮引数に1個の実引数
}

void f(); //両方の関数型が“古い形式”の場合,仮引数の型は比較されない。
void g() {} //両方の関数型が“古い形式”の場合,仮引数の型は比較されない。

/*
D:\learn\c>cl 710.c /W4 /nologo /c
710.c

D:\learn\c>gcc 710.c -Wall -std=c18 -c

D:\learn\c>clang-cl 710.c /W4 /c
710.c(6,8): warning: too many arguments in call to 'f'
f(1); //NG: 0<8C><U+0082>?<BC><88><F8><90><94><82><C9>1<8C><U+0082>?<C0><88><F8><90><94>
~ ^
1 warning generated.

D:\learn\c>
*/

725 名前:デフォルトの名無しさん mailto:sage [2019/07/24(水) 12:11:20.90 ID:/HKiGEdd0.net]
>>723
ひょっとして変数の接尾語に10進数や16進数を表す3文字以下のものを
付けるべきなのでは?
他のところの計算の時に間違えてしまう可能性が減ると思う

726 名前:デフォルトの名無しさん [2019/07/24(水) 12:43:12.82 ID:PgWkyPpkM.net]
>>720
Z80やx86にはBCD関連の命令がありました。

最近のレジスタビット数の大きいプロセッサは知りませんので伺いました。

10で割った余りだと桁数nとしてO(n^2)の計算量になりますよね。
流石にそれはないかなと思っています。

727 名前:デフォルトの名無しさん mailto:sage [2019/07/24(水) 12:53:46.86 ID:iTtNhbrVM.net]
https://days-of-programming.blogspot.com/2016/01/picbcd.html?m=1

728 名前:デフォルトの名無しさん mailto:sage [2019/07/24(水) 13:07:48.35 ID:q7vPBAFqa.net]
O(n)じゃないか?
x64はもう命令ないんだね

729 名前:デフォルトの名無しさん mailto:sage [2019/07/24(水) 13:17:22.40 ID:/roNvT5Ja.net]
O(n)だね。
文字列変換時にBCDにするのではなく演算からBCDとして扱うプログラムを見たことある。
あまり効率が良いとは思えなかったが。

730 名前:デフォルトの名無しさん mailto:sage [2019/07/24(水) 17:12:57.35 ID:s/qhJVlP0.net]
x64の場合、ALUでやる2ケタの加減乗除の方は廃止だが、FPUでやる18ケタの10進と2進の間の変換はまだ使える



731 名前:デフォルトの名無しさん mailto:sage [2019/07/24(水) 17:15:31.56 ID:rxR1MP+Fd.net]
聞くのはここでいいのか微妙だけど質問です
abzのエンコーダで回転方向を検知したいんですがzパルスでリセットされるときに回転方向が正しく検知されなくなってしまうところの解決方法どなたか知ってますか

732 名前:デフォルトの名無しさん [2019/07/24(水) 17:21:50.17 ID:PgWkyPpkM.net]
>>728
mod 10でO(n)、
それを桁数nに比例した分繰り返すからO(n^2)
と考えています。

O(n)で内部2進表現の整数→10進数の文字列に変換ができればいいのですけどね。

あるいはdecimal型を持つ言語がありますが、そのような型では内部でBCDで持ってたりするのでしょうか。

733 名前:デフォルトの名無しさん mailto:sage [2019/07/24(水) 17:55:29.62 ID:YVgDjaZ/M.net]
1桁分のmod 10だけなら計算量は固定なのでO(1)
n桁分を繰り返すなら計算量はO(n)
すべての計算量のオーダーとしてはO(n)

734 名前:デフォルトの名無しさん [2019/07/24(水) 18:22:37.58 ID:+vIzXAhOd.net]
>>733
わかりました。
剰余を固定命令数でできる桁数内であればO(n)でできるということですね。

現在、内部2進表現の整数を10進数の文字列に変換する方法としては、mod 10の繰り返しがメジャー(ベスト)ですか?

printfの%dもこの実装が主流でしょうか。

735 名前:デフォルトの名無しさん mailto:sage [2019/07/24(水) 18:23:32.53 ID:q7vPBAFqa.net]
modの計算量が固定ってこともないんじゃ?
除数にかなり依存しそうな

736 名前: mailto:sage [2019/07/24(水) 19:18:26.26 ID:+4E3jW9F0.net]
>>718
そうです、10進法変換は表示のときにはじめて実施します

737 名前: mailto:sage [2019/07/24(水) 19:20:00.24 ID:+4E3jW9F0.net]
>>719
単純に 10 で割った余りを並べるだけですが、ただ >>717 で紹介したコードでは幾分かの最適化が追加されています

738 名前: mailto:sage [2019/07/24(水) 19:21:21.51 ID:+4E3jW9F0.net]
>>726
いや、10 で割った余りそのものであり、他に方法はありません
ただ、最適化の余地はあり、それは >>717 に示しました

739 名前: mailto:sage [2019/07/24(水) 19:22:41.56 ID:+4E3jW9F0.net]
>>729
BCD はインプリメントする側としてはやる気が起きないものだ、と思いますよ
足し算、引き算はいいとして、掛け算、割り算は BCD では実装できないのです

740 名前: mailto:sage [2019/07/24(水) 19:23:34.46 ID:+4E3jW9F0.net]
>>734
>現在、内部2進表現の整数を10進数の文字列に変換する方法としては、mod 10の繰り返しがメジャー(ベスト)ですか?

他に方法はありません、ただし最適化する余地はあると思っています



741 名前:デフォルトの名無しさん mailto:sage [2019/07/24(水) 21:42:02.70 ID:H/U9sRCS0.net]
>>739
は? 乗算と除算が実装できない??
俺らの脳には義務教育できっちり実装されているんだがw

742 名前: mailto:sage [2019/07/24(水) 21:53:50.78 ID:+4E3jW9F0.net]
>>741
今の話題は BCD
BCD にて効率的に乗算・除算を実装している CPU はありますか?

743 名前:デフォルトの名無しさん [2019/07/24(水) 23:16:58.12 ID:VPRaWuN40.net]
>>737
わかりました。
10進全桁を一旦BCDで全て求めなくても、
10進1桁ずつ求めることが出来るのですね。

>>738
単純に興味があるのでお聞きするのですが
「他に方法はありません」と断定する理由は何でしょうか。

効率を考えなければ、
単なる最適化ではない異なるアルゴリズムの他の方法が
容易に思いつきますが、例えば、
10で割る方法が原理的に最適であると証明できる
というようなことでしょうか。

744 名前:デフォルトの名無しさん mailto:sage [2019/07/24(水) 23:55:14.64 ID:gSIpsgHia.net]
秘密はvoidにありそう

745 名前:デフォルトの名無しさん [2019/07/25(木) 00:31:43.06 ID:iiNbTbUN0.net]
DIVやIDIVを上回る何かを見つけたとしたら大ごとですやん
除算器のない初期のRISCや貧ソな何かで無理矢理だとシフト使こた工夫もアリかもしれんけど
if (x<0) {x = !x; ...}
do {x = x>>4 +(v = t = (x&0xf), t>>=2, t &= (t>>1), v -= t*10, t);...}while (x)
みたいな?

746 名前:デフォルトの名無しさん [2019/07/25(木) 00:55:04.35 ID:iiNbTbUN0.net]
あ、2 と 4 で or 取らなきゃダメか

747 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 01:12:42.13 ID:AQEcWXoca.net]
テーブル探す様な方法はないの?

748 名前: mailto:sage [2019/07/25(木) 05:20:17.48 ID:1pUY2R+h0.net]
>>747
なるほど…そういう方向性はありえますね

749 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 06:55:37.49 ID:PBP8yj9y0.net]
>>742
そう、BCDの話だ
おまえさんはBCDでは乗算と除算が実装できないと言ったんだ
マイクロコードかどうかは関係ない

750 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 10:19:57.39 ID:PDyUwndbM.net]
>>747
あなんか昔はそういうHWがあったらしい



751 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 10:24:34.16 ID:PLeF7EkO0.net]
乗算部分はテーブル化しやすそう
除算は何処で軽くするのがいいのか皆目見当がつかねぇ

752 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 10:39:38.12 ID:AQEcWXoca.net]
10進表記に関しては、いきなり割り算するよりはまず9とか99とか999とか9999とかと引き算なり大小比較なりしてもよさそうだけども。

753 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 10:43:55.98 ID:AQEcWXoca.net]
まあ除算は昔からクソ遅いよな
floatで逆数かける感じの方が速そうだ

754 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 10:50:12.92 ID:D8pzUtDE0.net]
>>753
可能なら逆数を掛けたほうが早いなんてハックに効き覚えがある
(同じように2,4,8はシフト演算子で処理)

755 名前:デフォルトの名無しさん [2019/07/25(木) 12:08:29.39 ID:UzGMA6uu0.net]
ビットリバーサルについて質問です
誰もがわかりやすく簡単にできる方法は
C言語でどうなるでしょうか?

756 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 12:33:12.38 ID:IOfcNDqSM.net]
>>753-754
初期のスーパーコンピューターCray-1はそういう構造
って結構有名な話
https://news.mynavi.jp/article/architecture-389:amp/

757 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 12:35:03.65 ID:/OuGEEZ00.net]
整数定数除算は速度優先オプティマイズでアセンブラ出力見てみなよ

758 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 12:53:26.79 ID:5Cp6xaylM.net]
>>734
隣同士でひっくり返して、2こセットで隣同士でひっくり返して、4こセットで隣同士でひっくり返して…
ってやるらしい。賢いね
uint32_t reverse(uint32_t x) {
x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));
x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2));
x = (((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4));
x = (((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8));
return ((x >> 16) | (x << 16));
}

759 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 12:55:25.80 ID:5Cp6xaylM.net]
おっと>>755の間違い

760 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 13:08:04.63 ID:IOfcNDqSM.net]
>>755
簡単でわかり易いと言うなら素直にビット毎に処理すればいいと思う
unsigned int x = …;
unsigned int y = 0;
for(size_t i = 0; i < 32; i++){
y <<= 1;
y |= x & 1;
x >>= 1;
}
てな感じ
高速化したいならテーブル引くなりすればいいかと



761 名前:デフォルトの名無しさん [2019/07/25(木) 13:31:47.50 ID:UzGMA6uu0.net]
>>758
>>760
ありがとうございます
どちらともわかりやすいですね!

762 名前:デフォルトの名無しさん [2019/07/25(木) 13:33:38.69 ID:UzGMA6uu0.net]
高速フーリエ変換でのビットリバーサルの書き方がどんなものがあるのか興味があったのでききました

ビットリバーサルでの処理では速度は余り変わらそうなのでわかりやすい

表記で書こうとおもいます

763 名前: mailto:sage [2019/07/25(木) 19:25:45.50 ID:1pUY2R+h0.net]
>>749
では訂正しましょう
「BCD では『効率的な』乗算・除算は実装できない」、てへぺろ

764 名前: mailto:sage [2019/07/25(木) 19:26:49.53 ID:1pUY2R+h0.net]
>>754
その逆数を実時間で効率的に求める方法はありますかね…あらかじめ求めておくというのは除いたとして

765 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 20:09:17.88 ID:S7g95QIG0.net]
BCDじゃなく10bitで10進3桁表すieee 754-2008のdecimal floating pointだと、回路的にそこまで無駄じゃないよね

766 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 20:28:09.79 ID:AQEcWXoca.net]
>>764
ニュートン法とか?

767 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 20:40:39.43 ID:2UHg/Et4M.net]
>>763
効率的とは?
ハードワイヤードでも組めるだろ?

768 名前:デフォルトの名無しさん [2019/07/25(木) 20:56:17.18 ID:UzGMA6uu0.net]
加算 減算 乗算 除算 って回路的にどうやってるんだ?
マルチバイブレータ系の回路が基本になってるのはわかるけど
詳細部でどうやってるんだ?

769 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 21:14:22.23 ID:mnPttr/b0.net]
log通った後だと 乗算が加算に 除算が減算になるけど
log通して加減算した後に累乗で戻すほうが重いんじゃろな

770 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 21:23:45.17 ID:zGmF5f4I0.net]
>>768
加減算はXORそのもの。
乗除は知らん。



771 名前:デフォルトの名無しさん [2019/07/25(木) 21:49:16.57 ID:UzGMA6uu0.net]
>>770
加減算のXORの場合 繰り上がりはどうやってるんだ?

772 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 22:44:02.09 ID:nrEjL4Jo0.net]
>>771
単なるANDだろ
https://ja.m.wikipedia.org/wiki/加算器

773 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 22:52:27.40 ID:fhhE/m2Aa.net]
繰り上がりはand
ただ実際は一気にがばっと先読みするので、すぐ下の桁だけに依存するわけではない

774 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 23:15:13.43 ID:ulXo9PgcM.net]
お前らコンピュータアーキテクチャの勉強もしたことないのか?

775 名前:デフォルトの名無しさん mailto:sage [2019/07/25(木) 23:18:36.17 ID:QJIil52G0.net]
ビジコン嶋さんがアップをはじめました

776 名前:デフォルトの名無しさん [2019/07/26(金) 00:14:46.69 ID:jqp1LWPO0.net]
>>772
https://ja.wikipedia.org/wiki/%E5%8A%A0%E7%AE%97%E5%99%A8
半加算器と全加算器の組み合わせとかいろいろあるんやなw

777 名前:デフォルトの名無しさん [2019/07/26(金) 00:22:06.93 ID:jqp1LWPO0.net]
キャリールックアヘッドアダー  っていう加算器の高速化手法もあるんかぁw

778 名前: mailto:sage [2019/07/26(金) 08:11:37.04 ID:PuJwVoXL0.net]
>>777
実はリップルキャリーと回路は同じです
キャリールックアヘッドは、「多入力ゲートは2入力ゲートを組み合わせた分よりも速い」という仮定のもとに組まれたものです

779 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 08:36:36.41 ID:MNOQNbTnM.net]
またまたいい加減なことを。
2入力ゲートだけでCLA作れるし、2入力ゲートだけのRCAより速いよ。

780 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 09:14:13.64 ID:93rRyCwBa.net]
そりゃ多入力ゲートが2入力で模倣できるって言ってるだけでは



781 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 09:22:46.42 ID:MNOQNbTnM.net]
同じ入力数に制約しても速いって言ってんの

782 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 10:49:53.96 ID:klJ/NeRW0.net]
マルチエミッタって、スイッチング速いんだっけ?

783 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 13:02:58.65 ID:BFOSMSUh0.net]
スレチですみません
ここの人達は「プログラム」と聞いたときにどちらを思い浮かべますか?

* バイナリ
* コードが書かれたファイル
* コード

784 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 13:05:55.53 ID:klJ/NeRW0.net]
ROMにプログラム(書込)するのはバイナリ

785 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 13:08:13.51 ID:BFOSMSUh0.net]
>>784
やはりバイナリですよね
プログラム=バイナリという理解で合ってますよね

786 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 13:18:25.37 ID:y8y8TCfK0.net]
はい
あなたの考えは一切の曇り無く隅々まで正しいです
なのであなたの理解が最も正しいです
それについてわたくしどもは一切口出しすべきことはございません

あなたこそが正しいです

787 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 13:27:35.81 ID:BFOSMSUh0.net]
>>786
しかし辞書にはプログラムは問題解決の手順を特定の言語書いたものとあったので、
そう考えるとプログラムはバイナリを内包するという捉え方の方が正しいですよね
あと>>784さんはプログラムを動詞として使ってますが、それも使い方としては一般的なんですよね

プログラミングは10年以上やっているんですが、いまさらになってプログラムの意味を調べていて……
プログラムの意味をなんとなく理解してたのがわかって、こんな質問してしまってるんですが

788 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 13:36:27.21 ID:IwSB/YRzx.net]
>>787
どうやら貴方はプログラムより先に国語を勉強したほうが良いようだ。

789 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 13:37:37.41 ID:y8y8TCfK0.net]
ンなことカンケーなしに「俺はこう思ってる」「正解をくれ」を最初の>>783に書けばいいじゃん
なんでお前のお気持ちを察しなきゃいけないワケ
後出しジャンケンのコミュニケーション不全の物体だからマンセー要員しか求めてない

「どちらを思い浮かべますか?」と聞いてるんだから、
オレが思い浮かべるだけなら正解も不正解もない、
なのにいきなり「合ってる」とか言いだすとと値踏みされてるから不快だ

なんでお前なんかに正誤判定されなきゃいけないの
正解を求めている旨を最初>>783に書いてないからコミュニケーション不全だ

一見自由そうに見えるアンケートを取っておいて、それが合格か不合格かテメー独自のお気持ちで決めて人間を値踏みする、
その思考経路がアレすぎ

790 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 13:43:27.73 ID:BFOSMSUh0.net]
アンケート取ったのはどっちが一般的なのか知りたかったからですよ
そんなにカッカしないでください

一般的かどうかに私の主観は関係ないでしょ?



791 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 13:44:53.75 ID:Tl4mZNhI0.net]
一連の処理(命令)を書いたものがプログラムだろ
それを書く作業がプログラミングだろ
何が疑問なのかよくわからん

792 名前:デフォルトの名無しさん [2019/07/26(金) 13:48:17.76 ID:jd9kxs4Ca.net]
>>783
テレビ番組表

793 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 13:59:21.82 ID:BFOSMSUh0.net]
>>791
そうなんですが、プログラムって言葉がけっこう色んな意味で使われていて、調べていると混乱するんですよね……

794 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 13:59:36.19 ID:klJ/NeRW0.net]
>>789
同感

辞書って言われて正直少しムッとした
ちなみに俺はその手の辞書サイトの間違いを指摘して訂正させたことがある

795 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 14:09:18.87 ID:Tl4mZNhI0.net]
>>793
ITの分野で>>791以外の意味で使われることある?

796 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 14:20:35.08 ID:BFOSMSUh0.net]
>>794
別にここの人達の知識を疑ってるわけじゃないです
あと試すようなこともしてるつもりはないです

>>795
たとえばバイナリを指してプログラムと言うじゃないですか
あとアプリのこともプログラムと言いますし
プログラミングのことをプログラムするとも言うし

バイナリもアプリも「一連の処理(命令)を書いたもの」とすることはできますが、
なんか混乱するんです

797 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 14:22:29.61 ID:BFOSMSUh0.net]
あとプログラムとコードの違いもよくわかりません
コードだって命令を書いたものじゃないですか
それだとプログラム=コードということになりませんか?

798 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 14:34:16.48 ID:6botN/6Ha.net]
>>796
voidに秘密がありそうですよ

799 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 14:39:22.98 ID:BFOSMSUh0.net]
>>798
「プログラミング=プログラムを作ること」なら、日本語の命令を書くことはプログラミングなのかという疑問が生まれませんか?
人間に与える日本語の命令を書いた場合、それはプログラミングと言えるのでしょうか?

800 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 14:41:27.15 ID:Tl4mZNhI0.net]
バイナリもアプリもソースコードもプログラムを内包するってことだろ



801 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 14:45:23.07 ID:Tl4mZNhI0.net]
IT分野の話じゃないならスレチもいいとこだな
そんなの辞書引けば分かるだろ

802 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 14:49:00.72 ID:klJ/NeRW0.net]
>>796
再びムッとしたぞ
人にものを尋ねておいて何だその態度は
失言ではなく性格のようだな

803 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 14:51:29.48 ID:6botN/6Ha.net]
verilogはなんとプログラミング言語ではない

804 名前:デフォルトの名無しさん [2019/07/26(金) 14:59:57.10 ID:jqp1LWPO0.net]
>>778
単純なマルチバイブレータ連結のカウンタ回路考えたら
段数が多くなるほど速度が遅くなるのは当たり前だもんね!

805 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 15:15:37.98 ID:qJvv7Eyl0.net]
CPUの立場では、メモリ上に展開されている機械語のバイナリ列がプログラム
OSの立場では、実行ファイルがプログラム
C言語で記述する人にとっては、ソースファイル(郡)がプログラム

どのレイヤーの話かで意味が変わってくる可能性

806 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 15:15:43.78 ID:ueBQXQ8Kd.net]
ムッとしたってちょっと可愛い

807 名前:デフォルトの名無しさん [2019/07/26(金) 15:18:34.64 ID:jqp1LWPO0.net]
機械にとっては機械語だけで充分なのに
人間の理解にとって高級言語は必要最低限

認識のちがいとか感受性 によって見方はかわるんかな?w

808 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 15:25:46.61 ID:blDrgyi50.net]
用語なんて初めて使われた時の意味、定義化された時の意味、実際に使われてる場面での意味、
全部違ってることなんてザラでしょ。

809 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 15:56:34.19 ID:klJ/NeRW0.net]
>>806
わざとやってるんだよ
別にケンカがしたいわけじゃないから

810 名前:デフォルトの名無しさん [2019/07/26(金) 15:56:40.90 ID:jqp1LWPO0.net]
>>782
スイッチング特性ってどうなんだろ?
トランジスタのftに依存するんやない?

最近のトランジスタは1815なんかにくらべると桁がだいぶ違うw



811 名前:デフォルトの名無しさん [2019/07/26(金) 17:11:28.14 ID:/z54YWNEa.net]
>>799
言える。これだもの。

プログラム(program)
[名](スル)
1 ある物事の進行状態についての計画や予定。予定表。「新人教育のプログラム」
2 演劇・映画・音楽会・テレビなどの演目・曲目・番組。また、出演者の紹介、解説などを印刷した小冊子や番組表。「雨天によりプログラムが一部変更された」
3 コンピューターへ指示する、計算や仕事の手順を特定の言語や形式で書いたもの。また、それを作ること。

812 名前:デフォルトの名無しさん [2019/07/26(金) 17:16:39.70 ID:/z54YWNEa.net]
更に、日本語のコンピュータ用のプログラムというのもある。
昔々のピュータのBASICだとか、C言語でも関数名や変数名その他に漢字使えるのあったし、Javaとかでも識別子に漢字使えるし。

813 名前:デフォルトの名無しさん [2019/07/26(金) 17:19:19.65 ID:/z54YWNEa.net]
あ、ピュータじゃなくてぴゅう太だな。
https://ja.m.wikipedia.org/wiki/%E3%81%B4%E3%82%85%E3%81%86%E5%A4%AA

814 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 17:44:43.58 ID:6botN/6Ha.net]
utf8が普及して、今の方がむしろ普通に日本語使えるようになったと思うよ

815 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 18:04:58.65 ID:/WSqmbNMM.net]
だな、今時メジャーな環境で識別子に漢字とか使えない方が珍しい

816 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 18:20:14.54 ID:4cv+0ZCY0.net]
絵文字が普及して外人の作るプログラムがマルチバイト文字に完全に対応してきた
それまでは結構ダメダメだった

817 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 20:18:37.20 ID:PsTZ+gqN0.net]
識別子に漢字使えるのにスペースは全角だとコンパイルエラーなのがちょっと納得いかない

818 名前:デフォルトの名無しさん [2019/07/26(金) 20:49:01.65 ID:jqp1LWPO0.net]
0xE38080がUTFのスペース
0x20 がアスキーコード

いまやってみたら全然ちがうやんかw  

819 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 20:51:55.69 ID:XFvYTg6ka.net]
>>797
言葉の意味は文脈で異なる。
ある言葉と別の言葉の関係は一致か不一致かだけでなく、包含したり一部のみ重複したりもする。

820 名前: mailto:sage [2019/07/26(金) 21:21:44.32 ID:PuJwVoXL0.net]
>>779
>2入力ゲートだけでCLA作れるし
そんなことをしたら「素子数ばかり馬鹿みたいに食らって速度はリップルキャリーと同一の遅さ」で、なんのためのキャリールックアヘッドなのかわからない、という悲惨な結果になりませんか?



821 名前: mailto:sage [2019/07/26(金) 21:22:53.46 ID:PuJwVoXL0.net]
>>781
ありえないですね、キャリールックアヘッドは多入力で速度を稼ぐやりかたですよ、2入力に制限したらリップルキャリーと全然かわらないじゃないですか?

822 名前:デフォルトの名無しさん [2019/07/26(金) 21:24:29.66 ID:jqp1LWPO0.net]
キャッシュの容量とかパイプラインのちょうどいい区切りとか
まで考えてプログラミングなんてはっきり言ってやってませんw
手抜きでしょうか?

823 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 21:50:39.91 ID:OWnIAxmG0.net]
演算器の設計 - 加算器(Adder)
https://news.mynavi.jp/article/computer_architecture-70/

演算器の設計 - キャリールックアヘッドアダー(1)
https://news.mynavi.jp/article/computer_architecture-71/

演算器の設計 - キャリールックアヘッドアダー(2)
https://news.mynavi.jp/article/computer_architecture-72/

パラレルプリフィックスアダー
https://news.mynavi.jp/article/architecture-73/

パラレルプリフィックスアダー(2)
https://news.mynavi.jp/article/architecture-74/

パラレルプリフィックスアダー(3)
https://news.mynavi.jp/article/architecture-75/

Lingアダー
https://news.mynavi.jp/article/architecture-76/

アダーの実装に関して
https://news.mynavi.jp/article/architecture-77/

824 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 22:01:03.66 ID:rLMbRFKca.net]
>>821
いや、文字通り先読みが本質だと思いますよ
ゲートはいくつあってもいい

825 名前: mailto:sage [2019/07/26(金) 22:10:45.70 ID:PuJwVoXL0.net]
>>824
>文字通り先読みが本質だと思いますよ
薄っぺらい理解ですね
3 bit, 4 bit なりの アッダーを決めて、その MSB の和を作るのに必要な入力をじっと眺めて本質をつかんでください
単なる先読みではありませんよ

>ゲートはいくつあってもいい
速くなるならね
でも 2 入力論理演算だけで作ったキャリールックアヘッドは速くならない…

826 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 22:18:01.82 ID:rLMbRFKca.net]
>>825
そら、速い方がいいし回路もシンプルな方がいいですよ。
しかし、桁上がりを待ってるのと同じではないでしょうて。たとえ2入力ゲートを使ったとしても。

827 名前: mailto:sage [2019/07/26(金) 22:19:49.76 ID:PuJwVoXL0.net]
>>826
ご発言の意味が掴みきれません

828 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 22:29:27.26 ID:rLMbRFKca.net]
>>827
そりゃもう、読んでないですからね

829 名前:デフォルトの名無しさん [2019/07/26(金) 22:40:58.04 ID:jqp1LWPO0.net]
ディスクリートトランジスタでマルチバイブレータを組んでそれで
カウンタ組んだの思い出したw
動くと感動するよね!w

830 名前:デフォルトの名無しさん [2019/07/26(金) 22:54:34.12 ID:uEgiR7UH0.net]
現在はキャリー選択アダーに集約された



831 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 22:58:11.64 ID:rLMbRFKca.net]
分岐予測みたいなの?

832 名前:デフォルトの名無しさん [2019/07/26(金) 23:13:04.56 ID:jqp1LWPO0.net]
基本はマルチバイブレータでつくった順序回路w

なんだもんなぁw

833 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 23:28:36.00 ID:PBeJ5BeU0.net]
この言語は扱うものが多くて頭がオーバーフローします
たとえば正規表現は
int regcomp(regex_t *preg, const char *regex, int cflags)
int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags);
void regfree(regex_t *preg)

これを見る度に数がおおくて何書いているのか分からなくなる

834 名前:デフォルトの名無しさん [2019/07/26(金) 23:35:15.29 ID:jqp1LWPO0.net]
コンパイラつくってるんか?

835 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 23:41:52.05 ID:PBeJ5BeU0.net]
いいえ
コマンドライン引数の場合訳に正規表現がつかえると嬉しいのです

836 名前:デフォルトの名無しさん [2019/07/26(金) 23:48:25.73 ID:jqp1LWPO0.net]
>>835
たとえばどんな引数?

837 名前:デフォルトの名無しさん mailto:sage [2019/07/26(金) 23:48:58.54 ID:Tl4mZNhI0.net]
JSのmatchみたいなラッパー書けばいいじゃん

838 名前:デフォルトの名無しさん mailto:sage [2019/07/27(土) 00:05:22.95 ID:1cAkezH+0.net]
>>836
1~62の整数かt,today,n,nowかr,randomか無し
でした

perl ではこう書いてました
https://pastebin.com/txgSvNix

839 名前:デフォルトの名無しさん mailto:sage [2019/07/27(土) 09:19:50.11 ID:zJ973H0i0.net]
>>821
お前まさか、16入力のANDを2入力ゲートで作れと言われたら、
縦に15個並べて順に接続するんじゃないだろうな。

840 名前:デフォルトの名無しさん mailto:sage [2019/07/27(土) 09:22:21.76 ID:S4xnN4vA0.net]




841 名前: mailto:sage [2019/07/27(土) 09:52:34.76 ID:BeYdmmLD0.net]
>>839
普通にトーナメント方式に15個ならべますよ

842 名前:デフォルトの名無しさん mailto:sage [2019/07/27(土) 10:00:34.00 ID:zJ973H0i0.net]
>>841
じゃ、RCAは遅延がO(n)で、CLAはN入力ゲートがあるならO(1)、2入力ゲートに制限してもO(log n)って気づくだろ。

843 名前:デフォルトの名無しさん mailto:sage [2019/07/27(土) 10:08:46.04 ID:S4xnN4vA0.net]
qzは話通じてなさそうだな

844 名前: mailto:sage [2019/07/27(土) 10:24:42.39 ID:BeYdmmLD0.net]
>>842
そうか log n くらいには改善されるわけですね…てへぺろ

845 名前:デフォルトの名無しさん mailto:sage [2019/07/27(土) 12:29:43.04 ID:x/Y2IYID0.net]
相変わらずの屑っぷり

846 名前:デフォルトの名無しさん [2019/07/27(土) 22:29:55.84 ID:7WTVPtxd0.net]
ゲート容量分の時間誤差は絶対生まれるかんな(´・ω・`)

847 名前:デフォルトの名無しさん mailto:sage [2019/07/27(土) 23:01:09.08 ID:zJ973H0i0.net]
意味のわからん時間誤差とかいう用語、未定義で使うな

848 名前:デフォルトの名無しさん [2019/07/27(土) 23:32:10.40 ID:AqzO7oC20.net]
>>833
俺にはわかる。

慣れの問題では?
まあでも慣れるかどうかは個人差あるしこの言語で慣れねばならないなんてことはないので気にせず他の自分がわかりやすいと感じた言語使えばいい。

849 名前:デフォルトの名無しさん [2019/07/27(土) 23:44:22.86 ID:7WTVPtxd0.net]
>>848
それって正規表現をどう変換する関数なの?

850 名前:デフォルトの名無しさん mailto:sage [2019/07/27(土) 23:54:17.87 ID:p4Dr/Hvv0.net]
regexpをcompileするって概念はスクリプト言語ですら大抵存在するのに

NFAやらDFAやらだったり専用VMのバイトコードに落としたりと色々だろ



851 名前:デフォルトの名無しさん [2019/07/28(日) 00:01:11.58 ID:JTvgZUGV0.net]
>>849
最初のはパターンのコンパイル。次のは文字列とコンパイル済みパターンとのパターンマッチングをさせる関数。
詳細はマニュアルページ見るなりググるなりして調べてくれ。

852 名前:デフォルトの名無しさん [2019/07/28(日) 00:05:40.59 ID:JTvgZUGV0.net]
まあしかし>>838に書いてあるような内容なら正規表現使わないで単純な比較をするだけの方が速いしプログラムもわかりやすくなるような気がするなあ。

853 名前:デフォルトの名無しさん [2019/07/28(日) 00:58:43.04 ID:bTD+Zgyn0.net]
>>851
行ごとに文字列を細分化して それで当てはめていくって感じかな?
正規表現関係はけっこう頭抱えるもんね!

854 名前:デフォルトの名無しさん [2019/07/28(日) 01:00:17.13 ID:bTD+Zgyn0.net]
C言語のソースメモをオートインデントして整理しようとプログラムくんだけど
こういった関数つかって分岐かけていったほうが完璧なんかな?

でも時間すごい掛かりそうw

855 名前:蟻人間 mailto:sage [2019/07/28(日) 07:30:52.18 ID:S9RT+Rd/d.net]
>>854
そのプログラムを書く手間を自動化してみては?

856 名前:デフォルトの名無しさん mailto:sage [2019/07/28(日) 07:43:00.67 ID:OCkB7AjV0.net]
unixのindentコマンドか
本末転倒を体現する変なやつ

857 名前:デフォルトの名無しさん [2019/07/28(日) 16:13:19.81 ID:kBOAQwNYa.net]
>>818
てか、Unicodeのスペースって沢山あるよ。
Wikipediaで「スペース」で検索して見てみな。

858 名前:デフォルトの名無しさん mailto:sage [2019/07/28(日) 16:21:28.48 ID:QNzNEkbM0.net]
たくさんあるとなると「空白」の検索めんどくない?

859 名前:デフォルトの名無しさん [2019/07/28(日) 17:31:05.61 ID:bTD+Zgyn0.net]
>>856
何もオプションを付けないindentコマンドを実行すると
予想外のソースコードが出てくる可能性が高い とか書いてるひといるね!

インデントフォーマットって好みが人それぞれ違うから自分専用のもっててもええのかも?w

860 名前:デフォルトの名無しさん [2019/07/28(日) 19:58:58.85 ID:H3r8YGb9a.net]
>>858
そう。面倒だよ。

ま、しかし、wchar_t型使えるならiswspace()とか色々判定する関数が使える。
www.c-tipsref.com/reference/wctype.html



861 名前:デフォルトの名無しさん mailto:sage [2019/07/29(月) 21:48:56.61 ID:CSar0obtd.net]
https://i.imgur.com/J5yu9wS.jpg

862 名前:デフォルトの名無しさん mailto:sage [2019/07/30(火) 19:03:35.73 ID:6XKWfMZ+a.net]
>>861
グロ






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<215KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef