2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

C言語なら俺に聞け 149

1 :デフォルトの名無しさん :2018/10/28(日) 22:01:44.38 ID:D9Gt7gmT0.net
!extend:checked:vvvvv:1000:512

次スレを作る時は上記1行をコピーして2行に増やして必ず1行目に入るようにしてください。

C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

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

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

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

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

※前スレ
C言語なら俺に聞け 148
https://mevius.5ch.net/test/read.cgi/tech/1537347410/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

2 :デフォルトの名無しさん :2018/10/29(月) 21:37:04.36 ID:l03/lfXna.net
0x99b9e4313e3e

3 :デフォルトの名無しさん :2018/10/30(火) 23:57:20.35 ID:EION13qUM.net
自分を賢いと思っている馬鹿は
周りが自分をどう見ているかも
相手がどのレベルにいるのかも
なぜ自分が放置されてるのかも
何一つ知らない

4 :デフォルトの名無しさん :2018/11/01(木) 16:13:41.13 ID:upF+pHX50.net
musl-libcみたいに,特定のOSのプロジェクトではないPOSIXユーティリティの実装ってありますかね。

5 :デフォルトの名無しさん :2018/11/01(木) 17:07:48.90 ID:g+DLXddba.net
NewLibとかあったね

6 :デフォルトの名無しさん :2018/11/03(土) 10:27:59.63 ID:gIO4YTzK0.net
strtok_sを4変数にするとエラーになるんですけどどうしたらいいですか?
strmaxがある説明と無い説明があってわからないです。

7 :デフォルトの名無しさん :2018/11/03(土) 11:28:06.76 ID:hj5IrB61M.net
>>6
msvcのstrtok_sは非標準だから、_MSC_VERとかが定義されてるかどうかで呼び分けるしかないね。
あんまり覚えてないけどmsvcバージョンのほうが先にあった気がするから、iso/iecが悪い気がする。(間違ってるかも)
まあmsが切り替えスイッチを用意してくれればよいのだけど。

8 :デフォルトの名無しさん :2018/11/07(水) 08:24:14.69 ID:60G+FgCT0.net
>>7
よくわからないのでstrtokを使いました。

9 :デフォルトの名無しさん :2018/11/07(水) 16:09:41.16 ID:39tnP8GCx.net
ちょっとお知恵を拝借。

符号付き14ビットの整数があるとき(14ビットのMSBが符号ビット)、その値を符号付き16ビット値に拡張するうまいやり方はないでしょうか?
拡張後も符号や数値自体は変化なしです。
例えば2進で
10 1010 1010 1010
という符号付き14ビット値があった時、
1110 1010 1010 1010
のように変換したい。

14ビット値を16ビット符号付き変数に入れて左に2ビット論理シフトし、さらに右に2ビット算術シフトすれば実現できるのですが、何となく気持ち悪くて。
サクッとエレガントな方法はないでしょうか?

10 :デフォルトの名無しさん :2018/11/07(水) 16:25:54.26 ID:Gtw+mwj/H.net
>>9
シフトが一番エレガント。

11 :デフォルトの名無しさん :2018/11/07(水) 18:02:56.37 ID:d49i6th8M.net
>>9
2の補数表現として…
普通に14bit目が1なら0xc000とorするだけじゃないの?

12 :デフォルトの名無しさん :2018/11/07(水) 18:16:05.56 ID:bimd4khFa.net
もはや答えが出切ったと思うので斜め上からの回答でも書いておくか。

回答

int型が14ビットの整数型になっているCコンパイラを使う。
もちろんchar型は7ビット。
CPUは1バイトが7ビットである。

13 :デフォルトの名無しさん :2018/11/07(水) 19:11:16.88 ID:d49i6th8M.net
それ16bitの結果得るのが面倒なだけだろ
もう少し面白い回答頼むわ

14 :デフォルトの名無しさん :2018/11/07(水) 19:12:35.33 ID:xr+D7aWAM.net
皆様回答ありがとうございます。
今回はビットシフト方式で行こうと思います。

>>12
使ってるCPUとコンパイラがマイナーな、ある意味純粋な16ビット環境で、sizeof(char)もsizeof(short)も1を返し、sizeof(long)は2を返すような特殊な環境なので7ビットマイコンではありません。

15 :デフォルトの名無しさん :2018/11/07(水) 19:46:07.55 ID:SCUqGzCI0.net
intが14ビット
そんな処理系あるの?

16 :デフォルトの名無しさん :2018/11/07(水) 20:47:19.69 ID:bimd4khFa.net
>>15
多分ない。
しかし1バイトが6ビットとか9ビットのマシンはあったようだよ。
https://qiita.com/yaju/items/c5da6df2221d5c3611e0

17 :デフォルトの名無しさん :2018/11/07(水) 20:49:47.59 ID:YuYLxFMn0.net
60〜70年代メインフレームは百花繚乱だったなぁ

ttps://en.wikipedia.org/wiki/Word_(computer_architecture)
27bitマシンとかどーすんだよ

18 :デフォルトの名無しさん :2018/11/07(水) 20:55:36.02 ID:Lazgvcn1M.net
このように1バイトが何ビットかはアーキテクチャ依存のため、EUではハードディスクなどのパッケージにはGB単独表記は認められず、Go(ギガオクテット)を併記または単独で表記しなければならない。
1オクテットは必ず8バイト。

19 :デフォルトの名無しさん :2018/11/07(水) 21:07:14.78 ID:fEoWtkRgM.net
つまりEUでもHDDの容量はわからないってことか

20 :デフォルトの名無しさん :2018/11/07(水) 21:09:34.64 ID:u7stYdWj0.net
>>18
いや、Octetは8ビットでは?

21 :デフォルトの名無しさん :2018/11/07(水) 21:12:33.55 ID:Lazgvcn1M.net
そうでしたwwwww

22 :デフォルトの名無しさん :2018/11/07(水) 21:19:59.22 ID:h4FWJh3Ka.net
大丈夫。
文脈から理解はしてる。
上げ足取りなだけだ。

23 :デフォルトの名無しさん :2018/11/07(水) 21:47:40.71 ID:lW24kLVO0.net
バグってそういうもんだろ
笑ってられる神経が異常だ

24 :デフォルトの名無しさん :2018/11/07(水) 23:27:18.47 ID:fWOqg0Pc0.net
バカってそういうもんだろ

25 :デフォルトの名無しさん :2018/11/08(木) 00:45:35.31 ID:LWRNNBjj0.net
>>12
CHAR_BIT は 8 以上、 INT_MAX は 32767 以上って規定があるから、規格非準拠になっちゃう。

26 :デフォルトの名無しさん :2018/11/08(木) 22:02:06.26 ID:WtJgli4G0.net
だから何? 違ったら笑うしかできない無能か

27 :デフォルトの名無しさん :2018/11/08(木) 22:55:19.89 ID:nQ7J47/rx.net
C89止まりのものです
私のような者が C11などの新しい規格を学ぶのによい書籍はありますか?

28 :デフォルトの名無しさん :2018/11/08(木) 23:16:18.68 ID:x4oYjs6S0.net
このスレは最近独り言が増えたのか?
オレもそうだがな

29 : :2018/11/08(木) 23:21:07.60 ID:PviajTiD0.net
>>27
>C89止まりのものです、私のような者が C11などの新しい規格を学ぶのによい書籍はありますか?
私もC89止まりですが、それで困ることがあるのでしょうか?

30 :デフォルトの名無しさん :2018/11/08(木) 23:28:43.81 ID:6k9Hci0C0.net
>>29
私はC99で止まっていますが、最近はもっぱらPythonを使っているので困りません

31 :デフォルトの名無しさん :2018/11/09(金) 05:43:42.12 ID:1ixP0EQ90.net
pythonいいよな
yieldとかC標準にもほしい

32 :デフォルトの名無しさん :2018/11/09(金) 10:07:36.38 ID:6cegpcYL0.net
cpythonのyield実装を見ればC言語に移植できるんじゃねえの

33 :デフォルトの名無しさん :2018/11/09(金) 11:42:49.67 ID:Sh6b3ug/a.net
yieldって何につかうの?

34 :デフォルトの名無しさん :2018/11/09(金) 12:33:54.85 ID:DHGOZxvaa.net
動き的にgets的な動きする。
表示したら即メモリ解放的な。

35 :デフォルトの名無しさん :2018/11/09(金) 12:41:29.53 ID:GUqFOdkWM.net
>>31-32
yieldはソース上に出ないデータを管理しないといけないからC言語の理念と合わない気がする
※ 個人の感想だが…
C++には欲しいな

36 :デフォルトの名無しさん :2018/11/09(金) 12:52:21.62 ID:1VeVq06f0.net
yieldはいわばスタック情報の保存だから、setjmp、longjmpで出来そうな出来なさそうな?

37 :デフォルトの名無しさん :2018/11/09(金) 13:11:31.21 ID:JsSTi+Gxa.net
ん?thread?

38 :デフォルトの名無しさん :2018/11/09(金) 13:52:10.49 ID:Sh6b3ug/a.net
単にコンテキスト保存するだけだからまあ再現はできるよ
書き方としてイテレータとか欲しいのはわかるけど実現方法はどうでもいいわけじゃん

39 :デフォルトの名無しさん :2018/11/09(金) 14:11:15.88 ID:lOb1tGzl0.net
yieldは便利で使い勝手がいーるど

40 :デフォルトの名無しさん :2018/11/09(金) 20:13:38.25 ID:3ZHBVzZ50.net
POSIXの<errno.h>にある番号とBSDの<sysexits.h>で全然番号が違うのは理由があるのかな。
いままで<sysexits.h>に従って「許可がない」動作は77を返すものだと思ってたら
Linuxでは1を返すのでなぜだと思って調べたら<errno.h>では権限エラーは1。
嫌だなぁ。

41 :デフォルトの名無しさん :2018/11/09(金) 20:53:23.68 ID:GUqFOdkWM.net
77とか1とかのリテラルで書くバカって今でもいるんだ…

42 :デフォルトの名無しさん :2018/11/09(金) 23:18:17.74 ID:Sh6b3ug/a.net
POSIXで具体的な数値決めてたっけ?

43 :デフォルトの名無しさん :2018/11/10(土) 05:46:23.69 ID:PYYpj2JU0.net
>>40
<errno.h> の方はC言語でシステムコールしてエラーになった時の errno 変数の値で、
<sysexits.h> はプログラムが exit() 等で終わる時に使う値なので全く用途が違う。

44 :デフォルトの名無しさん :2018/11/10(土) 06:30:10.24 ID:lBOHSSIo0.net
>>43
つまり<errno.h>で定義された値はユーザーからは見えないんだね。

45 :デフォルトの名無しさん :2018/11/10(土) 06:43:06.70 ID:PYYpj2JU0.net
>>44
見えないというか、ただの数値なのでどこにでも使えないわけではないが、errnoの値をexit()で返す事は想定して作られていない。

46 :デフォルトの名無しさん :2018/11/10(土) 11:37:20.64 ID:lMF42kZL0.net
>>45
わりとerrnoを返してくる人多いけどね

47 :デフォルトの名無しさん :2018/11/10(土) 11:58:28.71 ID:4Oh2WWEl0.net
errno返してもらっても困る

48 :デフォルトの名無しさん :2018/11/10(土) 17:42:25.30 ID:16GnFLu/0.net
#defineマクロ定数はプリプロセッサで単純置換されるだけだからな

49 :デフォルトの名無しさん :2018/11/10(土) 18:12:43.61 ID:JVjCprWqa.net
>>46
多いか?
別にそう作っちゃいけないということはないが、できれば exit() では <sysexits.h> の方を使って欲しいな。
単なる個人的な希望だが。

50 :デフォルトの名無しさん :2018/11/10(土) 18:13:54.94 ID:lBOHSSIo0.net
>>45
>>46
ありがとう。
ユーティリティ自体の終了ステータスはPOSIXの範囲では0もしくは非0,
BSD拡張で<sysexits.h>で定められている値を使えば まあユーザーの助けにはなるって認識でいいかな。

51 :デフォルトの名無しさん :2018/11/10(土) 18:26:46.25 ID:JVjCprWqa.net
そう。

52 :デフォルトの名無しさん :2018/11/11(日) 12:27:27.91 ID:2PA7tL2j0.net
struct S {
size_t len;
type-X buf[0];
};
という状況下で、

size_t const len = 500;
struct S* const p = (struct S*)malloc(sizeof(struct S) + sizeof(type-X)*len);

p->len = len;
p->buf = (type-X*)((size_t)p + sizeof(struct S));

という処理を偶に見かけますが、これだと末尾パディングの影響でbuf[1]のアドレスがtype-Xのアライメントに沿っていない可能性があるので、不正な気がします
具体的には

struct S {
size_t len;
type-X* buf;
};
として、

size_t const len = 500;
size_t const padding_for_align_x = alignof(type-X)*(sizeof(struct S)%alignof(type-X) == 0 ? 0 : 1);
struct S* const p = (struct S*)malloc(sizeof(struct S) + padding_for_align_x + sizeof(type-X)*len);

p->len = len;
p->buf = (type-X*)((size_t)p + sizeof(struct S) + padding_for_align_x);

...などとしないとアライメント違反になりそうな気がするのですが、この認識は正しいでしょうか

53 :デフォルトの名無しさん :2018/11/11(日) 12:57:16.34 ID:2PA7tL2j0.net
すいませんよく考えたら自己解決しました
>>52の質問は取り下げます

お騒がせしました

54 :デフォルトの名無しさん :2018/11/11(日) 14:07:31.98 ID:PRctJ18Z0.net
>>4
へー。musl-libc知らなかったけど組込Linuxとかの界隈では有名っぽいね。
ソース見たけどすごく短かいのが多くて逆に不安になったw

55 :デフォルトの名無しさん :2018/11/11(日) 15:17:31.04 ID:0RasjQan0.net
sysexits.h って初めて知った

>>49
Linuxとかだと ls unko で 2 が返るとか割と普通

56 :デフォルトの名無しさん :2018/11/11(日) 16:17:47.42 ID:PRctJ18Z0.net
>>55
まあBSDでプログラミングしたことないと あんまり知りえないと思うわ。
だいたいPOSIXで定められてる訳じゃないから 知っておくべきなのはBSDプログラマくらい。

ただLinuxプログラムのエラーコード周りはなぜか非統一的なんだよね。
GNUコーディング規約で事細かに決められてそうなものだけどねw
apt(1)なんて権限エラーに100返すんだぜ?

57 :デフォルトの名無しさん :2018/11/11(日) 16:41:45.09 ID:PCIE9alw0.net
>>52
『MSDNこそC++である』という格言があるように、構造体の末尾の配列は不定長に出来ます

構造体内の可変長配列
ttps://msdn.microsoft.com/ja-jp/library/b6fae073(v=vs.120).aspx

58 :デフォルトの名無しさん :2018/11/11(日) 18:01:07.65 ID:EYHizhRi0.net
VLAとは違うんだよな
そのページのサンプルに限っては不完全型配列の直前にサイズ情報があって確かに可変長だが
配列そのものがサイズ情報を含むのではないので、不定長とでもいうべきものだ

59 :デフォルトの名無しさん :2018/11/11(日) 18:07:53.58 ID:PRctJ18Z0.net
どうでもいいけど そのURLの書式はなんだ?
URLパラメータってそんな位置に置けたっけ。

60 :デフォルトの名無しさん :2018/11/11(日) 18:21:19.83 ID:1ROtIrLE0.net
先頭さえ確定できれば後ろなんてどうでも良い
さすがのC言語さん

61 :デフォルトの名無しさん :2018/11/11(日) 21:36:09.88 ID:1MIvJQ9R0.net
>>57
その格言は初めて聞きましたw

その方法だとアライメント違反になるかならないかが気になっていたのですが、
* 末尾のbuffer[0]でその型のアライメント以上のアライメントを構造体に強いることができる(拡張)
* 末尾のbuffer[1]の場合は当然構造体にそのアライメント以上のアライメントを強いることができる(c89)
* 末尾のbuffer[]でも同様(c99での仕様)
となり、全パターンでbuffer[i]へのアクセス時にアライメント違反にならないので、
ポインタメンバにしてアライメント気にしてmallocする必要ないのかー、これでいいのかーと解決した次第です

>>58
英語だとflexible arrayでした

62 :デフォルトの名無しさん:2018/11/11(日) 22:08:30.71 ID:7PNv93Lvf
c言語はとてもマシな呪いだと思うよ。
センスいいね、お互いにね。

63 :デフォルトの名無しさん:2018/11/11(日) 22:10:10.02 ID:7PNv93Lvf
新参者を呪う言葉は、先輩なら誰でも当たり前の事実であるかのように発するからね。

64 :デフォルトの名無しさん :2018/11/11(日) 22:09:10.99 ID:3Du2sMqla.net
>>59
v=vs.120のとこ?
クエリストリングちゃうやろ

65 :デフォルトの名無しさん :2018/11/11(日) 22:26:25.11 ID:0F8Q4Ddx0.net
>>55
ま、確かにコマンドごとにバラバラだな。
errno とも無関係だったりする。

66 :デフォルトの名無しさん :2018/11/12(月) 13:20:45.59 ID:JkRQG90v0.net
もうちょっと皆がリターンコードについて考えてくれたらいいね。

67 :デフォルトの名無しさん :2018/11/12(月) 13:26:58.93 ID:yW6s8Lj00.net
コマンドの戻り値って、皆さんどの様に活用されてますか?
成功か失敗か、それが分かれば十分な気はしますけど

68 :デフォルトの名無しさん :2018/11/12(月) 13:50:25.07 ID:JkRQG90v0.net
>>67
例えば同じ「失敗」でも何が原因なのか分かったほうが問題に対処しやすくない?
ファイルが存在しないのか はたまたファイルが現状の権限では読みとれないのか。
もちろんエラーメッセージを見てもいいけど。

あと,終了ステータスを見ないと成功失敗が分からない場合がある。
例えばdiff(1)ユーティリティーなんかは「1」という(一見失敗してるような)終了ステータスに
「(コマンド自体は成功してるが)不一致が発見された」という意味を割り当ててる。
fsck(1)ユーティリティーはもっと複雑。

まあ知ってるに越したことはないし<sysexit.h>はPOSIX標準ではないにせよ,
Unixプログラミングをする場合は積極的に利用してもいいかも。

69 :デフォルトの名無しさん :2018/11/12(月) 14:11:20.80 ID:yW6s8Lj00.net
イヤ、使い方の可能性としてそう言うものがあるくらいは知っている
実際に使っている人がいたら、どういう使い方をしているかを聞きたいんだ

70 :デフォルトの名無しさん :2018/11/12(月) 16:42:56.85 ID:JkRQG90v0.net
勘違いしてましたわ
俺の知ってる限りじゃシェルスクリプトでは多用されてるがCではどうだろうね。あまり見掛けない。

71 :デフォルトの名無しさん :2018/11/12(月) 17:16:29.53 ID:7RdsKszja.net
diffでちょっと迷うくらいだよな。

72 :デフォルトの名無しさん :2018/11/18(日) 22:01:33.04 ID:Fz4U8sel0.net
#define elif(e) else if (e)
みたいにして
if (...) {
...
} elif (...) {
...
} else {
...
}
↑こういう感じにするのってやっちゃマズいのかな。
個人的にelifキーワードがある言語に慣れてるんでこうやってて
現状特にエラーに遭遇したことはないんだけど
OSSのソースコードとか個人が公開してるソースコード見ても
こういうことやってないんだよね。

73 :デフォルトの名無しさん :2018/11/18(日) 22:14:05.51 ID:Eond7dK60.net
>>72
やめとけ

メリットが1ミリもないから誰もやらない。
善し悪しはさておき、C言語での判断基準はほぼ「実行性能」であって、
else if と書けばいいだけの所をいちいちマクロにする馬鹿なんて世界中に誰もいないだけ。
というか、そのレベルで慣れられないのなら、elif言語だけ使っておけ。

74 :デフォルトの名無しさん :2018/11/18(日) 22:24:21.65 ID:KTJRdzRs0.net
#define { begin

みたいなことを本気でやる奴がいたとはw

75 :デフォルトの名無しさん :2018/11/18(日) 22:26:08.72 ID:KTJRdzRs0.net
#define begin {
逆だったわw

76 :さまよえる蟻人間 :2018/11/18(日) 22:35:31.43 ID:ZI/kDlHTd.net
ソースコードを静的解析する関係で、文法を強引に変えるような変態な前処理は良くないらしい。

77 :デフォルトの名無しさん :2018/11/18(日) 22:39:49.79 ID:HA6us6PZ0.net
世の中の静的解析ツールは当然プリプロセッサ適用後の状態で解析するわけで

78 :デフォルトの名無しさん :2018/11/18(日) 22:42:50.43 ID:gSv28L1Ba.net
typedefも避けるという流儀はあるからね
まあ気持ちはわかる
むしろGNU拡張のtypeofはアリ

79 :デフォルトの名無しさん :2018/11/18(日) 22:45:11.55 ID:Eond7dK60.net
>>75
endは普通に変数名に使われてるから無理だな。
それはさておき、セミコロン嫌いも拗らせておかしくなってるよな。

80 :デフォルトの名無しさん :2018/11/18(日) 22:47:48.36 ID:Eond7dK60.net
>>78
> typedefも避けるという流儀はあるからね
それはC++ではないか?Cでは使われまくりだったような。

81 :さまよえる蟻人間 :2018/11/18(日) 23:14:59.59 ID:ZI/kDlHTd.net
国際会議で誰も知らない方言を話して良い訳ない。オープンなソースコードは世界中の人が見るんだから。

82 :デフォルトの名無しさん :2018/11/18(日) 23:19:46.27 ID:we8vMVw10.net
>>80
多分linuxカーネルの流儀じゃないかな

struct/enum/unionとかの省略を目的としたtypedefは行わない
opaque-type/関数ポインタとかの必然性が無い限り対象は明示するっていう戦略

83 :デフォルトの名無しさん :2018/11/18(日) 23:37:43.07 ID:Eond7dK60.net
>>82
> struct/enum/unionとかの省略を目的としたtypedefは行わない
こんなのは当たり前だ。(linuxカーネルに限らず)

そもそも「タイプ数をケチるだけの為に何かする」という文化は最近のWeb系馬鹿言語だけであって、Cにはない。
当然、else if を elif にしたがる奴もいない。
「腕のいい奴のコードは短い」を勘違いしてる馬鹿共がやたら「タイプ数」にこだわってるだけだ。
だいたい、structをタイプしたくなければC++コンパイラ使えば済むし。

84 :デフォルトの名無しさん :2018/11/19(月) 00:20:04.42 ID:DaKcZAfU0.net
ここで聞いていい内容なのかわからないのですが
gccを4.8.1から8.1.0に変えたらwinAPIを使用して図形を表示するプログラムで
図形が表示されずウィンドウだけ表示されるようになってしまった
これは、c言語,gcc,winAPIどれを疑えばいいのでしょうか?
MingW-W64-buildsというところから8.1.0のgccはダウンロードした

85 :さまよえる蟻人間 :2018/11/19(月) 00:24:07.93 ID:4H6R9aF+d.net
図形の描画ルーチンを貼れ。

86 :デフォルトの名無しさん :2018/11/19(月) 00:25:09.76 ID:+eaeK27e0.net
>>83
なぜ唐突にweb系云々に話が飛ぶのか理解できないのだが、
typedef struct {...} S;
typedef enum {...} E;
void f(S* s, E e);
上のような書き方、結構(昔から)見かける気がするけど

87 :デフォルトの名無しさん :2018/11/19(月) 00:28:01.74 ID:1op4u+BL0.net
>>84
お前の頭、だな

gcc4.8.1で行けるのならそれでやればいい話。
それを8.1.0に変えただけで問題が発生するのなら、当然そこに問題がある。
そしてそもそも詳しいことはそのソースを作った奴に聞け。

88 :デフォルトの名無しさん :2018/11/19(月) 00:30:44.00 ID:+eaeK27e0.net
というかこれ以外だとtypedefを使うべき所にしか使わないはずなので、
cだろうがc++だろうがtypedefの使用量に差が出るとは思えない

ああ、実は>>80ってc++ならusing使うべきとかそういう話?

89 :デフォルトの名無しさん :2018/11/19(月) 00:46:59.49 ID:1op4u+BL0.net
>>86
> 上のような書き方、結構(昔から)見かける気がするけど
個人的には疑問があるが、おそらく実際はそちらの方が正しいのだろう。
C++で対策された=C言語のそこがウザイと禿が判定した、ということだから。

> なぜ唐突にweb系云々に話が飛ぶのか理解できないのだが、
ググレば分かるが、その辺の言語では「こちらの方が短いから良い」といっているページは結構見かける。
C言語でこれを言っている奴は皆無だ。


>>88
> ああ、実は>>80ってc++ならusing使うべきとかそういう話?
いや、そうじゃない。そちらの取り方で問題ないし、君の typedef の使い方は正しいと思う。

typedefって結局「型に別名を与える」為の物で、
型が自由に定義出来るようになったC++ではほぼ要らないはず、って話。

90 :デフォルトの名無しさん :2018/11/19(月) 01:03:17.87 ID:DaKcZAfU0.net
>>87
そうか...仕様変更、バグ、なにか他にも入れるものがあるとか分かるなら聞きたかったんだが
仕方ない。ありがとう
4.8.1だと古くなってるかなと思って思い切って8.1.0で試してみてるんだけど戻すか

91 :デフォルトの名無しさん :2018/11/19(月) 01:03:24.61 ID:CKJwSX5SM.net
Web系言語界隈は条件演算子をif文の簡略表記()だの省略形()だの言ってる池沼も多いからなぁw

92 :デフォルトの名無しさん :2018/11/19(月) 01:16:02.93 ID:1op4u+BL0.net
>>90
まじめにやる気があるのなら、少しずつ上げて切り分けるのは簡単だろ。自分でやれよ。
ここで聞くより早いと思うぜ。

93 :デフォルトの名無しさん :2018/11/19(月) 01:26:41.23 ID:on7lyeKV0.net
else if の省略形は確かに頂けない
あれはperlからだっけか?

94 :さまよえる蟻人間 :2018/11/19(月) 01:28:26.32 ID:4H6R9aF+d.net
#elifはあって、elifがないのは変だが、キーワードを節約するためだから。

95 :デフォルトの名無しさん :2018/11/19(月) 01:30:10.27 ID:1op4u+BL0.net
>>93
歴史的には多分sh
70は多分python

96 :デフォルトの名無しさん :2018/11/19(月) 01:37:20.71 ID:DaKcZAfU0.net
>>92
なるほど、きざんでやってみます
ありがとうございます

97 :デフォルトの名無しさん :2018/11/19(月) 01:38:53.01 ID:+eaeK27e0.net
>>89
あー...もしかして自分の
>struct/enum/unionとかの省略を目的としたtypedefは行わない
これが「型定義時に、キーワードとしてのstructやenum、unionの省略のためだけのtypedefは行わない」
つまりstruct S{...}という形で定義し、明示的にvoid f(struct S* s)などといった形式で取り扱う
...という意味ではなく、
「structやenum、unionといった型について、それら個々の名前(タグ名)を単に省略するためだけのtypedefは行わない」
つまりtypedef struct SS...SS Sというただの省略形式にするtypedefは行わない
と伝わったのかな

それなら書き方が悪かった、申し訳ない

98 :デフォルトの名無しさん :2018/11/19(月) 12:18:16.63 ID:hiATcnIp0.net
>>94
自分もここが引っ掛かったんだよね。
プリプロセッサ向けにはelifキーワードがあるのに
コンパイラ向けにはない。
もしもキーワード数を節約したり実行速度のみを重視する実装なら
プリプロセッサ向けにもelifキーワードはなかった筈。
なのにある,ということはなにかしらタイプ数の節約とか読み易さとかを考慮してるんだろうね。
だからコンパイラ向けにelifキーワード(の紛い物)を追加するというのは何らおかしくないと思うのだが。

99 :デフォルトの名無しさん :2018/11/19(月) 13:17:22.86 ID:X/ZWPPJsx.net
そもそもC言語にはelse ifって構文はないよ。
んで、プリプロセッサは#の後をスペースなしの1語にした結果だと思う。

100 :デフォルトの名無しさん :2018/11/19(月) 13:27:56.02 ID:X6/A5UNDa.net
フリーフォーマットだからelse if(...)を自分なりに分かりやすくすれば良いだけ。

101 :デフォルトの名無しさん :2018/11/19(月) 21:04:51.99 ID:DK7kmuka0.net
>>76
賛成

静的解析はツールだけがすることではなく人力でもすることだ
人力「でも」と言ったが、目的意識を持って判断できるのは人間だけで
こちらが主役であることを、小者でアフォなやつほど忘れる

102 :デフォルトの名無しさん :2018/11/20(火) 01:45:19.01 ID:EatTFoyz0.net
>>101
でも>>77でも言われてるけど
プリプロセッサ命令を効かせてから解析するのが普通なんだから
あんま関係なくね?

103 :デフォルトの名無しさん :2018/11/20(火) 09:35:42.58 ID:im347JOd0.net
>>99
構文にはなくても書けるんだから一緒だろ

104 :デフォルトの名無しさん :2018/11/20(火) 15:56:41.31 ID:mQTI1hl+0.net
負の数を識別できません。

signed int DATA = -128 (0xFF80。int は16ビット)

if (DATA > 0)
{式1}
else
{式2}

なぜか式1 が実行されます。(DATA > 0) は偽ではないのでしょうか。

105 :デフォルトの名無しさん :2018/11/20(火) 16:14:32.18 ID:ls520OJz0.net
問題のコードから症状が出るままどんどん削ってって最小単位がそのコード?

https://ideone.com/xcDRkc

実は右辺がcharの変数で 中身が 0x80 なんだけど
符号拡張の過程で char を unsigned char として 0x0080 と拡張したり
(処理系依存だっけか?  リテラルだけだっけ?)
そういう話ではない?

106 :デフォルトの名無しさん :2018/11/20(火) 16:16:24.86 ID:hc2iBltta.net
16bitってどういう処理系なんじゃろうか

107 :デフォルトの名無しさん :2018/11/20(火) 16:43:19.22 ID:mQTI1hl+0.net
>>105,106

右辺の0は定数です。
変数DATA の値はPRINT文で16進表示したものです(0xFF80)。

引用先のページは、残念ながら理解できませんでした。

申し遅れましたが処理系は組み込み用16ビットマイコン用GCC です。
処理系に依って前述のような動作になることはありえますか?

108 :デフォルトの名無しさん :2018/11/20(火) 16:49:33.90 ID:ls520OJz0.net
右辺云々は 初期化の右辺の話だけども、そこが本質じゃなさそうね

sizeof(int) = 2 かつ printf("%x", DATA) が ff80 と表示される系で
if (DATA > 0) が成立しないとな

ごめんワカラン

109 :デフォルトの名無しさん :2018/11/20(火) 16:59:34.34 ID:7KgR8FwmM.net
最小の全ソースを見せて。
この手の場合、自分では正しいと思ってるとこに思わぬポカミスが入ってることがまれによくある。

110 :デフォルトの名無しさん :2018/11/20(火) 17:07:55.90 ID:mQTI1hl+0.net
>>108,109
すいません。ご察しのとおり、変数DATA に初期値を代入しているわけではありません。
このif 文が評価される直前のDATA 値が-128 という事で、初期値を代入したように書きました。

今日はこの件で非常に疲れたので、ソースの提示は少し時間を下さい。ありがとうございます。

111 :デフォルトの名無しさん :2018/11/20(火) 17:18:12.25 ID:ls520OJz0.net
>>109
元コードをそのまま横断的に眺めてるとわからないけど
症状が残るまま、余計な箇所をがんがん削っていって簡単化していくと見つかることがあるよね

a[i++] = i; のような副作用完了点内での複数回の参照とかはどうしようもないけどw

112 :デフォルトの名無しさん :2018/11/20(火) 17:26:38.15 ID:GGiSm8Yna.net
値自体は型情報を含んでないという点は押さえないとあかんが、そういう問題でもないか。
妙なtypedefしてたりしてね。

113 :デフォルトの名無しさん :2018/11/20(火) 17:33:06.78 ID:oWNEdszs0.net
アセンブリコード読んで見るとか
割り込みでレジスタ確認とかすれば
cで見てると気づかないことが見えてくるかも

114 :デフォルトの名無しさん :2018/11/20(火) 19:23:37.02 ID:2i13hG6Q0.net
printf("check : sizeof %d: DATA = %d\n",sizeof(DATA),DATA);
if((signed int)DATA > (signed int)0)
とかやって一つ一つ動作確認してみるとか。

よくわからん動作不良起こした時は配列変数がスタックサイズ超えてたとか
16Bit環境なら32kb/64kb超えたとかが原因だったことあるけど。

115 :デフォルトの名無しさん :2018/11/20(火) 19:37:09.53 ID:TCh3BaRvM.net
>>110
そもそもその環境で>>104のコードを実行したらどうなるのさ?

116 :デフォルトの名無しさん :2018/11/20(火) 20:38:14.44 ID:xyhgdzIUa.net
>>104
本当に DATA の型は signed int か?
良く見たら unsigned int ってことはないか?

117 :デフォルトの名無しさん :2018/11/20(火) 21:11:07.99 ID:d/DSkvWpM.net
>>104
16進リテラルが16bitで収まらないからunsigned intで解釈された。(c99)
そんでintに暗黙キャストされたときに最上位bitが落ちたと思われ

118 :デフォルトの名無しさん :2018/11/20(火) 22:03:30.03 ID:HgsWcywV0.net
>>110
> 今日はこの件で非常に疲れたので、ソースの提示は少し時間を下さい。ありがとうございます。
正しい。疲れたら休め。結果的にその方が早い。

君も分かっていると思うが、まともなコンパイラ(実績のあるコンパイラ)なら、そんなところにバグはない。
ほぼ間違いなく君の勘違いだ。
それは根詰めて見てても気づかないが、一旦忘れて見直したらあっさり見つかる、ということもよくある。
残業してグダグダやるよりも、早く帰って早く寝て、次の日に早めに出社した方が捗る。

おそらくあっさり解決すると思うぜ。

119 :デフォルトの名無しさん :2018/11/20(火) 22:51:04.92 ID:0YIMqUF30.net
リテラルの大小によって、型が変わるとか、滅茶苦茶な文法だろ

コンパイルエラーにしろよ。
気づかねえ

120 :デフォルトの名無しさん :2018/11/20(火) 23:08:18.58 ID:w1zNIHuF0.net
ソースの見栄えで桁あわせにゼロパディングしたら 8進数になっててうぁぁぁ

121 :デフォルトの名無しさん :2018/11/20(火) 23:08:44.13 ID:jZchQuqWa.net
マジックナンバーあかんとか言ってもさあ、マクロで隠したせいで生じたバグも経験的にはかなり多いんだよね。
値のリテラル即悪みたいなのもどうかと思うね。

122 :デフォルトの名無しさん :2018/11/20(火) 23:22:23.29 ID:HgsWcywV0.net
>>119
型は変わらないし、普通は警告が出るはず。
いずれにしても、C言語はお前みたいな馬鹿向けには出来てない。

>>117
unsigned int から int へのキャストは普通はそのままで、飽和処理なんてしないだろ。
仕様なのか処理系依存なのかは知らんが。

123 :デフォルトの名無しさん :2018/11/20(火) 23:35:21.40 ID:HgsWcywV0.net
>>121
何をリテラルにして良いか判断出来ないのは君(または周り)の問題だろ。
独り言ではなく、問題提起〜議論起動する気があるのなら、「俺なりの基準」でも言えよ。

124 :デフォルトの名無しさん :2018/11/21(水) 00:29:46.48 ID:Z1qX2lWM0.net
>>122
>型は変わらないし
つ6.4.4.1

>普通はそのまま
intの最大値を超えているのにどうやって表現する気だ

125 :デフォルトの名無しさん :2018/11/21(水) 00:32:45.26 ID:UO6rINaw0.net
>>124
> intの最大値を超えているのにどうやって表現する気だ
ならお前はdoubleの最大値を超えている場合はどうするんだ?
お前みたいな馬鹿が使うようには出来てないんだよ。

126 :デフォルトの名無しさん :2018/11/21(水) 00:45:36.29 ID:w42YOu3l0.net
釣り針が大きすぎて、咥えられないw

127 :デフォルトの名無しさん :2018/11/21(水) 06:57:26.41 ID:sFoC6dALM.net
>>120
あるあるすぎる…

128 :デフォルトの名無しさん :2018/11/21(水) 09:11:45.73 ID:xS7mIekg0.net
>>120
止めてくれ
その術はオレに効く

129 :デフォルトの名無しさん :2018/11/21(水) 09:22:03.70 ID:RC0TEAoba.net
30年ぐらい前にZ80のマイコンボード用に作ったプログラムでそれにハマった覚えがある。

130 :デフォルトの名無しさん :2018/11/21(水) 09:54:03.00 ID:PloQSCN7a.net
すぐ16進で書きたがるのもどうかと思うわ。
intに-1でなくて0xffffffff入れてるのとか意図が掴みかねる。
そもそもunsignedがあるのが良くないんだな。javaは正しかった。

131 :デフォルトの名無しさん :2018/11/21(水) 10:14:15.23 ID:nY2eM3rc0.net
70年代初期に何が良いか何が悪いか何が正解かが分かるの?
それに磁気コアメモリが4096ビットの時代だよ

132 :デフォルトの名無しさん :2018/11/21(水) 10:55:13.30 ID:Gzh6p2MJ0.net
>>127-129
リテラル中に 8 や 9 が入ってれば文法エラーで止まるので判明するけど
入ってないとそのまま通っちゃうし、特に警告の対象になるようなもんでもないしでやっかいよね

133 :デフォルトの名無しさん :2018/11/21(水) 12:33:01.52 ID:sFoC6dALM.net
>>132
今時8進表記なんて使うことはほぼないと思うから使ってたら警告してもいいくらい

134 :デフォルトの名無しさん :2018/11/21(水) 13:31:24.92 ID:VldA7vNv0.net
>>111-118

皆さんご助言ありがとうございます。おかげさまで一応不具合は解消できました。
以下問題の箇所です。

signed int MAX, WIDTH, TMP, SHIFT;
float COEF;

COEF = MAX / WIDTH; //浮動小数点演算になると思っていた
// 1 = 128 / 128

TMP = SHIFT * COEF;
// -128 = -128 * 1

if (TMP > 0)
{式1} //TMP= -128 なのに、式1が実行される。
else
{式2}

だったのを
COEF = ((float)MAX / WIDTH);
に修正すると、式2 も実行されるようになりました。他に変更したところはありません。
今まで何故(-128 > 0)が真だったのかは不明です...

135 :デフォルトの名無しさん :2018/11/21(水) 13:55:29.32 ID:89fYavxUa.net
>>134
本当に if の直前で TMP がマイナスだったのかが怪しい。
それと気になるのはやはり型が本当にその通りなのかだな。

136 :デフォルトの名無しさん :2018/11/21(水) 14:13:56.46 ID:Gzh6p2MJ0.net
本当に変数の型は signed なのか?
実際に 式2 に通って欲しいのに 式1 へ流れた MAX, WIDTH, SHIFT の値 をメモって
再現する最小セットのコード作って何が起きてるのか把握しとかないと、また同じことやらかすかもよ

signed int TMP;
signed int MAX = <リテラル>;
signed int WIDTH = <リテラル>;
signed int SHIFT = <リテラル>;
float COEF;

COEF = MAX / WIDTH;
TMP = SHIFT * COEF;
printf("1:%d\n", TMP);
if (TMP > 0) { printf("1:式1\n"); } else { printf("1:式2\n"); }

COEF = ((float)MAX / WIDTH);
TMP = SHIFT * COEF;
printf("2:%d\n", TMP);
if (TMP > 0) { printf("2:式1\n"); } else { printf("2:式2\n"); }

137 :デフォルトの名無しさん :2018/11/21(水) 14:20:55.45 ID:HZsG+Ur+a.net
COEFが0なんじゃ?
まあわかんないね

138 :デフォルトの名無しさん :2018/11/21(水) 22:53:01.43 ID:UO6rINaw0.net
>>134
皆が指摘しているように、それだけでは無いと思うがな。
おそらく君が出してきたソースにも色々間違いがあるんだろうけど。

ソース見る限りズブの初心者のようだが、問題点を理解しているか?

まず用語がおかしいので先にこれを修正しておくが、普通は
float scale = width / max; だ。shiftは足すもの、scaleが掛けるもの。coeffは係数=無次元数だろ。
読んだときに違和感がないようにしろというのはアプリケーションハンガリアンの思想だが、
これを採用するかはともかくとして、思想自体は当たってる。
そして通常は max で割る。(ただしこれについては、意図的に逆数にすることもあるが)
あと変数を全部大文字にするのはマジで止めろ。そんなことしてる奴は居ないだろ。

それで、君の「キャスト忘れ」についてはscaleが0に張り付くなり、整数の階段状になるので、
「動作を見た瞬間にどこがバグっているか分かる」タイプのバグになる。
追跡するにも苦労しないし、そもそも追跡の必要すらない。
当然、疲れもしない。マジで10分で修正して、てへぺろ、だ。

だからそのバグを取るのに手こずること自体がおかしい。
そしてその遠因になっているのはその意味不明なネーミングだ。
まずはそこからだと思うぜ。

(-128 > 0)が真になることはないので、確実に君が何か勘違いしている。
先生/先輩/上司その他、見てもらえる人がいるのなら、
君のソースのその酷さも含めて見てもらった方がいい。
そういう人がいなくて君が一人でマイコンを動かそうとしてるのなら、今の君では無理だと思うぜ。

Python馬鹿なら、最近はPythonが動くマイコンもあると聞くので、環境を変えた方がいい。
マイコン環境のCは、色々と貧弱な分、PC環境のCより難しい。
今の君ではPC環境のCでも無理がある。
状況聞く限り、俺は>>137の予想が正しいと思う。

139 :デフォルトの名無しさん :2018/11/21(水) 23:10:25.75 ID:iZ9rHJSw0.net
ズブの素人が来てよかったね
嬉しそう
生きがいみたいなもんだな

140 :デフォルトの名無しさん :2018/11/21(水) 23:20:56.85 ID:ILAAUKO60.net
歳を取ると説教したくなる

141 :デフォルトの名無しさん :2018/11/21(水) 23:26:10.43 ID:0tXjM5tc0.net
何が起きていたのか本人は追求する気はないみたいなんで
話はこれ以上進まないだろう

>>139
で、それがお前の生きがいなわけだ
なんだかな

142 :デフォルトの名無しさん :2018/11/21(水) 23:48:20.51 ID:QmHGv3o90.net
低学歴知恵遅れが
低学歴知恵遅れ丸だしなレスして
イキイキしてる

143 :デフォルトの名無しさん :2018/11/21(水) 23:57:18.63 ID:UO6rINaw0.net
>>139,140
まあお前らは上達しないと思うぜ。
最近お前らみたいな奴も増えたが。

上達出来るかは結局、自分で深みに突っ込んで行けるかにかかってる。

俺の指摘が間違っている、というのならともかく、
気に入らない指摘は無視すればいい、というスタンスなお前らはプログラマは無理だ。
諦めて他の職を探せ。

132は努力しているようだが、方向を間違っている。
それはお前らにも見えてることだろ。放置するのもまた悪だと思うぜ。
巻き込まれるのが怖くて見て見ぬふりをして、結果、
陰湿ないじめが横行してたゆとりなんてその程度だと思うが。

勿論132も追求した方がいいとは思うが、正直、そのレベルじゃない。
PC環境のCでGUIのIDEを使ってまずCを覚えるか、
既にプログラミング出来るのならその言語、調べたところRubyが動くのもあるようだから、そっちから行った方がいい。
Cも初めて+マイコンも初めて、では、確実にはまる。

144 :デフォルトの名無しさん :2018/11/22(木) 00:13:37.04 ID:8rnkEr570.net
こんな低学歴知恵遅れ丸出しな長文レスばっかりで埋め尽くされると
まともなヤツは近づかなくなるわ
やはり自覚がない

145 :デフォルトの名無しさん :2018/11/22(木) 07:53:35.42 ID:pCbzIdwz0.net
>なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?

まーたこのゴミが登場したのか
もう出てけよ
余りにもゴミだからこのスレにはいらねーよ

146 :102 :2018/11/22(木) 13:02:07.52 ID:RP03a4vB0.net
この議論に参加してくださった皆さん

>>138 さんの指摘は初心者の私には大変有難いものでした。
ただ、いくつか反論したい部分もあります。私はハード屋で、ハードウェア言語で使われる変数(フリップ・フロップ)の動作遷移を意識した変数名にした方が私には分かり易いのです。

変数を全て大文字にしているのは単純に昔からの癖です。命令文 = 小文字、引数,変数 = 大文字 と決めています。

「キャスト忘れ」についてですが、異常動作に即気付けるか否かはint 変数をキャストしないと
0,1,2・・・などの整数にしかならないことを知らなければなかなか気付けない事ではないでしょうか。
Cの参考書は持っていますが、浮動小数点演算に関連する情報が離散していて、この事象が起こりうるという説明を見出すことが出来ませんでした。

>>136 さんが提示されたテスト・プログラムは余裕が出来た時に実行してみるつもりです。現在このプロジェクトはほぼ完成しており、細かな調整を残すのみです。ありがとうございます。

147 :デフォルトの名無しさん :2018/11/22(木) 13:18:43.76 ID:mBJlqzKNx.net
>>146
まずは問題解決とプロジェクト完了おめでとうございます。

分かってると思いますが、ここは教えたがりな人、説教したい人、煽りたい人がマウントとり合うだけのスレなので、あまり細かいことは気にせず自分に有用な情報だけ吸収してくださいな。

148 :デフォルトの名無しさん :2018/11/22(木) 13:19:52.16 ID:xeK3mO2I0.net
すごいゲスパーだけど
式1 式2 が実際にはハードからの電圧出力やリレーのON/OFFで
オシレータか分周器書いててオシロで当たったら、どうもデューティーがおかしい
ってなったのかな

149 :デフォルトの名無しさん :2018/11/22(木) 13:46:54.48 ID:Q57x8lAMa.net
Cは型を意識しないとどうしようもないという所はあるよね。
なので、そもそも型変換が入る余地のない、キャストに頼らないコードを書くという強い意志を持つのが大事なんじゃろうと思う。

150 :デフォルトの名無しさん :2018/11/22(木) 15:41:36.24 ID:QPQE3Of30.net
getchar 「型変換?要らないよね?」

151 :デフォルトの名無しさん :2018/11/22(木) 21:29:32.36 ID:53EGOrV/0.net
>>143
おまえの指摘が間違っているかどうか以前に
おまえは何を指摘したんだ?
たとえば「10分」という物理量はどういう計算で出てきた値だ?
テキトーすぎて相手するに値しないんだが

152 :デフォルトの名無しさん :2018/11/22(木) 22:08:04.59 ID:/6bysR4g0.net
>>145
> ワッチョイ ff12
回答無し
だからゆとりは駄目なんだよ

>>151
> ワッチョイ 3308
同上

153 :デフォルトの名無しさん :2018/11/22(木) 22:09:04.67 ID:/6bysR4g0.net
>>146
> ハードウェア言語で使われる変数(フリップ・フロップ)の動作遷移を意識した変数名にした方が私には分かり易いのです。
他文書と同期したいのならコメントに残せ。
ソフトウェアはソフトウェアだけで評価出来ないと管理上問題だ。(大体において同期が取れずに意味不明になる)
そもそもその部分、ハード叩いている感じでもないし。
それ以前にFFの状態遷移でSHIFTも無いと思うが。

> 命令文 = 小文字、引数,変数 = 大文字 と決めています。
これはマジで今すぐ直せ。
大文字にするのは目立たせる為であって、RAMが64バイトしかないような環境ならさておき、
今時ただの変数なんて目立ったら余計に邪魔になるだけ。今時白黒端末もないから、普通は、
命令文(キーワード)=青(色付き)、引数/変数=黒(色無し)、マクロ=全大文字、と大体相場が決まっている。
(そもそもverilogにも大文字文化はない。VHDLには多少有った気もするが…)

> Cの参考書
Cに限らず、プログラミング全般で、入門書/参考書はゴミだ。理由は筆者自身がゴミだから。
海外の参考書は一部達人が書いている物があって、それは参考になるらしいが、俺はよくは知らん。
(ただこれも、昔からプログラミングをやっているのなら常識のはずだが)

> この事象が起こりうるという説明
int/int は端数切り捨てで商のみが返る、というのはCの仕様だ。

> 変数を全て大文字にしているのは単純に昔からの癖です。
言っちゃ悪いが、君は「昔から」というほどプログラミングをやってないはずだ。
昔からやってるなら、マイコンで割り算やfloatを使うこと自体が無いし、
Cの割り算の仕様を知らないこともない。
そしてそのソフトウェアの完成度で良しと出来ること自体が(普通のプログラマからすると)キチガイじみてる。
確実に事故るぞ。

154 :デフォルトの名無しさん :2018/11/22(木) 22:10:24.36 ID:/6bysR4g0.net
>>146(続き)
ただしあまり反発もないところを見ると、ただのゆとり(若者)でもないらしい。
仮に全てを満足出来るプロフィールを定義すると以下となるが、合ってるのか?
・全て大文字とはCOBOL/FORTRAN/BASIC/アセンブラの世界。つまりC以前からであり、プログラミング歴自体は長い。
・Cの基本的仕様を知らない=Cは普段使いではない。
・変数が大文字の方が都合がいい=RAMがほぼ無い4bitマイコン等だとあり得る。この場合、ほぼアセンブラ。
・基本ハードウェア+ちょいソフト(アセンブラ)程度で、今時ならIoTの末端の各センサ等、
 定期的に計測値を報告するようなプログラムはずっとやってきている。
 WatchDogTimerやPowerOnResetを使いまくりなのでプログラム自体はポンコツでもいい。
だとすると、下からCを攻めてきているわけだが、これはほぼ無いパターンだから最初にそれを言うべきだ。

この場合、参考書はK&Rのみで、それ以外は全部ゴミだから捨てていい。
割り算の仕様なら、P13にもろに書いてある。
> Cでは他の多くの言語と同様、整数の割り算では切り捨てが行われて、
> 小数部が切り捨てられてしまうからである。(K&R第2版P13)
K&Rは「既にプログラミング出来る人がCを入門する用」に書いてあるから、
プログラミング自体の入門者には不向きだが、君の場合は最適だ。
一応言っておくが、ハロワがP7、コメントがP11、のP13な。本当にど頭に書いてある。

アセンブラの範囲を超えてCに踏み込んできたのなら、C流の管理方法に合わせた方がいい。
アセンブラの管理方法は、結局はアセンブラの規模用でしかなく、Cの規模には対応しづらい。
アセンブラ修得済みの人がCを修得するのは容易い。
ただし既に言ったように、世の中の「入門書」はそういう人向けではないから、K&R以外は読まなくていい。

とりあえずK&Rを頭から全部一通り読め。それでだいぶ状況が変わるはずだ。

155 :デフォルトの名無しさん :2018/11/22(木) 22:12:40.41 ID:BRQlwM1LM.net
でもvoid君はC言語詳しくないじゃん

156 :デフォルトの名無しさん :2018/11/22(木) 22:14:51.83 ID:/6bysR4g0.net
>>149
× キャストに頼らないコードを書く
○ 『暗黙の』キャストに頼らないコードを書く

だろ。ただ、intをfloatに突っ込むと『精度が落ちる』と警告が出るはずだが。
(少なくともVC++ではそう。gccはこの辺甘々だから駄目かもしれんが)
キャスト自体が悪、というのはC++(というより型安全)の思想だが、
現実的にはCでは『明示的な』キャスト無しではまともに書けない。
ただし、『暗黙的な』キャストは当然無しには出来る。

157 :デフォルトの名無しさん :2018/11/22(木) 23:05:52.65 ID:Qbh1A67u0.net
>>152
10分という物理量と3308はどういう関係だ?
テキトーすぎて相手するに値しないんだが

158 :デフォルトの名無しさん :2018/11/22(木) 23:32:58.42 ID:y7NAvobyM.net
>>156
暗黙のキャスト?
意味わからん造語で語られても困るわ

159 :デフォルトの名無しさん :2018/11/22(木) 23:47:40.88 ID:Qbh1A67u0.net
>>156
> 現実的にはCでは『明示的な』キャスト無しではまともに書けない。

ほうほう
暗黙変換を明示的なキャストにすることで
どんな「現実的」なコードが書けるんだ? おいバカ

160 : :2018/11/23(金) 00:18:09.13 ID:e/BZMkzC0.net
>>156, >>158
>暗黙のキャスト
integral promotion?
それとも bcc用語では暗黙の型変換のことですか?

161 :デフォルトの名無しさん :2018/11/24(土) 09:23:26.40 ID:I8hvszb00.net
型変換って割とおこなうとは思うけどなぁ。

162 :デフォルトの名無しさん :2018/11/25(日) 05:17:32.88 ID:iX9BTM1g0.net
確かにintをflotに突っ込むのは型だけ変わるじゃなくてデータも変わるからなぁ

163 :デフォルトの名無しさん :2018/11/25(日) 08:02:06.68 ID:rsPEFWOD0.net
<stdint.h>とかのint8_tとかって
「プログラマが気が付かない整数型に関するミスをコンパイルする段階で(エラーとして)発見できる」
以外に使い道ってか利点ってないよね?
int8_tで定義することでプログラムの速度が上がったりはしないと思ってるんだけど 間違ってる?

164 :デフォルトの名無しさん :2018/11/25(日) 08:15:12.05 ID:Euo5liwn0.net
>>163
速度も上がらないし、そもそもコンパイル時にエラーとしても発見できない。
ただ単にコーディング時や人のソースを読む時にビット数が明確に認識できるだけ。

165 :デフォルトの名無しさん :2018/11/25(日) 08:19:43.85 ID:8Uvv4MpL0.net
(通信プロトコル等の)外的要因でビット数が規定されているものを操作するコードを書くとき

166 :デフォルトの名無しさん :2018/11/25(日) 09:24:44.24 ID:rsPEFWOD0.net
>>164
例えばすごく初歩的なんだけど
uint8_t型で宣言したループカウンタが500回回ったらコンパイルの時に警告でるよね。
……と思って今試したら警告レベルを最大にしてやっと出たわ。

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int
main(void)
{
for (uint_fast8_t cnt = 0; cnt < 500; cnt++) {
printf("%d\n", cnt);
}

exit(EXIT_SUCCESS);
}
これを
$ gcc -std=c99 -Wall -Wextra -Wpedantic -o inttest ./inttest.c
でやっと注意してくれる。
あれ? なんかもっと良い感じに撥ねられて(不注意な自分には)便利だなと思ったんだが,勘違いだったようだw

167 :デフォルトの名無しさん :2018/11/25(日) 09:53:54.15 ID:2C+NPzGbM.net
>>163
利点というか、1byteが8bitでない環境もあるので、ポータブルなコードを書く場合は他に選択肢がないと思う

168 :デフォルトの名無しさん :2018/11/25(日) 09:55:02.80 ID:jMSg79gEa.net
それはどちらかというと静的解析の仕事じゃないかなあ。

169 :デフォルトの名無しさん :2018/11/25(日) 10:08:42.57 ID:i1TAIE2a0.net
>>166
> ……と思って今試したら警告レベルを最大にしてやっと出たわ。
最大にすれば出るのだから『便利』と言っていい。

警告レベルは自分に合わせて使うものだ。
判断する能力がないのなら、とりあえず最大にしとけ。


>>163
演算速度自体は上がらない。むしろ符号拡張等が必要になり落ちる。(事が多い)
これは通常はintがCPU内部のALU幅と同じ(つまり最速)に設定される為だ。
ただしフットプリントは減る為、キャッシュヒット率が上がり、結果的に速くなることはある。

よく分からなければ、基本的に全部 int で、明確に必要なところだけその他を使えばいい。
(同一ソースでint幅が異なる複数の処理系で動かすというような場合を除く)

170 :デフォルトの名無しさん :2018/11/25(日) 10:15:56.81 ID:rsPEFWOD0.net
>>169
ありがとう。

171 :デフォルトの名無しさん :2018/11/25(日) 12:58:50.32 ID:FjBIbaie0.net
int8_tとか使おうとしているやつ相手に、とりあえずint使っとけとか
どんだけドヤアホなんだよ

172 :デフォルトの名無しさん :2018/11/25(日) 13:25:51.40 ID:dxJC+hBBM.net
>>171
いやint8_tの利点を聞いてる時点で>>169に分があると思うぞ

173 :デフォルトの名無しさん :2018/11/25(日) 14:26:54.92 ID:uM/ivlZCa.net
現時的にはちょっとデータを保存するとかネットワーク越しに外に送るとかした時点でサイズは意識することになるから、intが無難とも言い難い。
意識できてればなんでもいいんだが…

174 :デフォルトの名無しさん :2018/11/25(日) 15:22:16.95 ID:iX9BTM1g0.net
構造体とかにint_8が入ってたらintに入れて計算してint_8に入れて
戻すのがいいのか?

175 :デフォルトの名無しさん :2018/11/25(日) 16:05:11.73 ID:FjBIbaie0.net
よくねえよ
ナローイングになっちまう

176 :デフォルトの名無しさん :2018/11/25(日) 16:11:29.88 ID:x3zl9kFB0.net
計算の途中でint8_tの範囲外になる可能性があるかどうかと範囲外になった場合にどうしたいか次第だろ。

177 :デフォルトの名無しさん :2018/11/25(日) 17:07:06.68 ID:iX9BTM1g0.net
int32_tが最速だけれどsize_tと一緒に使うと型変換がいることで遅くなるんだよな

178 :デフォルトの名無しさん :2018/11/25(日) 17:16:56.38 ID:XilAUoVOd.net
>>177
何が最速化は環境によるのでは?
少なくともfast型のほうが早そうだが

179 :デフォルトの名無しさん :2018/11/25(日) 20:07:43.14 ID:74eaLfxV0.net
ごめんバカみたいな質問なんだけど
その「遅い」っていうのは実行時の速度だよね。コンパイルが遅いってことじゃないよね。
だとすると8の倍数のbit数のCPUでint<8×N>型を使ってもタイムロスって起きない気がするんだけど……。

180 :デフォルトの名無しさん :2018/11/25(日) 21:05:52.83 ID:6ChQfOQca.net
メモリに詰めて格納してると嫌な感じ

181 :デフォルトの名無しさん :2018/11/26(月) 06:54:36.44 ID:xHCVYRaTa.net
>>179
そういうのはSSE命令とか使うXMMレジスタ使う話。
Intelコンパイラでも無いとアセンブラの話。

単純に上位ビットを0で埋める。(分遅くなる)

ただ、CPUアーキテクチャにも依存する。
95年当時はpentiumは32ビットCPUだが16ビットの方が速く、pentiumU以降で32ビットの方が速くなった。
Core2は32ビットが速く、64ビットは遅く、Core iから64ビットの方が速くなった。
(ハードレベルでも、ただ実装しただけと、最適化したのとある)

182 :デフォルトの名無しさん :2018/11/26(月) 14:44:44.56 ID:00kzfg0Id.net
encode.exe
PGM 形式の画像ファイルを入力に与え,Run Length 法によって圧縮したデータを出力す る
decode.exe
encode.exe で圧縮したデータを入力に与え,PGM 形式の画像ファイルを出力する。
これをc言語で書くにはどうすればいいですか?
osはUnix開発環境はMSYS2です。

183 :デフォルトの名無しさん :2018/11/26(月) 15:15:00.32 ID:t9INuUY1x.net
ランレングスと画像フォーマットは何ら関係ないよ。
てかもしかしてランレングスのコードそのものを教えてもらうつもり?
学校の課題は自分でやりな。

184 :デフォルトの名無しさん :2018/11/26(月) 15:19:44.48 ID:00kzfg0Id.net
コードはかけたのですがエラーが出ないのに圧縮するとデータサイズが大きくなるはずなのに小さくなります。それがわからないです。

185 :デフォルトの名無しさん :2018/11/26(月) 15:25:50.47 ID:t9INuUY1x.net
>>184
私はあなたの言ってることが分からないです。

186 :デフォルトの名無しさん :2018/11/26(月) 15:27:58.32 ID:mDHVgMsLa.net
元のファイルと出来上がったファイルの中身を16進ダンプしたりして調べれば良いのでは?
それとプログラムもよーく読み直してみな。

187 :デフォルトの名無しさん :2018/11/26(月) 15:36:52.43 ID:t9INuUY1x.net
>>184
圧縮したらデータサイズが小さくなったって悩んでるんだよね?
自分で何言ってるか分かってる??
布団も圧縮したら小さくなるぜ。

188 :デフォルトの名無しさん :2018/11/26(月) 15:44:04.38 ID:mDHVgMsLa.net
Run Length は連続データが少ないと大きくなる事があるからその辺は特に不思議はない。

189 :デフォルトの名無しさん :2018/11/26(月) 15:45:34.47 ID:n96xVY2na.net
でかくなる様なデータで確かめる課題かね?
ちょっとそのまんま見てみたいね

190 :デフォルトの名無しさん :2018/11/26(月) 15:47:36.67 ID:t9INuUY1x.net
>>188
ああ、単純な実装なら確かにそうね。

191 :デフォルトの名無しさん :2018/11/26(月) 18:55:01.13 ID:XECRUPoh0.net
PGMのランレングスは何かしら工夫してんのかな
(行単位で生列とRLを切り替えできるとか? 連続性の強い色空間を選択してるとか?)

192 :デフォルトの名無しさん :2018/11/26(月) 19:58:24.72 ID:XECRUPoh0.net
あー ちゃんと読んでなかった 189 は無しで

193 :デフォルトの名無しさん :2018/11/26(月) 22:38:09.76 ID:404pxOU70.net
0バイトのデータを圧縮すると間違いなく大きくなる

194 :デフォルトの名無しさん :2018/11/26(月) 22:54:04.60 ID:9UWiUoMZ0.net
虚数空間にデータを書き移すから、さらに小さくなる、かも

195 :デフォルトの名無しさん :2018/11/26(月) 22:58:35.51 ID:XECRUPoh0.net
ホログラフィーみたいに3次元情報?が2次元に畳み込まれてなんて話ではないんだろう

196 :デフォルトの名無しさん :2018/11/26(月) 23:10:34.44 ID:4Tpz9uQJa.net
単に乱数とかね

197 :デフォルトの名無しさん :2018/11/26(月) 23:21:21.04 ID:9UWiUoMZ0.net
任意のデータをその半分に出来る圧縮技法、誰か考えて

198 :デフォルトの名無しさん :2018/11/27(火) 00:17:38.39 ID:sRUlwxGC0.net
SERNをハックしてLHCでマイクロブラックホールを作ってどうたらこうたらするとかなり圧縮できるよ

199 :デフォルトの名無しさん :2018/11/27(火) 00:21:47.09 ID:E9za3JrpM.net
綴りを間違えるとホワイトホールができちゃうかもしれんぞ

200 :デフォルトの名無しさん :2018/11/27(火) 00:22:04.16 ID:ugyzpzqZ0.net
圧縮は出来ても、復元が出来なさそうw

201 :デフォルトの名無しさん :2018/11/27(火) 01:23:33.76 ID:UHpiRGCo0.net
マジレスすると情報っていうのは消失しないと考えられているので
BH表面にエネルギー運動量テンソルの波動として,飲み込まれた物質郡の属性
(電荷など)が記録される……筈w
少なくとも現状の場の量子論と重力宇宙論ではそういう結論が出てる。
C言語とは関係ないけど,BHを記憶装置として用いるっていう考えは
突拍子もないけど理論的には可能だよねぇ,上記の理屈が正しいとすると。

202 :デフォルトの名無しさん :2018/11/27(火) 01:29:33.86 ID:IxTjeZ9T0.net
みんなが何を言っているのかよくわからない

203 :デフォルトの名無しさん :2018/11/27(火) 02:18:13.33 ID:enNfKuoe0.net
C言語でok

204 :デフォルトの名無しさん :2018/11/27(火) 22:26:43.87 ID:/aKqcH8H0.net
>>197
例えば100bitの長さのデータは全部で2^100種類作ることができる
50bitの長さのデータは全部で2^50種類作ることができる

任意のデータを半分に圧縮できる方法があるとして
100bitで作れる2^100種類のデータをすべて圧縮したなら
50bitの長さで2^100種類の異なるデータができなくてはいけないがそれは不可能

205 :デフォルトの名無しさん :2018/11/28(水) 01:13:46.19 ID:BkKDQWNJ0.net
いやいや、ちょっと待て。ここは発想の転換が必要だ。例えば8インチのフロッピーディスクから3.5インチの

いや、なんでもない。みんなには内緒にしておいてくれ。

206 :デフォルトの名無しさん :2018/11/28(水) 02:27:03.19 ID:iOF+GVq50.net
「任意の」データを半分に圧縮できるとすると
圧縮した後のデータもさらに半分に圧縮できるはず
そうやって圧縮を繰り返せば最後には全てのデータは1ビットになる
よってそのような圧縮法がないことは明らか
可逆でないならそれでもいいかw

207 :デフォルトの名無しさん :2018/11/28(水) 05:46:42.41 ID:N04UITTm0.net
しかしソースコードとかって圧縮率高いよね。
やっぱり同じような文字が続いたりインデントに空白文字が続いたりするからだろうか。

208 :デフォルトの名無しさん :2018/11/28(水) 07:08:14.21 ID:82iiMHmWa.net
コルモゴロフの複雑性もあります

209 :デフォルトの名無しさん :2018/11/28(水) 09:24:07.52 ID:seMAmMUm0.net
そこでTHCompですよ

210 :デフォルトの名無しさん :2018/11/28(水) 09:40:55.66 ID:0XeeIlyH0.net
情報のエントロピー

211 :デフォルトの名無しさん :2018/11/28(水) 13:43:56.99 ID:rECr01ZDM.net
今から趣味でプログラミング始めます!激励してください!!

212 :デフォルトの名無しさん :2018/11/28(水) 17:27:07.00 ID:N04UITTm0.net
悪いこと言わないからPython3やれ

213 :デフォルトの名無しさん :2018/11/28(水) 17:57:49.24 ID:Vqd4vFOqM.net
趣味で初プログラミングなら、俺からもpythonを勧める。
GUIが手軽だとモチベーション違うよ。

214 :デフォルトの名無しさん :2018/11/28(水) 18:00:54.28 ID:rECr01ZDM.net
分かった!いやよくわかんないけどそっちから始める!
XCodeでできるかな、ありがとう!

215 :デフォルトの名無しさん :2018/11/28(水) 18:48:28.91 ID:N04UITTm0.net
$ brew install python
とやって
$ python
これで起動する。もうスレチだし「macOS Python3」とかでググれ。

216 :デフォルトの名無しさん :2018/11/28(水) 19:51:31.92 ID:wHjpMIAFa.net
Kotlinもよろしく

217 :デフォルトの名無しさん :2018/11/28(水) 20:05:07.50 ID:Vqd4vFOqM.net
まだマイナーすぎ。入門書があふれてきたら推すよ

218 :デフォルトの名無しさん :2018/11/28(水) 22:31:15.42 ID:xsmtECg3a.net
ttps://bituse.info/c/kadai/44

上記のサイトなどを参考に
簡単な九九の表を作ると

1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15...
...
...
(略)


このようになると思いますが、

隣の数字を参照にして足して
3 5 7 9 11 13 15 17
6 10 14 18 22 26 30 34
9 15 21 27 33...
...
...
(略)


と、表示するには上記のサイトの様なプログラムをどのようにすれば良いのでしょうか?
宜しくお願いします。

219 :デフォルトの名無しさん :2018/11/28(水) 22:37:30.42 ID:IOIePrN/0.net
>>218
死ね

220 :デフォルトの名無しさん :2018/11/28(水) 23:13:58.25 ID:MBR3DrMT0.net
puts("3 5 7 9 11 13 15 17\n");
puts("6 10 14 18 22 26 30 34\n");
puts("9 15 21 27 33...\n");

221 :デフォルトの名無しさん :2018/11/28(水) 23:24:49.65 ID:30WXuBf5p.net
>>220
puts は改行するので、文字列の末尾に \n を付けると2回改行することになる

222 :デフォルトの名無しさん :2018/11/28(水) 23:26:32.45 ID:MBR3DrMT0.net
あっー  指摘ありがと

223 :デフォルトの名無しさん :2018/11/29(木) 02:39:17.93 ID:d0mF96D3a.net
>>218

#include <stdio.h>
int main(void){
int i, j, k, n, m;
n = 0;
m = 0;
for (i = 1; i <= 9; i++){
n += 3;
m += 2;
k = n;
printf("%3d", k);
for (j = 1; j <= 9; j++){
k = k + m;
printf(" %3d", k);
}
printf("\n");
}
return 0;
}

224 :デフォルトの名無しさん :2018/11/29(木) 04:25:22.53 ID:+QhJBOyD0.net
int main() {
char *ary[] = { "AAAA" , "BBBB" , "CCCC" };
printf("%s\n%s\n%s\n" , ary[0], ary[1], ary[2]);
printf("%x\n%x\n%x\n" , ary[0] , ary[1] , ary[2]);
printf("%x\n%x\n%x\n" , &ary[0] , &ary[1] , &ary[2]);
return 0;
}
実行結果
AAAA
BBBB
CCCC
405064
405069
40506e
61ff24
61ff28
61ff2c

っていうのでよくわからなくなったんですが
0061FF24==00405064で00405064==41414141
なのに、同じary[n]で参照?してるアドレスが違うのは%sが特別だからですか?
それと、AAAA,BBBB,CCCCはどの変数にも格納されていなくて、ただポインタがその文字列たちを指しているっていう理解であってます?
*がよくわからない・・・・・

225 :デフォルトの名無しさん :2018/11/29(木) 04:37:33.83 ID:+QhJBOyD0.net
ああ直接ポインタを作っててそれで変数がある必要もないのかな?
AAAA,BBBB,CCCCを普通に配列で作って、それを1つのポインタでオフセットを指定して選ぶ。みたいなのってCでできるんですか?

226 :デフォルトの名無しさん :2018/11/29(木) 05:10:38.21 ID:ljP5qN1x0.net
any[]には各文字列のアドレスが格納される。文字列へのポインターの配列。
%sはポインターが指すアドレスの文字列を、%xはポインターに格納されたアドレスを表示する。
&any[]とすると、ポインターそのもののアドレスを取得して表示する。

61ff24 -> 405064 -> "AAAA"

みたいになってる。

227 :デフォルトの名無しさん :2018/11/29(木) 05:25:57.02 ID:ljP5qN1x0.net
一つのポインターでオフセットを指定することはできるけど、
"AAAA"はAAAAの4byteではなくて、文字列の終端である0を含めた5byteになる。

char *any = "AAAABBBBCCCC";

こういうイメージで+4や+8でアクセスしようとしたら
%sで表示したとき意図する結果にならないかもしれない。
文字列として扱わなければ問題ないです。

char *any = "AAAA\0BBBB\0CCCC";

こんな書き方もできますが、*を理解したほうがよいと思います。
アドレスやオフセットの概念は理解しているようですので。

228 :デフォルトの名無しさん :2018/11/29(木) 07:00:11.93 ID:f12HiZt90.net
>>224 の実行結果を解釈すると...

文字列 "AAAA" "BBBB" "CCCC" の実体は 0x405064 から格納されていて、
16進ダンプだと
0x405064: 41 41 41 41 00 ; {'A', 'A', 'A', 'A', '\0'}
0x405069: 42 42 42 42 00 ; {'B', 'B', 'B', 'B', '\0'}
0x40506e: 43 43 43 43 00 ; {'C', 'C', 'C', 'C', '\0'}
という具合に(アラインメントのためのパディングなしに)詰め込まれている。
行分けせずに
0x405064: 41 41 41 41 00 42 42 42 42 00 43 43 43 43 00
と書けば「詰め込む」のイメージが分かりやすいかも。

charへのポインタの配列 ary[] は 0x61ff24 から配置されていて
番地: 0x61ff24 == &ary[0], 値: 0x00405064 == ary[0] (== "AAAA"の先頭番地)
番地: 0x61ff28 == &ary[1], 値: 0x00405069 == ary[1] (== "BBBB"の先頭番地)
番地: 0x61ff2c == &ary[2], 値: 0x0040506e == ary[2] (== "CCCC"の先頭番地)


これで分からんかな。
ポインタが指す実体(文字列)の番地、その(文字列の)番地が格納された配列の値、
(値としてポインタが格納された)配列要素の番地。

229 :デフォルトの名無しさん :2018/11/29(木) 09:05:40.33 ID:Msn7clch0.net
どうでもいいけど略すならaryじゃなくて,arrでは。

230 :デフォルトの名無しさん :2018/11/29(木) 09:24:21.59 ID:b4PauqdMx.net
>>229
aryもまれによく見る。

231 :デフォルトの名無しさん :2018/11/29(木) 12:11:40.55 ID:+QhJBOyD0.net
ありがとうございます。
読んでみてなんとなくは理解できるようになりました

>>227
NULLのことはすっかり忘れてました
*を理解できるように頑張ります、ご丁寧にありがとうございました。

232 :デフォルトの名無しさん:2018/11/29(木) 17:20:38.58 ID:pCyrju1nm
マイコンのLEDを点滅させるプログラムを
教えて頂きたいです。

問題としては、マイコンのボタンを一度押すと0x55で点滅し、
もう一度同じボタンを押すと0xAAで点滅するというプログラムを
考えなくてはなりません。
今はまだif文とswitch文しか習っていません。

233 :デフォルトの名無しさん :2018/11/29(木) 16:00:56.19 ID:Pq9K3tWa0.net
>>218-223
Ruby で作った

NUMBERS = ( 1..5 ).to_a
Count = NUMBERS.length

# 九九の表、Times Table ( Multiplication table ) を作る。
# map は1次元配列を作るので、each_slice で、2次元配列にする
Multiplication_table = NUMBERS.product( NUMBERS ).map { | x, y | x * y }
.each_slice( Count ).to_a

result = [ ]

Multiplication_table.each do | ary | # 1行ずつ処理する
result.push ary.each_cons( 2 ).map { | x, y | x + y } # 隣同士を足す
end

p result

結果
[[3, 5, 7, 9], [6, 10, 14, 18], [9, 15, 21, 27], [12, 20, 28, 36], [15, 25, 35, 45]]

234 :デフォルトの名無しさん :2018/11/29(木) 16:15:48.88 ID:qd4rCcG0M.net
>>233
Rubyすげぇ〜!!!

https://gigazine.net/news/20181116-top-programming-languages-2018/
https://www.softantenna.com/wp/software/the-state-of-the-octoverse-2018/
https://www.softantenna.com/wp/software/ieee-spectrum-top-programming-languages-2018/
https://findy-code.io/engineer-lab/github-programming-language-ranking

大人気Ruby!
Ruby大人気!!

235 :デフォルトの名無しさん :2018/11/29(木) 16:20:18.55 ID:Msn7clch0.net
>>234
やめてさしあげろw

まあ擁護するなら人気のありなしで言語の優劣は測れないと思うけどね。
IOなんてドマイナーだけど俺は好きだし,素晴しい言語だと思っている。
なおRuby

236 :デフォルトの名無しさん :2018/11/29(木) 18:14:40.72 ID:ljP5qN1x0.net
(´-`).oO(aryだったのね……)

237 :デフォルトの名無しさん :2018/11/29(木) 18:49:51.71 ID:Msn7clch0.net
いやarrやろ(しつこい)

238 :デフォルトの名無しさん :2018/11/29(木) 19:09:36.82 ID:8tueZiBHa.net
array

239 :デフォルトの名無しさん :2018/11/29(木) 19:12:17.70 ID:sIB7nB920.net
いいやaryもまれによく見る。
俺は省略せずarray派だが。

240 :デフォルトの名無しさん :2018/11/29(木) 19:19:19.48 ID:Msn7clch0.net
まあarrayくらい省略するなって話よな
creatじゃないんだからw

241 :デフォルトの名無しさん :2018/11/29(木) 19:46:28.81 ID:8tueZiBHa.net
>>239
「まれによく見る」とは?

242 :デフォルトの名無しさん :2018/11/29(木) 19:51:20.93 ID:lt3dDpp60.net
総体としての頻度は稀だが、とある人の書いたソースには悉く ary として書かれており、
その書いた人というスコープ内においては良く見る

243 :デフォルトの名無しさん :2018/11/29(木) 19:53:37.10 ID:sIB7nB920.net
>>241
weblio辞書より

まれによくある
別表記:稀によくある、稀に良くある

起こり得る事柄を形容して用いられることのある言い回し。
滑稽な表現であるが、あからさまな形容矛盾であり、日本語としては意味をなさない。
「ブロント語」として広まったインターネットスラング。

「まれによくある」の語のニュアンスは、使用者や使用場面によって異なるといえるが、
「頻繁に起こるとも言えるし、めったに起きないとも言える」といった意味合いだったり、「特定の人においてはよくあるが、その他の人には起こらない」といった意味合いだったり、あるいは、いわゆる「あるあるネタ」を指していたりする。

244 :デフォルトの名無しさん :2018/11/29(木) 20:38:21.77 ID:+QhJBOyD0.net
ちなみに>>224のやつは入門サイトにあったやつを少しいじったやつです

245 :デフォルトの名無しさん :2018/11/29(木) 21:38:47.98 ID:FncUCYw3a.net
スッキリわかるC言語と苦しんで覚えるC言語
どちらで勉強するか迷ってるんですがどっちがいいと思いますか?

246 : :2018/11/29(木) 22:00:55.64 ID:yDZ234lo0.net
>>245
>スッキリわかるC言語
胡散臭いです…

>苦しんで覚えるC言語
正直で好感を持てる題名ですね

247 :デフォルトの名無しさん :2018/11/29(木) 22:01:35.59 ID:kX/wXhND0.net
>>245
立ち読みして自分にとって説明が理解しやすいと思った方を選んだら?

248 :デフォルトの名無しさん :2018/11/29(木) 22:30:54.22 ID:+QhJBOyD0.net
苦CのほうはWebにサイトがあるのでそっちを見ては?

249 :デフォルトの名無しさん :2018/11/29(木) 22:40:45.52 ID:FncUCYw3a.net
まだ新しいスッキリわかるC言語をベースにウェブで分からない時に苦しーも見る方針に決めました
皆さんありがとうございます

250 :デフォルトの名無しさん :2018/11/29(木) 22:48:01.10 ID:TPe/tu+/0.net
>>244
IDEを使ってメモリウインドウから>>228の内容を納得いくまで確認しろ。

> AAAA,BBBB,CCCCを普通に配列で作って、それを1つのポインタでオフセットを指定して選ぶ。みたいなのってCでできるんですか?
それを222で君がやっているように見えるが。
書き方が気に入らないのなら、以下でも多分行ける。
for (int i=0;i<3;i++) printf("%s", *(ary+i));

他言語とは文字列の扱いが異なる。Cの方がより原始的で、はっきり言って使いにくい。
他言語:文字は長さ1の文字列
C言語:文字はcharで、文字列はcharの配列

ただ、char周りなんてどうせ大して使わないから飛ばしていい。さらに言うと、
> AAAA,BBBB,CCCCを普通に配列で作って、それを1つのポインタでオフセットを指定して選ぶ。
なんてのはbotとかでも作るわけでなければ使わない。
printfべた書きで大体事足りる。

251 :デフォルトの名無しさん :2018/11/29(木) 23:07:20.28 ID:+QhJBOyD0.net
>>250
一応プロセスメモリエディタとか使いながらやってたんですよ、それでも混乱するので聞きました。
多言語はやったことないのでよくわかりませんが、高級言語のよくわからずに使う感じが苦手なので、むしろ原始的なのは好きです。

> AAAA,BBBB,CCCCを普通に配列で作って、それを1つのポインタでオフセットを指定して選ぶ。
っていうのがbotを作るうえで必要というのは初めて知りましたが、botは作りたいと思ってました。

252 :デフォルトの名無しさん :2018/11/30(金) 00:06:17.84 ID:tn7d6mNM0.net
>>251
> プロセスメモリエディタ
なんじゃそりゃ?と思ってみてみたが、どっちかというとハッキングツールだな。
マジな話、IDE使え。個人開発レベルの糞ツールとは次元が違うから。
俺はVSがいいと思うが。
言い忘れてたが当然return文にブレークポイントを当てて止めて見るんだよ。

というか他に何言語やってるんだ?
> AAAA,BBBB,CCCCを普通に配列で作って、それを1つのポインタでオフセットを指定して選ぶ。
これは全くの初心者の発想ではないはず。
明らかに他言語ではこう書ける、これをCでやりたい、というように読めるが。

> っていうのがbotを作るうえで必要というのは初めて知りましたが
というか、文字列を配列に持って切換ながら使う=それらの文字列は同列に扱うべき、
という使い方をすることがほぼ無いんだよ。他の言語でも、アプリでも。
大体文字列なんてリテラルでその場で使って終わり、が殆どだ。
それ以前に、charを主として使うアプリ(bot含む)をCでやろうというのも間違いだが。

char出力は結局UIであって、どうせI/Oで引っかかるから、Cの優位性(速度)が生かせない。
そして原始的な分、生産性自体は悪いから、そのデメリットだけ受けてしまう。
AIbotとかで演算部分に相当速度が必要でない限り、スクリプト言語で作った方がいいと思うぞ。
この意味で、Cでの文字出力はほぼログ生成でしかなく、
だからこそ貧弱なライブラリでも間に合ってる訳だが。

> 高級言語のよくわからずに使う感じが苦手
いやこれは違う。
「余計なことを考えなくて済む」という意味で後発言語はよく出来てるんだよ。
まあこれはじきに分かるだろうさ。

253 :デフォルトの名無しさん :2018/11/30(金) 01:05:40.46 ID:qUT8id4/0.net
void君は相変わらずだな

254 :デフォルトの名無しさん :2018/11/30(金) 01:14:13.61 ID:dHzryZqK0.net
プログラミングというより解析系に興味があっていろいろ調べてただけです。
Cのこともプログラミングのこともまだ全然わからないです

255 :デフォルトの名無しさん :2018/11/30(金) 01:40:17.87 ID:ZZJKHSVT0.net
puts()関数とかの「s」ってストリングのsなんだね。
今までずっとputの三単現だと思ってたわw

256 :デフォルトの名無しさん :2018/11/30(金) 08:28:07.36 ID:VjmtC3o00.net
>>245-249
スッキリJava は、250ページにも及ぶ、猿向けにオブジェクト指向を解説した、伝説の書。
単純な言語の文法書ではない

前半はフレームワークを使う人の立場で、後半はフレームワークを作る人の立場での解説。
だから初心者は、後半を読まなくてもよい

苦しんでC は、手順書。
14歳以下とか、中学生に教えるたぐいの本。手順を教えるだけ。
たいていのAndroid アプリの本と同じ

なぜ、こういうデザインパターンをするのかとか、概念の説明などはない。
漏れは、2時間で読める。
理解して考える要素がないから、ライトノベルと同じ

257 :デフォルトの名無しさん :2018/11/30(金) 08:32:59.05 ID:xQIq6Uyn0.net
理解して考える脳の無いRuby厨であった

258 :253 :2018/11/30(金) 08:36:47.97 ID:VjmtC3o00.net
例えば、WEB+DB 106号の「実践 Android/iOS アプリ設計」を読んでみ

DI, MVVM, Flux とか、なぜこういうデザインパターンを使うのか、
自分で理解して考えないといけないから、こういう概念の話は難しい

デザインパターンを参考にして、Ruby などでいじくり回すのが、最も身につく。
ポインターのバグ取りに、時間を取られないし

259 :デフォルトの名無しさん :2018/11/30(金) 09:22:30.92 ID:KWzr3gbka.net
DIって外部の設定を使いましょうって話なんですか?

260 :デフォルトの名無しさん :2018/11/30(金) 09:39:20.17 ID:vcs52++Va.net
>>256
スッキリわかるC言語はパズドラ作りながらC言語が学べるみたいです

261 :253 :2018/11/30(金) 10:35:00.21 ID:VjmtC3o00.net
DI は、C++ の、p-impl パターン。
外部から、後に作られる、依存性を注入する

class A { new B(引数); }
class A { b = 構築メソッド }

上のように、クラスA 内で、直接B を作らず、
構築メソッドで、Bインスタンスを作る

例えば、クラスBの引数の変更が、クラスAに及ばないように、疎結合にしている。
クラスA・Bの作者が、同一でない場合に、効果が大きい

間接的に、Duck Typing, Interface を使う事で、インターフェース・構築メソッドが固定されるが、
同じ構築メソッドを使うことで、似たようなクラスを扱いやすい

262 :デフォルトの名無しさん :2018/11/30(金) 14:03:17.31 ID:wR5wJL4H0.net
苦Cから入ったけどつまずいて1年くらい何も触らなかったおもひで

263 :デフォルトの名無しさん :2018/11/30(金) 16:07:52.38 ID:cYaYTjx50.net
何もわからんうちからえり好みしないでK&R
これですんなり入れることが適性試験

264 :デフォルトの名無しさん :2018/11/30(金) 17:16:53.52 ID:fQi4U1HQH.net
ループとか条件分岐とか関数とかは別言語で十分習得したという前提でならそれでよい。

265 :デフォルトの名無しさん :2018/11/30(金) 17:20:44.30 ID:wR5wJL4H0.net
アセンブラの入門かじった程度でもイメージはつかめるしCで躓くことはかなり減ると思う

266 :デフォルトの名無しさん :2018/11/30(金) 18:19:25.99 ID:cYaYTjx50.net
俺はサブルーチンが関数な言語を1つも知らずにK&Rで憶えた
強いて言うならBASICのUSR関数くらいか

267 :デフォルトの名無しさん :2018/11/30(金) 18:33:32.23 ID:vx8Iixcxa.net
BASICの全てグローバル変数だとか行番号に苦しんでいた時に徐々にMS-DOSでCが使える状態になってきて、PC-98でMS-DOSが使えるようになり、TurboCとかも出て俺は救われた。

しかしその後UNIX関係の仕事になったのでCができて当たり前の環境になってしまった。

268 :デフォルトの名無しさん :2018/11/30(金) 19:07:15.02 ID:m3TSK4YL0.net
大学でunixでCをやるようになってvim系の操作が気持ち悪かったからノリで大学を辞めた
人生で最悪の選択をしてしまった

269 :デフォルトの名無しさん :2018/11/30(金) 19:17:21.91 ID:9hh85ykUM.net
>>266
BASICならGOSUBだろ。

270 :デフォルトの名無しさん :2018/11/30(金) 21:49:44.97 ID:cYaYTjx50.net
>>269
GOSUBが、どのように関数なんだ?

271 :デフォルトの名無しさん :2018/11/30(金) 22:03:56.69 ID:5CDqtXe60.net
関数と言えるのは、DEF FN かな?

272 : :2018/11/30(金) 23:31:23.55 ID:MkfLpznc0.net
>>256
>スッキリJava は、250ページにも及ぶ、猿向けにオブジェクト指向を解説した、伝説の書。
私が知りたいのはスッキリC++(そんなものが存在するのですか?限りなく胡散臭いですね)の話です

273 : :2018/11/30(金) 23:33:27.03 ID:MkfLpznc0.net
>>261
おっしゃることがよくわからないので、ちょっと書いていただけますか?http://ideone.com

274 :デフォルトの名無しさん :2018/11/30(金) 23:34:56.47 ID:PIchVJHi0.net
#define C Java

275 : :2018/11/30(金) 23:50:06.20 ID:MkfLpznc0.net
>>266
下準備にはPEEK/POKEも重要
私は CALL で呼んでいた記憶がありますが、もしかするとNとN88とN88(86)とでは違っていたかもしれません…

276 :デフォルトの名無しさん :2018/12/01(土) 07:43:03.30 ID:7EJdQB2R0.net
PC6001でBASICを覚えてPLAY,SOUNDで音楽作ってたな
PSGの音を聞くだけで懐かしい気分になる
そしてMSXでMSX-Cを覚えた
cursesがあったからローグもどきのゲーム作って遊んでたよ

277 :デフォルトの名無しさん :2018/12/01(土) 07:47:36.67 ID:+NY+xI8A0.net
サブルーチンって用語はもう消えた?

278 :デフォルトの名無しさん :2018/12/01(土) 09:16:07.78 ID:4Hoi4/y50.net
C言語以降関数と手続きを区別しない言語が増えたこととOOPでは一部がメソッドと呼ばれるようになったので使用頻度は下がったな
なくなってはいないけど

279 :デフォルトの名無しさん :2018/12/01(土) 09:27:06.02 ID:TOuK5lWF0.net
関数と手続きを総称して、「メインルーチン」に対して「サブルーチン」って
言い方なら今でも使うんじゃないかな。
プログラミング教育の初期の段階での説明。

BASICでの「サブルーチン」は言語仕様での用語だっけ?

280 :デフォルトの名無しさん :2018/12/01(土) 09:27:25.60 ID:piawvWud0.net
サブルーチンと関数って違うのか(無知)

281 : :2018/12/01(土) 09:55:16.44 ID:J8cQMvWo0.net
>>279
GOSUB 命令がありました

282 :デフォルトの名無しさん :2018/12/01(土) 10:14:48.66 ID:/TQ/ikyba.net
ラベルはなかったね

283 :デフォルトの名無しさん :2018/12/01(土) 10:27:11.17 ID:tI2T+oTI0.net
>>280
処理をまとめたのがサブルーチンで
値を返すのが関数…とかなんかあった気がする

284 :デフォルトの名無しさん :2018/12/01(土) 16:05:57.68 ID:piawvWud0.net
>>283
その定義だとvoid func(void)
はサブルーチンになるな
ちょっと難癖っぽいけどw

285 :デフォルトの名無しさん :2018/12/01(土) 16:11:09.57 ID:oMoZEV7I0.net
アセンブラだと値返していようがいまいがサブルーチンっていうよね
今曖昧だってことは元々曖昧だったのかな

286 :デフォルトの名無しさん :2018/12/01(土) 16:42:04.42 ID:mW7z3f7A0.net
もともとは呼び出しがステートメントであって返値というものが存在しないサブルーチンと、
値を返して式の一部となる関数という区別だね。
式+;が文になるという単純化を行ったCではその区別もなくなってそれが主流になった。
副作用のないものが関数、ありえるのがサブルーチン、と定義を変えて復活はあるかも。

287 :デフォルトの名無しさん :2018/12/01(土) 16:58:01.89 ID:6zv/O1Bm0.net
void以外は関数って事だな

288 :デフォルトの名無しさん :2018/12/01(土) 17:11:46.73 ID:FtOkB0gI0.net
言語(VBとか)によっては明確な違いがあったりするけど、概念的にはサブルーチン⊃関数というイメージあるわ。

289 :デフォルトの名無しさん :2018/12/01(土) 18:36:37.73 ID:qSa8BGaMp.net
副作用のある手続きをほんとは関数とは呼ばないのだろうけど
Cではそんなことに頓着せず全て関数に単純化したからね

ただ本来サブルーチンとはメインルーチンと対立する文脈で語られていたものかと
これは単なる呼び出し関係だけでなく、古い言語では変数のスコープなども異なる
Cではこれも単純化してしまった
main は単にスタートアップルーチンから最初に呼び出されるという以外は
特別なスコープを持つわけでもなく、他の関数と何ら違いがない
他の関数から main を呼ぶことも、普通やらないだけで問題なく可能だ
Cでサブルーチンという名前がしっくりこないのはこの辺が理由でもあるかと

290 :デフォルトの名無しさん :2018/12/01(土) 19:00:11.99 ID:mW7z3f7A0.net
ああ、関数と対比されるのはサブルーチンじゃなくて正しくはプロシージャ(手続き)だね。

291 :デフォルトの名無しさん :2018/12/01(土) 19:53:46.70 ID:qSa8BGaMp.net
>>290
そうだけと、その辺の用語も統一されてるとは言い難いところがあるよ
AdaなどのPascal系の言語ではprocedureとfunctionという区別があるよね
まぁ値を返すかどうかという違いでしかないわけだけど
VBではPascalのprocedureに相当するのはSubであって、SubとFunctionをまとめた
上位概念としてプロシージャと言うからね

292 :デフォルトの名無しさん :2018/12/01(土) 21:37:27.03 ID:piawvWud0.net
mainが特別扱いされてると言えばOSが受け取れる返り値は0--255なのにint型を指定するってところとかかな。

293 :デフォルトの名無しさん :2018/12/01(土) 22:24:12.87 ID:3EVAE8120.net
Perl ではサブルーチンは sub で始まる。これはCの関数のようにも使える。

294 :デフォルトの名無しさん :2018/12/01(土) 22:38:01.02 ID:VxENaYkZ0.net
>>289
> 副作用のある手続きをほんとは関数とは呼ばないのだろうけど
> Cではそんなことに頓着せず全て関数に単純化したからね
逆だぞ。関数型が馬鹿やったから「副作用」なんて言葉が必要になったのであって。

元々Cの関数は副作用がない。これは単純に、Cの場合は引数で渡すしかないからだ。
(当たり前だがグローバルは使わないとする)
だからC全盛の時代には「副作用」なんて言っている奴すら居なかった。
関数型の連中が副作用(キリッとか気にする必要がでてきたのは、クロージャを濫用したからだ。

単純に言えば、関数に対しての値の渡し方は、
・引数
・グローバル
・this(OOPの)(=インスタンス内グローバル)
・クロージャ(=レキシカルスコープの場合は階層内グローバル)
とあって、クロージャは使い方を間違えば結合を強めてしまうんだよ。
(thisの場合は最初からクラス界面で切る《=public/privateを意識して設計する》
からそこまで酷くはならない)
Cはそれがないから、便利に書けない反面、無駄に結合するって事もない。
(少なくとも、結合していることは明示的に見える)
伊達に50年近く現役な訳でもないのさ。現役で居続けられた理由がある。

>>291
AdaとかPascalとか、最早死んで誰も使わないし使う価値もない言語を持ち出しても、
何の意味も無いと思うぜ。
それらが死んだのは、それなりの理由があるんだよ。

295 :デフォルトの名無しさん :2018/12/01(土) 22:43:10.84 ID:6zv/O1Bm0.net
>>294
ねえねえ、Fortranは?

296 :デフォルトの名無しさん :2018/12/01(土) 22:58:40.52 ID:fkjVwInMM.net
なんだCの関数には副作用なかったのか。これで安心してprintfできる

297 :デフォルトの名無しさん :2018/12/01(土) 23:00:40.61 ID:piawvWud0.net
Cに副作用の概念はないって……それは流石に嘘でしょう。
箇所は失念してしまったがK&Rにも関数を指して「文字列を出力したりする場合もあるので純粋な関数とは呼べない」
みたいな記述あるくらいだし。

298 :デフォルトの名無しさん :2018/12/01(土) 23:07:56.71 ID:8rj5PksfM.net
void君は今日も平常運転

299 :デフォルトの名無しさん :2018/12/01(土) 23:11:44.86 ID:VxENaYkZ0.net
>>297
副作用の概念はあるに決まってるだろ。
そもそもプログラミング自体が副作用を伴うものであって、
全てを含んだ「学術的な意味での副作用」を伴わないプログラムなんて、何もやらないプログラムだからだ。
それすら理解出来ない>>296なんてただの馬鹿だ。

そうではなくて、関数型()の連中が言っている意味での「副作用の無い関数」についてなら、
Cは全ての関数が該当する、ということだよ。
だから、「副作用(キリッ」する必要すらなかったって事だよ。

試しに関数型()の連中に、「クロージャ禁止、this禁止、グローバル禁止、全て引数で渡せ」と言ってみろよ。
多分、顔が引きつると思うぜ。

300 :デフォルトの名無しさん :2018/12/01(土) 23:56:03.97 ID:C49O7CpGa.net
引数voidって初めて見たぞ

301 :デフォルトの名無しさん :2018/12/02(日) 00:31:53.73 ID:jISJOvCb0.net
void君人気っすね。羨し…くはないなw

302 :デフォルトの名無しさん :2018/12/02(日) 00:39:59.56 ID:qwr+Mk5T0.net
秋田

303 :デフォルトの名無しさん :2018/12/02(日) 00:45:19.85 ID:Bx+z5yQP0.net
>>301
まあそれがゆとりが嫌われる理由なんだけどな。
お前も含めて自覚がないのが救いようがない。

お前ら、もう既に老害になってると思うぜ。

304 :デフォルトの名無しさん :2018/12/02(日) 00:53:05.03 ID:+Qh0SqlG0.net
よく分からん捨て台詞だな

305 :デフォルトの名無しさん :2018/12/02(日) 00:55:37.62 ID:twRH93OM0.net
https://ja.wikipedia.org/wiki/%E3%82%86%E3%81%A8%E3%82%8A%E4%B8%96%E4%BB%A3#%E5%AE%9A%E7%BE%A9%E3%83%BB%E7%AF%84%E5%9B%B2

ゆとり世代については明確な定義、範囲はなく諸説ある。

小中学校において2002年度施行(高等学校は2003年度)の学習指導要領による教育を受けた世代(1987年4月2日 - 2004年4月1日生まれ)。
小中学校において1980年度以降(高等学校は1982年度以降)の学習指導要領による教育を受けた世代。1966年度生まれ以降。

1966年度生まれ以降。
1966年度生まれ以降。
1966年度生まれ以降。
1966年度生まれ以降。
1966年度生まれ以降。

306 :デフォルトの名無しさん :2018/12/02(日) 01:01:50.46 ID:Bx+z5yQP0.net
>>304
俺に言ってるのなら説明しても良いが、タダではやらん。
お前が説明に値するだけの頭があることを先に示せ。
具体的には、現状の議論について、何らかの進展があるレスをまずしろ。

307 :デフォルトの名無しさん :2018/12/02(日) 01:23:06.59 ID:26H0WWJ10.net
>>294
まず、副作用という言葉は C が生まれる前から使われていたし意識されていたことですよ
Lisp をやってれば分かることだけど

C 全盛時にCプログラマが副作用という言葉を使わなかったのは当然でしょうね
C は副作用そのものであるノイマンアーキテクチャを素直に表現できる言語と
目されていたわけで (i++ とか)、それこそ最初はグローバル変数も使いまくりだったのでは
また、引数で文字列を渡すにもポインタを使わざるを得ないので、それが破壊されることを
防ぐ手立てがなかった (今でもないか)
引数経由でなくても、ポインタが使えるということは、そこに任意のアドレスを設定でき、
任意の場所に書き込めるということなので、C の関数で副作用を防ぐ手立てはないわけですよ
C 界隈で副作用うんぬんが取り沙汰されるようになったのは const 引数の導入や、
グローバル変数の弊害が意識されるようになって、むしろ民度が上がってきたと見るべきかと

あと、Oracle のストアドプロシジャ PL/SQL をやったことはないですか
あの文法は Ada そのものなんだけど

308 : :2018/12/02(日) 01:24:03.02 ID:xpb/M8Xl0.net
>>305
1966以前と1966以後では教育内容で変化があったのですか?数学に関する限り一時期は線形代数も微積分もやる、という過剰な状況だったと思っています

309 :デフォルトの名無しさん :2018/12/02(日) 01:41:19.09 ID:1UGGVPSQ0.net
>>294
オラクル社の第一言語は、Ada言語を借用したPL/SQLだぞ。

C言語が例外処理機能を受け入れなかったのは完全な失敗。

310 :デフォルトの名無しさん :2018/12/02(日) 01:45:35.26 ID:1UGGVPSQ0.net
>>308
そうですよね。いま働いている日本人のほとんどはゆとり教育です。

ただ昔は教科書に載っているだけでまともに教えていないと思います。

学年トップレベルだったという年配の多くが義務教育の範囲さえ、完全に忘れているか、知らなかったりします。

311 :デフォルトの名無しさん :2018/12/02(日) 01:46:50.51 ID:Bx+z5yQP0.net
>>307
> 引数経由でなくても、ポインタが使えるということは、そこに任意のアドレスを設定でき、
> 任意の場所に書き込めるということなので、C の関数で副作用を防ぐ手立てはないわけですよ
それは「副作用」ではなく「バグ」と言うんだよJava以外では。

その他諸々色々勘違いするのは自由だが、
さすがにそれだと話が通じなさすぎて煙たがられてるだろ。

> あと、Oracle のストアドプロシジャ PL/SQL をやったことはないですか
> あの文法は Ada そのものなんだけど
無いね。
ただ、Oracleがそうなら、Ada文法がまだ生き続けていることにはなる。この点は訂正しよう。

とはいえ、それが「参考にする意味があるか」とは別だよ。
本当に意味がある物は、「オブジェクト指向」や「クロージャ」のように、
ほぼ全ての言語でサポートされる事になる。
現状、procedure/function/Subを区別してない言語がメジャーで、
区別した言語(Ada/Pascal/VB)はことごとくマイナーだし、
最近のクロージャのようにC#/C++/Java等のメジャー言語が
相次いで方針を変更してサポートした、ということもない。
それは不要だった、ということで結論は出てる。
それを反例と持ち出してきても意味がないだろ。

312 :デフォルトの名無しさん :2018/12/02(日) 01:48:13.42 ID:jISJOvCb0.net
老害がブチ切れてて草
変ったのは世の中じゃなくてお前の脳味噌やぞ老いぼれ

313 :デフォルトの名無しさん :2018/12/02(日) 01:50:31.40 ID:Bx+z5yQP0.net
>>305
> 小中学校において1980年度以降(高等学校は1982年度以降)の学習指導要領による教育を受けた世代。1966年度生まれ以降。
そういうことをするからゆとりは駄目なんだよ。

314 :デフォルトの名無しさん :2018/12/02(日) 01:55:27.80 ID:Bx+z5yQP0.net
>>309
Oracleについては308の通り。

例外についてはCで採用しなかったのはとりあえずは正解だろ。
未だに各言語で例外方式が安定しないのは、未だにいい解を見つけられてない、ってことだよ。

315 :デフォルトの名無しさん :2018/12/02(日) 02:36:57.19 ID:twRH93OM0.net
自分がゆとりであることに気付かずにだからゆとりはと言い出すやつばかり。
それが今の時代。

316 :デフォルトの名無しさん :2018/12/02(日) 07:38:01.21 ID:3j0ioh6B0.net
>(当たり前だがグローバルは使わないとする)

副作用について議論するうえでこんな変な条件付ける人はいない。
あと当然だが、引数によって参照される関数スコープ外の値を変化させるのも副作用だ。

317 :デフォルトの名無しさん :2018/12/02(日) 10:14:19.71 ID:Bx+z5yQP0.net
>>316
> こんな変な条件付ける人はいない
君がグローバルを普段から濫用している人だとは理解した。

> あと当然だが、引数によって参照される関数スコープ外の値を変化させるのも副作用だ。
勿論。

というか、まともに議論する気があるのなら、明確に条件を確定させなければならない。
何も言わないのなら、C言語での『標準的な』コーディングを各自が想定することになる。
君が普段からグローバルを濫用しているのは理解したが、それは俺の『標準』ではないし、
君みたいな馬鹿が出てきて無駄に議論が空回りするのが嫌だから、俺は明示的にそれを除外した。
そしてこの条件付けは『標準的』であり、問題ないと俺は考えている。

君がグローバルを含めて副作用を議論したいのならそうすればいい。
俺はその議論には意味が無いと思うから参加はしない。

君の言うように、俺は「参照透過」は以下の2種類に分けて考えるべきだと思っている。
・狭義の参照透過…sin()等
・広義の参照透過…qsort()等やthis
・参照透過でない…その他全部、つまりクロージャやbindやグローバルを用いるもの
通常の文脈で言われる『副作用』はおそらく関数型()言語から来ている。
それは上記「参照透過でない」物を濫用した結果だ。
Cの場合は最初からそれが出来ないから、その議論が発生することはなかっただけ。

それとは別に、意識高い系関数型()の「『狭義の参照透過』だけでプログラミングすべき」、
というのは当たってはいるが、実際の所それは多値を返せないと厳しい。
そして多値返しよりも参照を返してそこからアクセスしろ、というのがメインストリームの言語だろ。
それの方が楽だから。

318 :デフォルトの名無しさん :2018/12/02(日) 10:48:22.22 ID:3LBO8TR+0.net
少なくともCにおける「副作用」はずっと昔からの規格で定義されている用語だから、
独自定義で話されるのは困る。
http://kikakurui.com/x3/X3010-2003-01.html#13
> ボラタイルオブジェクトへのアクセス,オブジェクトの変更,ファイルの変更,
> 又はこれらのいずれかの操作を行う関数の呼出しは,すべて副作用(side effect)と呼び,
> 実行環境の状態に変化を生じる。...

319 :デフォルトの名無しさん :2018/12/02(日) 11:25:56.48 ID:Bx+z5yQP0.net
>>318
FPUのフラグか。なるほどそれは正しい『副』作用だ。

というか、『副』作用というからには当然「作用」(『主』作用)と対比されるべきで、
「printfが副作用」(>>296)というのはHaskellの定義だからな。
スレチというのはごもっとも。

320 :デフォルトの名無しさん :2018/12/02(日) 12:58:23.54 ID:mXB0v2zh0.net
C言語使う人ってアドレスって言ったほうがわかりやすい場合でもポインタっていうよね
ポインタの意味が多くて混乱する

321 :デフォルトの名無しさん :2018/12/02(日) 14:18:51.99 ID:uIlAasYL0.net
副作用は、volatile とか、何かの状態を変えること

関数型のmonad とか、
Vuex, Nuxt.js みたいに、1方向のライフサイクルを作って、
状態は、Mutation からしか変えられないとか

どこかのタイミングに、絶対に変化していない、ポイントを作る

WEB+DB 106号に載っている、Flux。
状態管理のデザインパターン、単一方向のデータフロー

322 :デフォルトの名無しさん :2018/12/02(日) 20:00:19.47 ID:nNQIp+BOM.net
なんだまたvoid君の無知っぷりが露呈したのか

323 :デフォルトの名無しさん :2018/12/03(月) 06:04:46.06 ID:9nl14toh0.net
C言語はファイルポインターを配列を指すようにして同じように扱うことはできませんよね。
それなので同じように扱うにはファイルポインターと配列のラッパーを自分で作らなければいけませんよね。

324 :デフォルトの名無しさん :2018/12/03(月) 06:13:41.09 ID:MMlQh9qb0.net
>>323
mmapやfmemopenを調べてみ

325 :デフォルトの名無しさん :2018/12/03(月) 06:53:46.78 ID:9nl14toh0.net
>>324
調べたらわかりました
ありがとうございます

326 :デフォルトの名無しさん :2018/12/03(月) 10:00:18.38 ID:KLYQbJ33a.net
fmemopenって何に使うと便利なの?

327 :デフォルトの名無しさん :2018/12/03(月) 10:10:02.85 ID:98KtjA3l0.net
なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?

328 :デフォルトの名無しさん :2018/12/03(月) 10:44:00.29 ID:7ySpxLkda.net
>>326
FILE * 経由の入力や出力をするように書かれているプログラムで使うと便利な場合があると思う。

329 :デフォルトの名無しさん :2018/12/03(月) 12:19:30.10 ID:dfidJp1A0.net
>>327
晒しage

330 :デフォルトの名無しさん :2018/12/03(月) 12:27:39.88 ID:7ySpxLkda.net
>>329
それはC言語を知らない初心者が前スレだったかで残した名言

331 :デフォルトの名無しさん :2018/12/03(月) 13:14:41.09 ID:dfidJp1A0.net
長文の連投で得意がってるあいつな

332 :デフォルトの名無しさん :2018/12/03(月) 13:29:26.35 ID:UG3pz1BhM.net
プロセスメモリエディタも初めて見たり副作用を知らなかったりする彼ね

333 :デフォルトの名無しさん :2018/12/03(月) 14:06:18.11 ID:xHLM582p0.net
Ruby には、StringIO と言う、メモリ上だけに存在する仮想ファイルがある。
これは、IO クラスの派生クラスではなく、
文字列クラスに、IO にある関数をDuck Typing したもの(インターフェース)

StringIOインスタンス.read, puts など、ファイル操作と同名の関数を使える

テストの際に、本当のファイルを作らなくても、
メモリ上だけでファイルの振りができるので、楽

334 :デフォルトの名無しさん :2018/12/03(月) 14:31:36.79 ID:+OGeTNm4M.net
へぇーっ!メモリ上だけに存在する仮想ファイル?Rubyすごぉ〜い!
特許取った方がいいんじゃない?
ノーベル賞狙えるかもー!?

335 :デフォルトの名無しさん :2018/12/03(月) 14:38:57.12 ID:KLYQbJ33a.net
単体テストで使った様な気もしてきた
でもまあストリームは難しいわ。fopenよりopenが好きだよ

336 :デフォルトの名無しさん :2018/12/03(月) 16:07:39.69 ID:7ySpxLkda.net
ノーベル仮装ファイル賞

337 :デフォルトの名無しさん :2018/12/03(月) 17:24:12.07 ID:dfidJp1A0.net
C++にもstringstreamがあって
メモリ内でファイルイメージが作れる
しかもcin, cout, ifstream, ofstreamの
メンバ関数・フレンドが全て使える

338 :デフォルトの名無しさん :2018/12/03(月) 18:30:35.22 ID:+OGeTNm4M.net
なぁんだRubyパクリだったのか。ダッサ。
パクリRuby!

339 :デフォルトの名無しさん :2018/12/03(月) 19:19:41.79 ID:OHB3X56LM.net
>>329
このスレの初心者乙

340 :デフォルトの名無しさん :2018/12/03(月) 21:56:42.64 ID:r8O+Z3hZ0.net
>>332
プロセスメモリエディタを知ってる=Cを知ってる、になるのか。
さすがゆとり、だな。
お前らはそんなことばかりするから、お前らの居場所を無くして行ってるんだぜ。
自覚出来てないんだろうけど。

まあ、ゆとりに付ける薬はないって事だな。
三つ子の魂百まで、と同様、ゆとりの魂百まで、なのだろう。

341 :デフォルトの名無しさん :2018/12/04(火) 00:25:16.59 ID:VVlGsdy50.net
void君怒りのポエム

342 :デフォルトの名無しさん :2018/12/04(火) 22:17:29.21 ID:YeiHZFGw0.net
彼は自分がゆとりであることに気付かない。超ゆとりである。

343 :デフォルトの名無しさん:2018/12/05(水) 00:34:11.12 ID:SdYL/PxYZ
http://altohumano.com/gt-r%e3%80%80%E8%B2%B7%E5%8F%96/

344 :デフォルトの名無しさん :2018/12/06(木) 08:22:58.33 ID:cC0kDT7D0.net
勉強始めて半年くらいの初学者だけどenumの便利さに今日気が付いて震えてる
case文がシェルスクリプトとかのと比べてあんなに使いにくいものになってるのはそういうことだったのね……。

345 :デフォルトの名無しさん :2018/12/06(木) 09:11:25.93 ID:mp97/YFka.net
なんにせよまあswitch/caseはあんまり使わない方がいいですよ。

346 :デフォルトの名無しさん :2018/12/06(木) 10:46:35.55 ID:y2fvjog80.net
なんで?

347 :デフォルトの名無しさん :2018/12/06(木) 11:06:46.21 ID:mp97/YFka.net
クソコードに発展しやすいんです。
if文の方がちゃんとしてる。

348 :デフォルトの名無しさん :2018/12/06(木) 11:09:04.26 ID:qlBG7toFM.net
偏見だしアホとしか思えん

349 :デフォルトの名無しさん :2018/12/06(木) 12:09:10.95 ID:uFg4otuRx.net
switchは単一の変数(大抵は状態)を比較してることが一目瞭然。
case内が長くなって醜いのは全く別の問題。

350 :デフォルトの名無しさん :2018/12/06(木) 12:25:09.83 ID:nzH90qpKa.net
まあ今となってはコンパイラが軽く最適化してくれれば全く同じコードになってしまうかも知れず、どちらで書くかは見易さの問題だけかも知れない。
ま、switchはbreakなしで下に抜けるっていうifとの違いがあるからそれ利用してたら別だけどな。

351 :デフォルトの名無しさん :2018/12/06(木) 14:08:22.67 ID:CZHWXsyR0.net
switch〜caseで、char 値の比較の場合、昔のコンパイラでも最適化した時、
条件分岐じゃなくて、テーブルジャンプにしてくれるものがあったなあ。
最近のコンパイラが if〜else if〜 で記述した時、どう最適化してくれるのかは知らない。

352 :デフォルトの名無しさん :2018/12/06(木) 14:36:37.49 ID:LNgus+SNa.net
文法に罪はない人が悪いと言って終わるならば、もうなんでもありで良いんです。
C++の方が選択肢が多い分圧倒的に優れてるとも言える。

353 :デフォルトの名無しさん :2018/12/06(木) 14:39:02.58 ID:LNgus+SNa.net
自分的にアホだと思う書き方はcaseの中身を{}でくくっちゃうやつです。
そんなことするなら関数呼べや。

354 :デフォルトの名無しさん :2018/12/06(木) 14:59:28.18 ID:dlLKQRwlM.net
case文内に関数にするほどでもない、ちょっとした処理を書きたいとき、その処理内だけで使う変数宣言は{}使ってその中に書いちゃうわ。

355 :デフォルトの名無しさん :2018/12/06(木) 15:27:35.39 ID:nzH90qpKa.net
そういやswitchのブロックの先頭でも変数宣言できるんだよな。
今はどこでもできるから関係ないとは思うが昔は驚いた。

356 :デフォルトの名無しさん :2018/12/06(木) 17:17:12.54 ID:cC0kDT7D0.net
地味に都合の良いスコープ範囲だから便利っちゃ便利だよね。

357 :デフォルトの名無しさん :2018/12/06(木) 17:23:21.26 ID:8Uba5j5za.net
たとえば、caseではクロージャ的なもんが使えて、関数ポインタに代入。
抜けた後でそれを実行、とかできるのなら許容するかも。

358 :デフォルトの名無しさん :2018/12/06(木) 18:06:57.01 ID:nzH90qpKa.net
それは普通にできるのでは?

359 :デフォルトの名無しさん :2018/12/06(木) 18:53:53.96 ID:VHVkoIH2M.net
>>355-356
宣言どころか文法的には実行文も書ける
もちろんまともなプログラマはそんなクソコードは書かない
https://www.jpcert.or.jp/sc-rules/c-dcl41-c.html

360 :デフォルトの名無しさん :2018/12/06(木) 19:39:02.33 ID:rq0vzYZsM.net
初期化されないのかよ。
最初から禁止にしといてくれや…

361 :デフォルトの名無しさん :2018/12/06(木) 20:21:33.67 ID:2HZFttMva.net
>>358
いや、クロージャ無いじゃん。
あってもいいと思うけど。

362 :デフォルトの名無しさん :2018/12/06(木) 20:25:38.15 ID:nzH90qpKa.net
のようなもの

363 :デフォルトの名無しさん :2018/12/06(木) 20:45:48.14 ID:TUEVaed40.net
構文やや変数キャプチャの問題はさておき、関数ポインタは原始的なクロージャっぽく使えるよね。
こんなん書いたらクロージャ原理主義者が反論しそうだけど。

364 :デフォルトの名無しさん :2018/12/06(木) 20:49:35.87 ID:nzH90qpKa.net
苦労者

365 :デフォルトの名無しさん :2018/12/06(木) 21:11:52.76 ID:qetyDFhY0.net
GNU拡張だと関数の中で関数定義できたっけ。

366 :デフォルトの名無しさん :2018/12/06(木) 22:27:01.40 ID:RVfmRZI1d.net
C言語勉強してます。
エラーにOBJが開けませんってでるんだけど、どうしたらいいか教えてください。
コンパイラーはbcpadです

367 :デフォルトの名無しさん :2018/12/07(金) 02:34:07.16 ID:4kVuFzeP0.net
bcpadって、懐かしい響きだな。
古すぎてなにか特別な理由がない限り使われなくなってるようなものだと思うんだが、なんでそれ使って勉強しようと思った?

368 :デフォルトの名無しさん :2018/12/07(金) 20:07:09.75 ID:S1fEuKj1d.net
授業で使ったからこれでいいかなーって感じ、これといった理由ないです笑
最近はどんなコンパイラーが主流なんです?

369 :デフォルトの名無しさん :2018/12/07(金) 20:26:20.52 ID:RTzoABIk0.net
Lattice C

370 :デフォルトの名無しさん :2018/12/07(金) 20:32:40.15 ID:F84vPdIda.net
MSのVisual Stdioに入ってるVC++か、gcc か、clangだね。

bcpad使った事ないけど、それで使えるbccも地味に生き残ってて進化してた。
(久しぶりに見に行ったらフリーのは最新じゃないけど、地味に進化してた)

エンバカデロがまだインプレス(買収される前)だったり、ボーランド(社名変更前)だったりしてた時代のbccコンパイラ環境設定記事がまんま使えるはず。

371 :デフォルトの名無しさん :2018/12/07(金) 20:55:30.39 ID:qRyaIDL9a.net
LinuxまたはWindowsのWSLのUbuntu等やCygwinの中でもgccが動く。Macでも中はUNIXなので動く。

372 :デフォルトの名無しさん :2018/12/07(金) 21:34:48.53 ID:0/x3pMw+0.net
windowsならmsvc
unix、unixクローンならgcc

コレで十分

windowsでいちいちgccでコンパイルする必要なんかない
たまに確認に使う程度

373 :デフォルトの名無しさん :2018/12/07(金) 21:58:04.56 ID:b95DkfHn0.net
Windowsでネイティブに動かせるGCCもあるし、
無理してVC使わなくても良いと思う

374 :デフォルトの名無しさん :2018/12/07(金) 22:33:44.42 ID:S1fEuKj1d.net
今調べたらけっこうあるんだな、、
これのここがダメ!とかここが強み!とかあったら教えて欲しい🙏

375 :デフォルトの名無しさん :2018/12/08(土) 02:14:28.50 ID:5PBkTMHJa.net
Winならmsvc(VC++)かなぁ。。。速いしVS入れれば個人用途に限りMFC(MSのC++ライブラリ)付きで無料で使える。
ただ、最新のC/C++への対応状況は多分一番対応が悪い。

つい先月見た限りでは、bccは地味に対応状況は良いので、Win32APIが付いてて最新のC/C++使いたいってのには一番環境整え易い。(setbccで一発)

Linux/Unix系はclangかな。
gccにはconio.hが無い。(msvc、bcc、clangにはある)

最新のC/C++対応状況じゃclangとgccが2強だけど、Win用にWin32APIは最初から付いてたか分からない。
WinでGUIするのに情報少なかったから、最新のC/C++の勉強にしか使ってない。

376 :デフォルトの名無しさん :2018/12/08(土) 05:48:44.85 ID:xmV4OmOO0.net
conio ライブラリの ncurses を使った Linux 用の互換ライブラリはあるよ(多分UNIX系OSならLinux以外でも動くような気がするが)。
https://ja.osdn.net/projects/sfnet_linux-conioh/
ていうか conio と curses ライブラリの両方が存在する状態になってから30年ぐらい経ってるので既に世界中で互換ライブラリは作られてると思う。

UNIX系OSでconioが標準的なものとして取り入れられない理由はもっと昔から curses や termios があって根付いていたからだと思う。
後から出てきた MS-DOS 画面専用ライブラリを組み込む気になる人はあまりいなかったんだろう。

377 :デフォルトの名無しさん :2018/12/08(土) 08:04:27.69 ID:5PBkTMHJa.net
助かった。
昔読んだ入門書に環境依存と書いてたけど、互換ライブラリあるんだね。
getch関数地味に使うのよ。

調べたらバッファオフしてから普通のgetchar使ってるのか。
そのままLinux流を覚えても良いかな。

どっちにしても良い機会だった。
有り難う。

378 :デフォルトの名無しさん :2018/12/08(土) 10:14:50.43 ID:+xxwdKok0.net
>>375
> WinでGUIするのに情報少なかったから、最新のC/C++の勉強にしか使ってない。
MFCなんて言ってるから少ないんだよ。それ、20年前の話だし。
MFC -> .NET(Forms) -> .NET(WPF) -> UWPか?もう一つくらい有った気もしたが。

『標準』への対応という意味では遅いけど、
そもそも標準が糞な所はMS独自拡張が行われているからそれなりには困らない。
最新のならC++11にはほぼ対応してたはずだし、「どれがいいですか?」なんて聞く奴には問題にならない。
まあ、お前らは最新の文法を使えることが腕前だと勘違いしているようだから、大問題なのだろうけど。
それも含めて自由にやればいいが。

Borland Builderは一時期Cをリードしたのは事実だが、今だに開発が継続されていたのは俺も今知ったレベル。
Borland信者でなければ普通は地雷扱いで使わない。
というか、win環境ならVS以外を考える意味がない。
無料でGUIのIDEなら第一選択肢がVSで、実際それで十分で終わり、のはず。
無駄なところで苦労したくなければ、とりあえずみんなが使ってる物を使っておけ。

379 :デフォルトの名無しさん :2018/12/08(土) 10:22:20.61 ID:eB2yg23l0.net
C/C++でFormsやWPFなんて使えないんだからしょうがないじゃん。

380 :デフォルトの名無しさん :2018/12/08(土) 10:26:03.56 ID:+xxwdKok0.net
普通の人やMSの定義なら「使える」わけだが。
まあどう見ても平行線だからもういいが。

381 :デフォルトの名無しさん :2018/12/08(土) 10:50:52.94 ID:eB2yg23l0.net
C++/CLIでも持ち出す気か

382 :デフォルトの名無しさん :2018/12/08(土) 11:51:32.86 ID:PBftE5qw0.net
>>375
bccって揃えやすいか?
ダウンロードするのに個人的なことを根掘り葉掘り聞かれるのが
たとえば俺なんかウゼーと思うが

対応状況が良いって、C++98だぜ?
テンプレート実引数にメンバポインタを渡すとコケるあたり致命的だろ

383 :デフォルトの名無しさん :2018/12/08(土) 12:13:07.40 ID:+xxwdKok0.net
>>382
いやこっちだろ。一応ClangベースでC++11らしいぜ。
https://www.embarcadero.com/jp/free-tools/ccompiler

Clang標準のGUI環境としてはありなのか?
或いはVSでgccやClangを動作させている奴もいるし、そっちの方がマシなのか?
いずれにしても人柱物件だと思うぜ。勇者に期待だな。

384 :デフォルトの名無しさん :2018/12/08(土) 12:16:03.45 ID:UjmNmcZda.net
最近はwindowsでもQt使ってくれみたいな話は多いですね

385 :デフォルトの名無しさん :2018/12/08(土) 13:05:07.00 ID:+xxwdKok0.net
一応訂正(補完)しておく。

× > Clang標準のGUI環境としてはありなのか?
○ Clang標準のGUI環境『のIDE』としてはありなのか?

今更CでGUIアプリを作る意味はないし、Qtも流行らないよ。
やれば分かるが、GUIに関しては今現在はHTML/CSS/JavaScriptが最強だ。
マジでそれ以前のGUIなんて全部ゴミ。
だから全部の環境がHTML/CSS/JavaScriptを追いかけているのではないかな。
WPFもGtkもまだCSS部分が出来てない。Qtも見た目その辺の感じ。
Qtはそもそも今時珍しく仕様を開示してない.。この辺が超絶イケてない。
(例:QMLのビデオを試しにみようとしたが目隠しが出る)

386 :デフォルトの名無しさん :2018/12/08(土) 15:03:57.91 ID:AnxWbhvF0.net
そうか、じゃあwebglでも使うか。

387 :デフォルトの名無しさん :2018/12/08(土) 15:27:14.56 ID:AnxWbhvF0.net
あとQtはgpl/lgpl3でもライセンスされてるぞ?ドキュメントも公開されてる。
仕様を開示してないとかどこ見て言ってるんだよ

388 :デフォルトの名無しさん :2018/12/08(土) 15:59:03.07 ID:+xxwdKok0.net
>>386
WebGLはGUIではなくグラ(フィックス)だし、
それ主体ならMFCでも大して変わらないと思うが。
Canvas自体はむしろ旧インタフェースをHTML側に輸入したものだし。

ただ、GUIやるならマジでHTML/CSSのお手軽さは一度試した方がいい。
今のところ他プラットフォームも同様の場所を目指しているから、無駄にはならんし。
CanvasでGUIやる気なら、背景にjpg貼ったなんちゃって仕様のHTMLの方が楽だし、見た目だけなら同じに出来る。
もちろんCanvasの上や下にHTMLを重ねてそっちでイベントだけ取り扱うことも出来る。
これらは旧来のインタフェース(Forms等)でも出来るが、それ用に設計されてないからいろいろ話が面倒になる。

が、まあ、CでGUIアプリを作ろうとすること自体が若干間違いで、
ビュワー等大きなデータを扱う(=速度がそれなりに必要)でなければ、
60fpsさえ出れば何でもいいし、Cでやる意味はないよ。

>>387
他環境と比べての話だぞ。
以前ドキュメント探してもろくなのが無かったし、
今日チュートリアルビデオを見ようとしても登録しないと目隠しが出るし。
こんなのでQtが流行るわけがないね。考え方が15年以上遅れてる。
それでもQtと心中するのも自由だけど。

389 :デフォルトの名無しさん :2018/12/08(土) 17:15:39.30 ID:AnxWbhvF0.net
>>388
開示してないって断言してるじゃん。チュートリアルは仕様じゃないよ?
意見変えるならそう言ってよ。

390 :デフォルトの名無しさん :2018/12/08(土) 17:42:53.93 ID:+xxwdKok0.net
>>389
変えてない。Qtはゴミだよ。
あれで公開していると思うのなら他フレームワーク等見てみろよ。

391 :デフォルトの名無しさん :2018/12/08(土) 18:40:20.20 ID:hIfZgykd0.net
ほとんどC言語関係ないけどQtは最初,マルチプラットフォームで使えてC++バインディングが公式で提供されているっていう理由で
かなーり期待したんだけどね……。結局今はGTK+に戻ってしまった。

392 :デフォルトの名無しさん :2018/12/09(日) 09:54:16.91 ID:8tZnBeFG0.net
Cってほんとに実行速度が速いの? 他のコンパイル式の言語に速度で勝る理由が分からん。
インタプリタならともかく。

393 :デフォルトの名無しさん :2018/12/09(日) 11:07:31.14 ID:dkLieERx0.net
・C言語自体が単純で低水準、変換しやすい
・コンパイラの最適化とそこに投入された人月

というわけでC言語そのものじゃなくてコンパイラで生成された機械語が早い

394 :デフォルトの名無しさん :2018/12/09(日) 15:36:30.25 ID:e81YHx5p0.net
http://www.c-tipsref.com/reference/stdlib/div.html
この辞典の作者はnumeratorを知らないらしいなwww

395 :デフォルトの名無しさん :2018/12/09(日) 15:56:34.95 ID:LXVWu9Mt0.net
>>314
よくもまあPL/SQLを知らないのに批判できるよな。

PL/SQLの例外処理はOracle DatabaseがSQL、ビルトインパッケージの結果をうまく例外として伝播してくれる。

あなたは単に例外を作り出す方の実装が悪いものを見ているだけ。

396 :デフォルトの名無しさん :2018/12/09(日) 15:58:53.53 ID:LXVWu9Mt0.net
>>320
アドレスを指しているアドレスがポインタ。

ポインタが指しているアドレスにポインタがあるわけではない。

397 :デフォルトの名無しさん :2018/12/09(日) 16:03:51.04 ID:LXVWu9Mt0.net
>>392
C言語は低水準言語であるから、うまくやれば速いマシン語になるが、ちょっとしたことでむしろ遅くなるマシン語を生みやすい。

アーキテクチャの知識がない場合は、誤解したアーキテクチャを想定したコードを書いてしまい、実行速度が遅いものができあがる。

398 :デフォルトの名無しさん :2018/12/09(日) 16:59:21.16 ID:c1W3T6/y0.net
>>396
>>397
ん??

399 :デフォルトの名無しさん :2018/12/09(日) 18:56:28.62 ID:+IQ+xQud0.net
>>396
>>397
どうやら違う世界線から紛れ込んできたと見える

なんでこういうcrazyなことを言う輩に限って自信満々に断言するんだ


400 :デフォルトの名無しさん :2018/12/10(月) 15:01:58.63 ID:Yf20pj4f0.net
初心者です。
>>396-397のレスを読んでちょっと混乱しているんですが、
C言語は高水準言語で、
ポインタ変数自体は「アドレスを格納できる4バイト?の変数」っていう認識で合っていますか?

401 :デフォルトの名無しさん :2018/12/10(月) 15:10:08.76 ID:FyPZmeq6a.net
何バイトかは決まっとらん。
サイズに注意出来るようになったらあなたは中級者。

402 :デフォルトの名無しさん :2018/12/10(月) 15:44:39.90 ID:Yf20pj4f0.net
あーそうか、
4byte(32bit)だと0x00000000から0xFFFFFFFFまでの?4294967296通りのアドレスが保存できるんですね。
なので処理系?によって変わるってことなんですね。
ありがとうございます。

403 :デフォルトの名無しさん :2018/12/10(月) 15:58:27.14 ID:4x6+51xya.net
この頃の64bit環境だとアドレスも64bitだと思う。
クロスコンパイルする場合や意図的に32bit用のバイナリを作るようにコンパイルする場合を除く。

404 :デフォルトの名無しさん :2018/12/10(月) 16:54:58.91 ID:o+toD3xT0.net
ポインタ変数のサイズは32bit幅、
ただしセグメント部16bitのオフセット部16bitで
有効な全範囲はトータルで20bit。

405 :デフォルトの名無しさん :2018/12/10(月) 16:56:42.73 ID:/sc6zE4j0.net
いつの時代の話だろう

406 :デフォルトの名無しさん :2018/12/10(月) 17:03:42.11 ID:Ezpzf515M.net
プロテクトモード
何それ美味しいの?

407 :デフォルトの名無しさん :2018/12/10(月) 17:04:09.37 ID:M7qQG5lGH.net
やべー
あの頃から35年も経ったのかよ
漠然と20数年かなとか思ってたよ

408 :デフォルトの名無しさん :2018/12/10(月) 17:16:13.17 ID:Yf20pj4f0.net
一体何の話をしているんです!?
教えてくださいおじい・・・紳士さま。

409 :デフォルトの名無しさん :2018/12/10(月) 17:33:22.27 ID:OF068zeT0.net
16bitCPU時代のアドレスの話

410 :デフォルトの名無しさん :2018/12/10(月) 19:37:12.53 ID:cqLRK3I00.net
映画タイタニックでも「near far wherever you are」と謳われているほどポインタは面倒

411 : :2018/12/10(月) 20:20:50.73 ID:NenbAhKQ0.net
>>410
…うまい

でも near far とかもう通じないんじゃないかな?

412 :デフォルトの名無しさん :2018/12/10(月) 20:29:46.12 ID:4x6+51xya.net
>>408
昔々、8086があったとさ。
めでたしめでたし。
終わり。

413 :デフォルトの名無しさん :2018/12/10(月) 20:32:35.54 ID:4x6+51xya.net
英語版

A long time ago,in a galaxy
far,far away....

414 :デフォルトの名無しさん :2018/12/10(月) 23:14:07.07 ID:l83Jt/Qga.net
>>400
OSによる。
4バイトは8ビット(=1バイト)x4なので32ビット。
32ビットOSなら、それで正しい。

じゃあ16ビットOSや64ビットOSの場合は?

415 :デフォルトの名無しさん :2018/12/10(月) 23:16:39.78 ID:l83Jt/Qga.net
>>404
セグメントは16ビット迄だよね〜。

416 :デフォルトの名無しさん :2018/12/10(月) 23:22:09.98 ID:ADpwiSWg0.net
>>415
つPAE

417 :デフォルトの名無しさん :2018/12/10(月) 23:38:01.37 ID:l83Jt/Qga.net
いあ、知ってるよ?
でも今でも意味あるの?
Athlon64にPCの64ビット化を先越された時代の、その苦し紛れの拡張。

64ビット標準だけで今後PCに乗り切れる時代は来ないであろうメモリ容量をサポートしてるのに。
(理論上の限界来る前に、製造技術上の限界が来る)

Winはあえて制限してるが、時代とともに緩めるだけっしょ。

418 :デフォルトの名無しさん :2018/12/10(月) 23:53:27.02 ID:bJUChMIiM.net
このスレッドは妄想コンピュータで話すやつが張り付いているね。昔は単純な話だったけどさ。

419 :デフォルトの名無しさん :2018/12/11(火) 00:26:54.92 ID:qpk98o5j0.net
8ビットがなつかしいね?

420 :デフォルトの名無しさん :2018/12/11(火) 07:34:54.16 ID:zUaOIyWC0.net
>>417
> 64ビット標準だけで今後PCに乗り切れる時代は来ないであろうメモリ容量をサポートしてるのに。
32ビットになった時にもそんな話をしてたな w

421 :デフォルトの名無しさん :2018/12/11(火) 09:17:41.73 ID:7sleUDEz0.net
プロセスルールの限界から実用的で物理的なメモリの上限はあるんだろうけど、何がどう進化するか分からないからねぇ。
単純に超多層化プロセスルールが一般化するかもしれないし、もしかするとクラウドRAMサービスとCPUアーキテクチャが融合してその限界突破なんて時代が来るかもしれん。
人間の創造力は無限と信じよう。

422 :デフォルトの名無しさん :2018/12/11(火) 10:15:17.85 ID:qpk98o5j0.net
4GBと言う上限は意外に早くたどり着いた
4K動画をオンメモリーで編集したいとなると
途端にぶつかる壁だな

次は誰がこの壁にたどり着くかな?

423 :デフォルトの名無しさん :2018/12/11(火) 12:57:57.93 ID:ZRU2RXnk0.net
Visual Studio 2017のC/C++コンパイラってどこのフォルダに置いてあるんですか
(もしくはファイル名、あるいは、商標名?)
調べても「VSに付属するVisual C++にC/C++コンパイラが同梱されている」程度の
情報しか出てこない・・・
そのコンパイラは何て名前でどこに置いてあるんだ・・・

424 :さまよえる蟻人間 :2018/12/11(火) 13:14:43.83 ID:CGbAPZXN0.net
>>423
スタートメニューのVSコマンドプロンプトを開いてみい。

425 :デフォルトの名無しさん :2018/12/11(火) 13:42:28.53 ID:ZRU2RXnk0.net
はい
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.3
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community

426 :デフォルトの名無しさん :2018/12/11(火) 13:48:36.76 ID:ZRU2RXnk0.net
\Microsoft Visual Studio\2017\Community\VC の中を compiler で検索した結果

compiler.cpp

ん・・・?これ?
実行ファイルじゃなくてソースファイル・・・?
分からない、もうダメだ(絶望)

427 :デフォルトの名無しさん :2018/12/11(火) 13:51:50.68 ID:rotYdjfa0.net
その昔は cl.exe に link.exe のフロントエンドで make は別途だったが今はどうなんだろう

428 :さまよえる蟻人間 :2018/12/11(火) 13:55:01.02 ID:1cpVaJ7Sd.net
cl.exeとかcl64.exeなどの名であると思う。

429 :デフォルトの名無しさん :2018/12/11(火) 14:00:29.46 ID:ZRU2RXnk0.net
ありました!(なぜか4つも)
というかcl.exeってコンパイラだったんですね
コンパイラその他を呼ぶための媒介物かと思ってますた
感謝

430 :さまよえる蟻人間 :2018/12/11(火) 14:18:43.44 ID:CGbAPZXN0.net
最近はx64とかx86とかARMとかARM64とかいろんな環境があるから、コンパイラは複数必要になっている。

431 :デフォルトの名無しさん :2018/12/11(火) 14:51:38.89 ID:ZRU2RXnk0.net
>とかいろんな環境があるから、コンパイラは複数必要
なるほど 勉強になりました

432 :デフォルトの名無しさん :2018/12/11(火) 20:20:15.88 ID:3ovMnnL0M.net
CプログラマでいまのCPUを理解しているやつなんてごく僅か。わざわざC言語を作る必要がない。もっと高水準言語で作って、VMと優秀なコンパイラに任せた方がいい。

433 :デフォルトの名無しさん :2018/12/11(火) 20:46:12.25 ID:g9W94UvY0.net
初心者です。
>>432ののレスを読んでちょっと混乱しているんですが、

>>いまのCPUを理解
というのがまず何を指しているのか分かりません。
パーソナルコンピュータに内蔵されているCPUでしょうか、炊飯器に内蔵されているCPUでしょうか。

>>C言語を作る必要が無い
作らなくてもすでに存在していると思うのですが、自作が必要なものなのでしょうか。

>>もっと高水準言語
C言語自体が高水準言語だと思うのですが、これ以上の高水準とはどういう基準なんでしょうか。
自然言語をコンパイルするとかでしょうか。

>>VMと優秀なコンパイラ
VMというのはVirtualMachineの略でしょうか。VM上で動作するC言語というのがあるのですか?
VMを動かすほどのリソースが無いようなマシン上では何を動かすのでしょうか。
優秀なコンパイラ、ということは Cのコンパイラは優秀ではないのでしょうか。

おじい・・・紳士のみなさま、ご教授お願いいたします。

434 :デフォルトの名無しさん :2018/12/11(火) 21:55:08.95 ID:ihMfYHRY0.net
Windows でも、ファイル操作なら、Ruby !
画面なしのツールなら、たいていのものは作れる

ポインタで時間を浪費することもない

435 :デフォルトの名無しさん :2018/12/11(火) 23:16:54.03 ID:j8P28cRB0.net
>>433
嘘を嘘と(ry

436 :さまよえる蟻人間 :2018/12/11(火) 23:27:54.09 ID:CGbAPZXN0.net
相手にするのが時間の無駄。悩む時間で基本情報とITパスポートの勉強するのがはるかにまし。

437 :さまよえる蟻人間 :2018/12/11(火) 23:43:31.10 ID:CGbAPZXN0.net
おじい、とか言って馬鹿にしちゃダメだよ。ワード、エクセルのエキスパートで、原子炉のタービンを設計するような「ものすごい人」も見てるんだからね。

438 :さまよえる蟻人間 :2018/12/11(火) 23:50:36.12 ID:CGbAPZXN0.net
あと補足だけど、30歳定年説は、人件費を削るための嘘だからね。
人不足の今時にこんなことを言ってるアホの取引先は排除すべし。

439 :さまよえる蟻人間 :2018/12/11(火) 23:59:29.31 ID:CGbAPZXN0.net
今時ハードディスク使ってモニターと照明費を削るようなケチ臭い企業とは取り引きしません!

440 :デフォルトの名無しさん :2018/12/12(水) 00:19:15.01 ID:ysgUNYaF0.net
Code For Japan というイベント内でも、

PDF, Excel などの表示情報が入ったデータを、
エンジニア(住職)が供養する企画をやっているw

441 :デフォルトの名無しさん :2018/12/12(水) 06:43:02.35 ID:MN/7vBAt0.net
>基本情報とITパスポートの勉強

何のことかと思って調べてみれば情報処理技術者試験のことか
そう言えば昔に第一種と上級シスアドに合格してたこと思い出したわ

442 :デフォルトの名無しさん :2018/12/12(水) 11:11:59.11 ID:Fd1X4TAb0.net
マシン性能の限界を突破する為に、関数型プログラミングがある。

443 :デフォルトの名無しさん :2018/12/12(水) 11:23:33.13 ID:MN/7vBAt0.net
関数型は抽象表現能力は高いが実行効率を追求する様な用途向きではないぞ
生産効率も圏論などの数学的思考に慣れていないと下手すればOOPよりも悪化する可能性が高い

444 :デフォルトの名無しさん :2018/12/12(水) 12:19:40.64 ID:XAdiQzbba.net
( ´_ゝ`)フーン

445 :デフォルトの名無しさん :2018/12/12(水) 12:31:12.08 ID:4PEjGm8GM.net
それ以前にマシン性能を言語で突破できたらノーベル賞ものかと w

446 :デフォルトの名無しさん :2018/12/12(水) 12:38:27.52 ID:b75HkCZx0.net
CPUは関数型言語を直接実行するようにできてないから遅いでしょ。

447 :デフォルトの名無しさん :2018/12/12(水) 12:42:36.11 ID:x/hCtcVY0.net
フォースとともにあれ

448 :デフォルトの名無しさん :2018/12/12(水) 12:55:07.41 ID:AGB/ZeXIx.net
CPUの限界を超えれる関数型言語上で関数型言語を作れば元の関数型言語の限界を突破できる。
その作った関数型言語上でまたry

んなわけねーよw

449 :デフォルトの名無しさん :2018/12/12(水) 13:11:22.57 ID:XAdiQzbba.net
SFのスレはここですか?

450 :デフォルトの名無しさん :2018/12/12(水) 13:12:45.03 ID:5HIThNOt0.net
【平和を実現するために】 武器調達の中止、格差拡大の抑止、労働移民の禁止、国政からのバカウヨ排除
http://rosie.5ch.net/test/read.cgi/liveplus/1544586377/l50

451 :デフォルトの名無しさん :2018/12/12(水) 13:15:11.92 ID:SHf/dQVX0.net
関数型プログラミングはλ計算の時点で全く理想的だから
有限のアドレッシングで動いてる今のCPUには全くそぐわない
だから関数型と今のCPUアーキテクチャは根柢から反りが合わないんじゃねえかと

すると関数型の書法を現状の機械語に書き直すだけでロスが出てくる
理想的なモンを劣化させてるに等しいが技術上はそうするしかない

そもそも関数型を直接実行できるようなCPUを人類が作れるかどうか
無限の再帰と無限のストリームが必要になっている時点で怪しい

452 :デフォルトの名無しさん :2018/12/12(水) 13:25:42.01 ID:LIx8RHBsa.net
昔どっかがLisp用にスタックコンピュータだか何だか作ってなかったっけ。

それはともかく、関数型言語でも結局どういうマシン語に落とすかだから、最適化技術で高速化は出来るはずなんだがな。
Cは低水準な操作も出来るから速いコード書けるとはいえ、素直なコードは最適化無しだと他の言語と変わらないし、
速度で言えば別に低水準な操作出来る訳でも無いFortranはC並みに速いわけで。
最適化への技術や時間の掛け方が違うってだけ。

453 :デフォルトの名無しさん :2018/12/12(水) 13:28:27.57 ID:SHf/dQVX0.net
シンボリクスだ

454 :さまよえる蟻人間 :2018/12/12(水) 14:37:12.07 ID:duFENGTGd.net
理論的限界を超えたら、その理論のモデルが事実に反する訳だから、理論の反例になってしまう。

455 :デフォルトの名無しさん :2018/12/12(水) 15:28:39.64 ID:02Irmhu2M.net
ループに展開されることを期待して末尾再起化にハゲむってギャグだよな。
最初からループ書けよw

456 :デフォルトの名無しさん :2018/12/12(水) 15:38:07.68 ID:LIx8RHBsa.net
ループだと関数渡せないから。
あとはリストを受け取ってリスト返す関数とか、IOモナドとかは
再帰関数がそのままループになる。
(リストもモナドなので、モナドを返す再帰関数がループになると言える)

457 :デフォルトの名無しさん :2018/12/13(木) 14:18:51.88 ID:oii7E7F70.net
初心者です。

inline指定子について教えて頂きたいのですが、
関数ポインタからinline関数を呼び出す場合、どのように展開されるのでしょうか。
また、関数ポインタを格納する配列から呼び出すような場合はどのように展開されるのでしょうか。

458 :デフォルトの名無しさん :2018/12/13(木) 14:32:27.38 ID:1m7XwvCgM.net
inline関数の展開は環境依存
呼び出し方が如何なる方法であれ関数の構造によってはインライン展開される保証はない
ループ構造を含んでいると殆ど期待できない

459 :デフォルトの名無しさん :2018/12/13(木) 14:56:19.82 ID:oii7E7F70.net
なるほど、ありがとうございます。
まさに、
for (i = 0; i < length; i++) {
 func_ptrs[i](hoge);
}
みたいなことを試そうとしているところでした。
こういう場合は展開は期待できないということですね。

今回も勉強になりました。

460 :デフォルトの名無しさん :2018/12/13(木) 17:31:05.02 ID:jSkPpV300.net
>>422
次は16EBの壁だな

461 :デフォルトの名無しさん :2018/12/13(木) 18:29:51.36 ID:Bj9kGxVc0.net
gccもclangも最適化を-O3にしても
if(a=='a'||a=='b'||a=='c'||a=='d'||a=='e'||a=='f')
をif('a'<=a&&a<='f')に置き換えてくれないのな

462 :デフォルトの名無しさん :2018/12/13(木) 18:40:11.12 ID:Fv0+Omexa.net
Tではないと

463 :デフォルトの名無しさん :2018/12/13(木) 18:48:07.23 ID:Fv0+Omexa.net
>>461
え?gccで -O -S で置き換えられたように見えるアセンブリ言語出力したぞ。(97引いて5以下かどうか見ているやうなやつ)。
-Oなしだと一つ一つ比較していて明らかに違う。

464 :デフォルトの名無しさん :2018/12/13(木) 18:48:36.88 ID:Gz5l93Ou0.net
GCCの動作環境は特定OSだけではないと思う

465 :デフォルトの名無しさん :2018/12/13(木) 18:51:31.61 ID:Fv0+Omexa.net
CPUによっては一つ一つ比較するように書いた方が速いなんてこともあるのかも知れないが、普通はそうならないように思う。

466 :デフォルトの名無しさん :2018/12/13(木) 19:07:27.96 ID:oii7E7F70.net
ソース全体で見たときに(a < 'a') や (a > 'f')の可能性もあるから最適化されないということでしょうか?

467 :デフォルトの名無しさん :2018/12/13(木) 19:08:30.18 ID:y280e6J90.net
>>461
>>465
a=='a'のときにべたの方が速いからだろ。
a-fが均等な確率だ、というのをコンパイラに対して教えてないし、教える方法もない。
だからコンパイラが勝手にそこを改変するようでは困るだろ。
(大半がa=='a'と分かっていて最速コードが欲しいときに記述出来なくなる)

C言語はそういう言語なんだよ。自動的に勝手にやってくれる言語ではない。
細部まで自分で指定できるからこそ極限までチューニング出来る。
最速コードが欲しければ、a-fの確率まで考えて、自分で指定しろ、でしかない。

468 :デフォルトの名無しさん :2018/12/13(木) 19:28:54.20 ID:VenLBJVu0.net
ワシのとこでも -O で「即値97を引いて即値5と比較…」が出たわ。
-O なしだと真っ正直に即値との比較が6回。

>>461 に書かれた通りの ('a'<=a&&a<='f') にならないと言っても、
'a'以上か? 'f'以下か? の判定2回よりもっと効率的になってるでしょ。

もちろん gcc のバージョンによる違いかも知れんが。

469 : :2018/12/13(木) 19:56:57.11 ID:mMIcaeGH0.net
>>458
ときどき夢にみます、inline 指定がどんな場合にも百発百中 inline になるコンパイラがあればどんなに嬉しいか…

470 :デフォルトの名無しさん :2018/12/13(木) 19:58:30.01 ID:Fv0+Omexa.net
>>467
あー。なるほど。

かといって言語の規格として最適化についてまで決まってたっけ?
その辺は決まってなくてコンパイラしだいのような気がするが。

471 :デフォルトの名無しさん :2018/12/13(木) 20:01:00.67 ID:Fv0+Omexa.net
>>469
しかし関数へのポインタが作れてしまう時点でそれはもう inline ではなくなっているように思うのだが。

472 :デフォルトの名無しさん :2018/12/13(木) 20:23:30.62 ID:y280e6J90.net
>>470
規格云々以前に、適用ヶ所と文化の問題。
C言語がガチで使われている領域はそういうところだから、「書いたとおりのコードを吐け」でないと困るし使えない。
だから適当に改変するコンパイラは嫌われる。

対してC++は「出来るだけコンパイラにやらせる」思想だし、そもそもCほど掘り下げる使い方はされないから、
「可能な限り自動的に最適化しろ」な気はするが。

473 :デフォルトの名無しさん :2018/12/13(木) 21:03:29.67 ID:Bj9kGxVc0.net
C言語のアセンブリがすぐ確認できるサイトで調べてみたんだけど、
違うみたいだね。

474 : :2018/12/13(木) 21:27:21.48 ID:mMIcaeGH0.net
>>471
なるほど…
そういうときは、call されたときは inline に展開するけれども、関数のポインタとして渡されたときに動かすためだけに(実際にポインタから呼ばれるかどうかは考えずに)inline の関数を別にバイナリーに展開しておくっていうのはどうですか?

475 :デフォルトの名無しさん :2018/12/13(木) 21:28:48.05 ID:k+IaCMCPM.net
>>472
この人何言ってるんだろう…

476 :デフォルトの名無しさん :2018/12/13(木) 21:30:50.24 ID:Pd0B4/Sw0.net
>>472
ん??

477 :デフォルトの名無しさん :2018/12/13(木) 21:53:47.05 ID:y280e6J90.net
>>475
>>476
お前がな

478 :デフォルトの名無しさん :2018/12/13(木) 22:39:39.76 ID:fVy8DFiFa.net
>>474
関数内でstaticの変数が宣言されるケースも忘れずに。

479 :デフォルトの名無しさん :2018/12/13(木) 23:12:49.49 ID:k+IaCMCPM.net
ガイジかな? w ⇒ ID:y280e6J90

480 :デフォルトの名無しさん :2018/12/13(木) 23:49:06.95 ID:y280e6J90.net
>>479
まずお前がガイジじゃないことを示せよ
ゆとりなら死ね

481 :デフォルトの名無しさん :2018/12/13(木) 23:54:03.07 ID:Gz5l93Ou0.net
踏まないように気をつけて歩こう

482 :デフォルトの名無しさん :2018/12/14(金) 05:40:44.32 ID:yDEitqc60.net
うわっ、ガイジと言うよりマジキチやん ⇒ ID:y280e6J90
>>481が意味深になってて笑うわ

483 :デフォルトの名無しさん :2018/12/14(金) 06:20:30.12 ID:lAbDnTGa0.net
>>468
どうやったらそんなコードされるの?
なにをやっても全部比較しかでないのだが

484 :デフォルトの名無しさん :2018/12/14(金) 06:26:32.39 ID:lAbDnTGa0.net
いまやったら引き算と比較一回になった。
別の関数の中に比較を入れないと駄目みたいだった。
一個ずつ比較させたいときはvolatileを使えばいいんだな。

485 :デフォルトの名無しさん :2018/12/14(金) 06:30:05.99 ID:lAbDnTGa0.net
最適化をいれるとaが定数だとaが消されるからaを別の関数の引数にすることで
消されないようにできる。
volatileで消さないようにするとなぜか比較が最適されない。

486 :デフォルトの名無しさん :2018/12/14(金) 06:46:52.77 ID:gWmPrUHE0.net
>>484-485
それはvolatileの間違った使い方だから止めとけ。
最近そういう投稿も多いが。

487 :デフォルトの名無しさん :2018/12/14(金) 06:52:31.89 ID:TYVfP/dyM.net
最適化は処理の最中に使う変数が外部(別スレッドや割り込みハンドラ)から変更されないということを前提としてるから、volatileつけるとaの比較途中でaそのものが変更されるかもしれないので逐一比較になる。
まぁスタック上のローカル変数aが外部から変更されるってのは通常は単なるスタック破壊のバグだけどね。

488 :デフォルトの名無しさん :2018/12/14(金) 06:53:45.77 ID:8u55nHdC0.net
>>472
おまえ4.3BSDのccとかまだ使ってるのか?

489 :464 :2018/12/14(金) 07:50:49.15 ID:FIv/Q2MJ0.net
>>483-484
素直なコードで出るはずだけどなぁ。

サンプル abcdef.c
第1引数の最初の文字が [a-f] なら yes, それ以外なら no と表示
(引数が与えられなかった場合は no を表示)

$ cat abcdef.c
#include <stdio.h>

int main(int argc, char *argv[]) {
  int a;

  a = (argc>1) ? argv[1][0] : 'z';

  if (a=='a'||a=='b'||a=='c'||a=='d'||a=='e'||a=='f') printf("yes\n");
  else printf("no\n");

  return 0;
}

$ gcc -S abcdef.c
最適化なし 比較6回

$ gcc -O -S abcdef.c
最適化 97引いて5と比較

490 :デフォルトの名無しさん :2018/12/14(金) 09:57:08.83 ID:v3sklYn80.net
volatileは磁気コアメモリ時代の命令じゃねえのか

491 :デフォルトの名無しさん :2018/12/14(金) 10:14:56.92 ID:lAbDnTGa0.net
>>489
mainで未定の値を作るのがむずかしいんだよ
aを初期化しなければ未定の値になると普通おもうんだけど
何故か何かの値に決められて最適化でaが消えちゃうのよね

492 :デフォルトの名無しさん :2018/12/14(金) 10:15:15.85 ID:QZB89f550.net
現在でも組み込み開発でSFRを弄るにはvolatile宣言は必須

493 :デフォルトの名無しさん :2018/12/14(金) 10:28:42.01 ID:lAbDnTGa0.net
結論を言うとvolatile で最適化を調べるために最適化を抑制したのが間違いの原因だっと
ということだな。

494 :デフォルトの名無しさん :2018/12/14(金) 12:14:57.88 ID:E1rpoA/W0.net
volatileは変数がI/Oポートにマッピングされてることを想定した仕様
コンパイラによる省略とかを許さず書いてある通りにアクセスする

495 :デフォルトの名無しさん :2018/12/14(金) 12:47:24.45 ID:TZB/LQMkx.net
>>494
I/Oだけじゃないよ。
別スレッドなど異なる実行コンテキスト間で共有する領域へのアクセスはvolatileをつけないといけない。
SFRへのアクセスもソフトとハードという実行コンテキストが異なる。

496 :デフォルトの名無しさん :2018/12/14(金) 14:14:04.61 ID:7OLXAkOEa.net
静的変数は全部つけないといかんのだろうね。
利用の趣旨としては。

497 :デフォルトの名無しさん :2018/12/14(金) 15:46:34.42 ID:FWw1nr6R0.net
ID:y280e6J90はvoid君だろ

498 :デフォルトの名無しさん :2018/12/14(金) 16:07:06.94 ID:cCP3RgWTa.net
volatile の使い所

1. マルチスレッドで他スレッドと共有される変数(ただし、別途ロックも掛けた方が良い)。

2. シグナルハンドラとその他の処理で共有する変数。

3. longjmp() 使う時。

499 :デフォルトの名無しさん :2018/12/14(金) 16:08:45.11 ID:cCP3RgWTa.net
これ書き忘れてた。

4. 指している先の内容が本当に揮発性の場合(I/Oポート等)

500 :デフォルトの名無しさん :2018/12/14(金) 16:22:16.94 ID:lsnrrwE80.net
記述された手続き以外の要素によって変数値が変わるなら

501 :デフォルトの名無しさん :2018/12/14(金) 19:01:54.99 ID:RfUJ40dd0.net
>>498
volatile変数をマルチスレッドに使うとかいう誤った知識を流布しないでくれ
volatileに指定してもマルチスレッド共有変数に求められる

* メモリフェンス
* 演算の原子性

は確保できない

ttps://stackoverflow.com/questions/4557979/when-to-use-volatile-with-multi-threading

502 :デフォルトの名無しさん :2018/12/14(金) 19:20:00.03 ID:td3PjTJAa.net
原子性って全然直交した概念ちゃうか。
確保できるとかできないとかいう話になるのがおかしい。

503 :デフォルトの名無しさん :2018/12/14(金) 19:41:07.95 ID:gWmPrUHE0.net
>>498-499
×××○
知らない人が見たらマジ議論と勘違いするのも無理はないが、
2chでのlongjmpなんてネタだから無視でいい。

>>501
全くだ。


というかマジな話、何をどこに使うべきかイマイチ分かってないのなら、
とりあえずいわゆる「正しいプログラミング」を目指した方がいい。
ここでの与太話は、ネタをネタと(ry、でしかない。

504 :デフォルトの名無しさん :2018/12/14(金) 20:47:21.99 ID:8u55nHdC0.net
>>498
マルチスレッドは断じて関係ない

アフォwヴァカwww

505 : :2018/12/14(金) 21:07:51.74 ID:+oZBuxlP0.net
volatile なんか忘れて素直に pthread とか C++11 とか使っていればいいと思うのです…

506 :497 :2018/12/14(金) 21:15:41.90 ID:6hfmhPbO0.net
>>502
そのはずなのに使えるなんて言う妄言痴言が飛び交っていたんだから重症だよ

>>503
シグナルハンドラに関してはvolatileが必要じゃない?もちろんその変数に対するatomicityも要求されるけど

507 :デフォルトの名無しさん :2018/12/14(金) 22:13:48.43 ID:gWmPrUHE0.net
>>506
知らんよ、俺はLinuxのsignalなんて使って無いし。
そのページには必要だと書いてあるし、そうなんだろうさ。

が、そもそも、俺に言わせれば
・volataileで実装出来る=ポーリングループ&せいぜいハンドシェーク=糞
・プロセス間通信する意味がない
スレッド間通信でsleep/wakeupで何も問題ないし、その方が自然だ。
この場合に自前でvolatileなんて書くことはない。
ハードウェアを直接叩かないのにvolatileとか、設計を見直した方がいいと思うぜ。

508 :デフォルトの名無しさん :2018/12/15(土) 00:19:10.79 ID:MJLVMCBK0.net
>>433
Cのコンパイラは環境依存になるため、コンパイラの出来、不出来がある。

509 :デフォルトの名無しさん :2018/12/15(土) 01:44:33.10 ID:USiGJg2x0.net
必要条件と十分条件の違いが分かってないやつがいるな。

510 :デフォルトの名無しさん :2018/12/15(土) 09:51:27.56 ID:hAY8T09E0.net
>>507
フェンスがないのにハンドシェークとは、これいかに

511 :デフォルトの名無しさん :2018/12/15(土) 11:50:06.13 ID:nIs3KSLY0.net
>>510
> 標準シグナルの場合、そのシグナルがブロックされている間に 同じシグナルの複数のインスタンスが配送されても、 1 つだけがキューに入れられる。
> https://linuxjm.osdn.jp/html/LDP_man-pages/man7/signal.7.html
しかし実際ハンドシェークだと思うぜこれは。

意識高い系()ゆとり()がCをやるとfenceという『CPU命令』が必要だと思っちゃうのか?
まあ無理も無いとも思えるが。

512 :デフォルトの名無しさん :2018/12/15(土) 11:53:03.04 ID:qrRqm5Rq0.net
それはC言語の話なのか、OSの話なのか、CPUの話なのか

513 :デフォルトの名無しさん :2018/12/15(土) 12:22:47.52 ID:nIs3KSLY0.net
フェンスが必要になったのはコンパイラ側の都合だから、C言語の話だね。
これが理解出来ないのはお前がゆとりの馬鹿だからだ。

マジな話、馬鹿の癖に煽るゆとりは死んで欲しいね。
お互いに何も得る物がない。

514 :デフォルトの名無しさん :2018/12/15(土) 16:08:16.17 ID:uiukVmhyM.net
>>513

515 :デフォルトの名無しさん :2018/12/15(土) 16:24:43.93 ID:tkQQweukM.net
フェンスが必要なのはCPUとコンパイラ双方のためだ。やっぱvoid君は馬鹿だね。

516 :デフォルトの名無しさん :2018/12/15(土) 17:21:35.13 ID:hAY8T09E0.net
>>511
ほうほう、fenceはCPU命令ではないんだな
それでそれで? volatileとどういう関係があるんだw

517 :デフォルトの名無しさん :2018/12/15(土) 18:37:35.51 ID:nIs3KSLY0.net
>>514-516
ゆとりは死ななきゃ直らないと再認識した。
ゆとりが馬鹿であり続ける権利を尊重し、教えてやらないことにする。


つっても、ググればいくらでも出てくるし、ゆとり以外には実害はないはず。
マジな話、上達したい奴は、ググっても疑問が解消しないときのみ、掲示板等に頼るようにした方がいい。
自力で勝手に進んでいけるか、いちいち構ってちゃん状態になるかでは、上達速度に雲泥の差が出る。
こんなところで下らない煽り合いに興じてるから、ゆとりはゆとりのままなのだと思うし。

StackOverflow(英語版)はかなりオススメだ。迷ったらそこを頼れ。

518 :デフォルトの名無しさん :2018/12/15(土) 19:04:30.55 ID:/O2tQ50qM.net
void君は謎の捨て台詞好きだよね。かっこ悪いよ。

519 :デフォルトの名無しさん :2018/12/15(土) 19:15:51.64 ID:qrRqm5Rq0.net
ここにはお前に用がある人はいないそうだ

520 :デフォルトの名無しさん :2018/12/15(土) 19:17:41.02 ID:CVS0UY4MM.net
霊界は存在するよね。ググればいくらでも出てくるしww

521 :デフォルトの名無しさん :2018/12/15(土) 19:40:59.06 ID:nIs3KSLY0.net
以下、C言語について詳しいつもりの、格好いいつもりの粘着君が教えてくれます。ご安心を。
(レベルはあのコードを糞コードと認識出来ないようなので推して知るべし)


マジな話、volatileをスレッド同期に使え、なんてのは世界中の誰も言ってないだろ。
勿論longjmpもgotoもその類だ。
ここはそれを分かってるロートル連中が与太話をするところであって、
マジの初心者が来るのは危険だと思うがな。ネタをネタと(ry
初心者なら、まずは正しいプログラミングを目指すべきだと思うぜ。
本来はリアルで先輩/上司/先生に教えを請えるのが一番いいが、
駄目ならStackOverflow(英語版)を俺はオススメするが。

最近は知恵遅れも知恵袋と化してきていて、例えば以下(PHPのスレより、ただし削除済み)
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10199147355
そこで焼け出された知恵遅れゆとりがこちらに押し寄せてきているのだと推測しているが、
お互いにとって不幸なことになってる。
ただし知恵袋が機能するなら、本来はIDがある分向こうの方がましだから、向こうを使った方がいいと思うが。

知恵遅れゆとりがスクラム組んで押し寄せることに対して、2chは防御手段がない。
実際、こいつらが役に立つことを一回も言ったことがないのも事実でさ。
こいつらは死ぬまでイナゴし続けるんだろうな、って思う。

522 :デフォルトの名無しさん :2018/12/15(土) 21:18:31.36 ID:hAY8T09E0.net
ニヤニヤ

523 :デフォルトの名無しさん :2018/12/15(土) 21:37:43.77 ID:VC87camXa.net
C言語について詳しいつもりの、格好いいつもりの粘着君ってこんな名言残した人の事ですか?

>なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?

524 :デフォルトの名無しさん :2018/12/15(土) 22:00:05.11 ID:nIs3KSLY0.net
>>523
お前らがその30年前に解決した話に異常に固執するのも意味不明だがな。
それはお前らのレベルではそれが全てだ、と言っているに等しいわけだが、それについては恥ずかしくないのか?

525 :デフォルトの名無しさん :2018/12/15(土) 22:03:06.74 ID:hAY8T09E0.net
ぐうの音も出ねえって
こいつのためにあるような言葉だなw

526 :デフォルトの名無しさん :2018/12/15(土) 22:33:19.53 ID:3LFJSGA60.net
void君て、半角カナ君とかなり似た匂いがするけど、亜種か別設定キャラだったりするのだろうか?

527 :デフォルトの名無しさん :2018/12/15(土) 22:35:12.80 ID:MJLVMCBK0.net
C言語はあとから標準化されたのと、コンパイラの実装はUNIXを想定しているため、OSが異なるとコードの意味まで変わる。

528 :デフォルトの名無しさん :2018/12/15(土) 22:44:04.38 ID:8aRCy95z0.net
オレは要点を簡潔明瞭にレスしてるからな
あったま悪い低学歴底辺のキミラの生きうつしになるvoid君と一緒にされたら困るワケ

キミラにとってvoid君はただの同族嫌悪

529 :デフォルトの名無しさん :2018/12/15(土) 23:22:08.85 ID:BLCVn7NJ0.net
初心者です。

ソートとコンパイラの最適化について教えて頂きたいのですが、
挿入ソートを書いてその実行時間を計測しました。
動的に確保した10000の要素数を持つ配列に、rand()関数でランダムな値を入れて、
clock()関数でソート時間を計測しています。

コンパイラはMinGWから入れたGCC6.3.0で、-O1と-O無しで実行時間にかなりの差が出ます。
バブルソートや選択ソートでは極端に大きな差が出ないのですが、挿入ソートだけはかなり差が出ます。
-O無しだと7秒前後、-O1だと1.7秒ほどで完了します。

自分が書いた挿入ソートが正しい内容になっているかと、
このプログラムでの最適化でどのようなことが行われているのかおおまかに教えて頂きたいです。

挿入ソートは以下の様に書きました。
void insersion_sort(unsigned array[], unsigned length)
{
 register unsigned *start = &array[0];
 register unsigned *sorted = start;
 register unsigned *end = &array[length - 1];

 while (sorted < end) {
  register unsigned *crnt = sorted + 1;
  while (crnt > start && *crnt < *(crnt - 1)) {
   swap(crnt, crnt - 1);
   crnt--;
  }
  sorted++;
 }
}

530 :デフォルトの名無しさん :2018/12/15(土) 23:41:43.90 ID:nIs3KSLY0.net
>>529
> コンパイラはMinGWから入れたGCC6.3.0で
そのレベルならVS使えってマジで。
GUIでグレークポイント貼って追跡出来るだけで全然違うから。

> 自分が書いた挿入ソートが正しい内容になっているかと、
自分でデバッグしろドアホ。
自前でチェックすれば済むんだから、簡単に出来るだろ。
for (int i=0;i<10000-1;i++) if (array[i]>array[i+1]) printf("BUG: %d, %d, %d, %d\n",i,i+1,array[i],array[i+1]);
とか。

> register
使うな。
ってかおまえ、何を参考にして学んでる?

> void insersion_sort(unsigned array[], unsigned length)
> unsigned array[]
これもあんまりやらないと思うけど。

> 最適化でどのようなことが行われているのかおおまかに教えて頂きたい
それをマジで聞きたいならオブジェクトコード(逆アセンブルコード)を貼る必要があるわけだが。

531 :デフォルトの名無しさん :2018/12/15(土) 23:50:10.65 ID:BLCVn7NJ0.net
>>530
レスありがとうございます。

VSなら使っています。VSCodeですがw
ちなみにGUIでデバッグも出来ますね。
バグは出ていないのにデバッグする意味ってあるんですか?
質問の意図としては、「ちゃんと正しいアルゴリズムで実装できているか」という質問をしているのです。
「動かないからおかしいところ教えてください」という意味ではありません。

register指定子を付けるだけで、付けていないときに比べて2倍ほど変わるのですが、
付けないほうが良い理由を教えて頂けますでしょうか。

unsignedもあまりやらない意味を教えてください。
今はrand()から帰ってくる値が入っているだけですので意味ないのは確かですが。

532 :デフォルトの名無しさん :2018/12/15(土) 23:53:27.39 ID:BLCVn7NJ0.net
× 2倍ほど変わる
〇 ソート時間が2倍ほど変わる
連レス失礼

533 :デフォルトの名無しさん :2018/12/16(日) 00:07:00.48 ID:w2yggEy4a.net
引数voidにすると魔除けになるかもな

534 :デフォルトの名無しさん :2018/12/16(日) 00:10:07.53 ID:GOuL0+IB0.net
度々ごめんなさい。配列の桁数を間違えていました。
×10000
〇100000
です。

535 :デフォルトの名無しさん :2018/12/16(日) 00:11:33.51 ID:nrAiyUBx0.net
>>531
C言語に詳しくない俺でもわかるが、CPUは正と負の数を扱っているから、正の数と指定されると余計な処理が挟まる。

536 :デフォルトの名無しさん :2018/12/16(日) 00:13:46.60 ID:+TcxNu6P0.net
>>531
> ちなみにGUIでデバッグも出来ますね。
それならいい。

> ちゃんと正しいアルゴリズムで実装できているか
ならwikiでもどうぞ。いちいち聞くんじゃなくてさ。
https://ja.wikipedia.org/wiki/%E6%8C%BF%E5%85%A5%E3%82%BD%E3%83%BC%E3%83%88

> register指定子を付けるだけで、付けていないときに比べて2倍ほど変わるのですが、
マジで?

> 付けないほうが良い理由を教えて頂けますでしょうか。
https://cpprefjp.github.io/lang/cpp11/deprecation_of_the_register_keyword.html
つかマジで、お前が参考にしている本なりサイトはかなりヤバいと思うぜ。
(Cでも同じはずだが、実際効いているのであれば違うのか?)

> unsignedもあまりやらない意味を教えてください。
いや、書き方が曖昧だったが、[]をやらない。大概は、 unsigned *array だと思う。


つか、全般的にコードが妙な書き方になってるから、直した方がいい。
初心者なら、単に教科書かその類に問題があるだけだと思うし。


>>532
この文脈でそこを誤解することはあり得ないから大丈夫。
(なのはリアルだけで、2chでは信じられないレベルのコミュ障がいるのもまた事実だが)

537 :デフォルトの名無しさん :2018/12/16(日) 00:15:38.43 ID:GOuL0+IB0.net
>>535
なるほど、ありがとうございます。

書き始めたときは何も考えていなくて、とりあえず大きい値が入れられるようにunsignedにしていましたw
今後正負で大きい値も扱える型の配列に直そうと思います。

538 :デフォルトの名無しさん :2018/12/16(日) 00:24:06.30 ID:GOuL0+IB0.net
>>536
レスありがとうございます。

ちなみにそのwikiの説明文を見て挿入ソートを書いています。
ソースの部分は読んでいませんが。

GCCは最適化を有効にしなければregisterが効くなんてのは結構有名だと思っていたんですがそうでもないんですかね。

配列引数に[]を書かないというのは、別に個人の趣味みたいなもんだと思うので良いんじゃないでしょうか。
他の人とコーディングするなら規約などに従いますが、今は自分一人で書いているだけなので。
[]が書いてあれば配列を渡すというのが一目瞭然であるから付けているだけです。(arrayという名前や、lengthが必要な時点で分かりますが)
*start = &array[0];としているのも同じ理由です。
*start = arrayと書くより分かりやすいと思うからそうしているだけです。

別にコーディング規約の話をしているわけではないのでこの辺でよろしいでしょうか?

539 :デフォルトの名無しさん :2018/12/16(日) 00:25:21.59 ID:+TcxNu6P0.net
>>535
まあそれはあるが、細かすぎるからいいかな、って思ってた。

>>537
あとな、多分、 unsigned ではなくて、 unsigned int の方が主流のような気がするが。
まあそれ以前に531の指摘通り、intでやれ、ということではあるが。

540 :デフォルトの名無しさん :2018/12/16(日) 00:28:37.95 ID:GOuL0+IB0.net
あとちなみに、registerが非推奨になっているのはC++の話ではないんですかね?
その辺も詳しい方いましたら教えてください。

541 :デフォルトの名無しさん :2018/12/16(日) 00:29:37.27 ID:GOuL0+IB0.net
>>539
unsigned intの省略型がunsignedだと思っていたのですが違うのでしょうか?

542 :デフォルトの名無しさん :2018/12/16(日) 00:33:29.78 ID:+TcxNu6P0.net
>>538
> GCCは最適化を有効にしなければregisterが効くなんてのは結構有名だと思っていたんですが
知らん。
というかそのそも最適化無効で使うことがほぼあり得ない。
さらに言えば、-O1ってのも奇妙で、普通は-O2か最近は-O3。

マジで君、全般的に色々おかしいんだよ。

> 別にコーディング規約の話をしているわけではないのでこの辺でよろしいでしょうか?
好きなように書けばいいんだが、上達速度を上げたいなら、『他人と同じコーディングルール』で書いとけ。
それで損はしない。
慣れてる書き方の方が速く読めるから、
他人のコードを読むときに同じ時間でより沢山のコードを読めるようになり、上達しやすくなる。

543 :デフォルトの名無しさん :2018/12/16(日) 00:40:59.45 ID:GOuL0+IB0.net
>>542
ちなみにO2とO3も試しましたが、O1と変わらないですね。
-O無しだとこの速度で、一体どこから速くなるんだろうと-O1を試したら速くなっていた、というだけの話です。
最適化無効で使うことがあり得ない、というのも今初めて知りました。ありがとうございます。

私から逆に言わせてもらうと、あなたも全般的におかしいと思います。
まず、質問に対する回答に全くなっていないという点。
あと、「上達速度を上げたい」などと一言も書いていないのですが、
一体どこからそう読み取って、「他人と同じコーディングルールで書け」などと余計なお世話を押し付けてきているのでしょうか。
先にも書きましたが、「今は自分一人で書いているだけ」なので勝手にさせていただきます。

あと万人に共通しうる「他人と同じコーディングルール」とやらのご教授もできたらお願いします。
できたらで結構ですが。

544 :デフォルトの名無しさん :2018/12/16(日) 00:41:28.75 ID:+TcxNu6P0.net
>>541
> 通常は、unsignedの後にintやlongなどと記述して用いるが、これを省略しunsignedとだけ記述した場合はunsigned intであるとして処理される。
> https://www.wdic.org/w/TECH/unsigned
そのようだが、ほぼ見ないと思うぞ。
まあ俺は仕様に詳しいわけではないし、俺の揚げ足取りをしたがっている粘着君に期待しよう。
彼は喜々としてヒャッハーしてくれるだろうし。


ただ何度も言ってるが、全般的に色々標準的ではないので、教科書なり参考サイトを見直した方がいい。
そこで意固地になられる理由も俺には分からないが。

545 :デフォルトの名無しさん :2018/12/16(日) 00:46:03.68 ID:Q57qqdXG0.net
> 自分が書いた挿入ソートが正しい内容になっているかと、

じゃあまずチェックプログラムを作りなさい

 @入力の列の値がすべて出力の列の値に含まれているかチェックする関数
 A出力の列の大小関係が適切になっているかチェックする関数

@、Aが面倒だったら、同じ入力の列の値を使って
qsort()の結果と出力の列の結果が同一になっているかチェックする関数
いろんな大量の乱数列使って問題がおきなかったらとりあえず誤りは検出されなかったことにすればいい

で、その前に
こういった試験するためのテストドライバをまず作ってみなさい
試験するためにはこういった機能があるテストドライバ用の関数が必要になると考えられるからな

 @擬似乱数を生成する
 An個の乱数列を生成する
 Bn個の列を複製する
 Cn個の列をダンプする

というわけで作業に戻りなさい

546 :デフォルトの名無しさん :2018/12/16(日) 00:46:05.25 ID:+TcxNu6P0.net
>>543
前後したが>>544がそのまま当てはまる。

とはいえ、まあ分かった、俺は君には今後回答しないことにする。
それがお互いの為のようだし。

547 :デフォルトの名無しさん :2018/12/16(日) 00:47:26.92 ID:Q57qqdXG0.net
低学歴底辺ドカタのアドバイスなんか
聞く必要ないからな

548 :デフォルトの名無しさん :2018/12/16(日) 00:50:09.46 ID:JR5j914d0.net
半角まで出てきたwww

549 :デフォルトの名無しさん :2018/12/16(日) 00:50:43.18 ID:Q57qqdXG0.net
低学歴底辺ドカタ内部のオキテの話なんか
どうでもいいワケ
どうみても質問ではそんなどうでもいい話なんか書かれてないからな

550 :デフォルトの名無しさん :2018/12/16(日) 00:54:38.84 ID:GOuL0+IB0.net
>>544
「unsigned int」と書くか「unsigned」と書くか、や、
「あなたがどう書いているかを見かけるか」なんて正直、本当にどうでも良い話です。本当にありがとうございました。
「あなたが思う『標準的』」とかも本当にどうでも良い話です。

揚げ足取りを従っている粘着君に期待するのは勝手なんですが、私を出しに使うのはご遠慮願いたいです。
もっというと他所でやってほしいです。どうでも良いので。

551 :デフォルトの名無しさん :2018/12/16(日) 01:00:00.06 ID:GOuL0+IB0.net
>>545
レスありがとうございます。

@入力の列の値がすべて出力の列の値に含まれているかチェックする関数
少ない要素数の配列では目でチェックしましたが、
100000の要素数の場合、これは行っていないので作ってみようと思います。

552 :デフォルトの名無しさん :2018/12/16(日) 01:12:48.33 ID:+TcxNu6P0.net
>>550
なるほど君も別の方向にコミュ障だから、>>532な訳か。
俺は別に君をダシにしたわけではなくて、
君の質問の>>540-541に関しては粘着君が喜々として答えてくれ、それが君の為にもなるだろう、と言っているだけ。

ちなみに君が欲しがっている回答は、現時点では情報不足で誰も正確には答えられないんだよ。
それも最初に言ったろ。

なんつーか、ゆとりはマジでこのパターン多過ぎ。
表面だけ丁寧で、中身がものすごく無礼、というか。
お前はお姫様/王子様ではないんだぜ。


逆に半角君も俺にはよく分からんが。
表面だけやたら人を罵倒しているが、実際はいちいちシコシコ回答してるから、手間はかかっている。
コンプレックスの固まりで他人を馬鹿にしたいだけなら粘着君みたいになるはずだし、
(馬鹿にするだけで一切自分の意見を言わない
=意見を言うとそこに反論される可能性が発生するから怖くて出来ない)
何がどうなると半角君になるのかよく分からん。

553 :デフォルトの名無しさん :2018/12/16(日) 01:20:36.44 ID:GOuL0+IB0.net
>>552
>>546

あとあなたも大概「無礼」ですよ。人を侮辱する前にご自身の発言を読み直したらいかがですか?
いきなり「ドアホ」言う人は中々私の周りにはいないです。
きっと「コミュ障」だからかもしれませんねw

554 :デフォルトの名無しさん :2018/12/16(日) 01:26:00.46 ID:+TcxNu6P0.net
>>553
そのレス自体が俺の方が数段上手なことを示しているわけだが、それも理解出来ないのだろ?
だから君はコミュ障なんだよ。まあいいが。

ま、きみは2chには向いて無いと思うぜ。

555 :デフォルトの名無しさん :2018/12/16(日) 01:32:48.16 ID:GOuL0+IB0.net
>>554
>>546

「どちらが上手か」や「コミュ障かどうか」や「2chに向いているか」を議論するスレでは無いのは理解できておられますか?
なんにせよ私にとってあなたは、全く理解の足しにならない人間だということは、低能コミュ障な私にもよく理解できましたので、更に数段上を目指してご邁進くださいませ。
かしこ。

556 :デフォルトの名無しさん :2018/12/16(日) 01:35:58.25 ID:nrAiyUBx0.net
>>538
C言語というよりコンピュータの基本を勉強した方がいい。CPUのレジストリは限られているから、本当にレジストリを使うマシン語がはかれたらOS、他のソフトウェアを阻害しかねない。

マルチプロセスではない昔のコンピュータならまだわかるが、CPUを占拠するようなコードを書くのは尋常ではない。

557 :デフォルトの名無しさん :2018/12/16(日) 01:37:47.75 ID:nrAiyUBx0.net
>>541
省略してはならない。これ基本。
可読性も落ちる。

ふざけているのか?

558 :デフォルトの名無しさん :2018/12/16(日) 01:44:53.73 ID:nrAiyUBx0.net
>>555
ネット上に転がっているサンプルはデタラメ、悪い例のオンパレードだったりする。

ちゃんと信用できるところを見ろ。

だいたいint型が何バイトで、CPUのレジスタ長が何ビットかわかってる?

559 :デフォルトの名無しさん :2018/12/16(日) 01:53:47.94 ID:nrAiyUBx0.net
コーディングスタイルは個人の好みで、できればよい、動けばよいなどと言う人間がこのようなソート処理を作るはずがない。

速い遅いのこだわりもどこから出てくるのかわからない。

560 :デフォルトの名無しさん :2018/12/16(日) 01:57:29.82 ID:GOuL0+IB0.net
>>556
メモリ周りの理解が深まると思い、C言語を学習してます。
レジストリ、というのはレジスタのことでしょうか?
register指定子ついてですが、
それをそのまま適用するどうかはコンパイラ依存だと認識しているのですが違うのでしょうか。
これら以外にレジスタを必要とする値や演算があったならば、それを采配するのはこのソートを行うプログラムではなくてOSではないでしょうか。
そもそも、たった3個のポインタ変数がCPUのレジスタを占拠してしまうほどのサイズを持っている変数とは思えません。

>>557
ふざけていませんし、そもそもここで質問する前提にコーディングしていませんでしたので、
「自分の分かりやすいように」記述していました。
つまり「可読性」は「自分にとって可読」であるものです。読みにくければ申し訳ないですね。
まぁこの数行程度のソースで読みにくいと騒ぐ上級者様がいるとは思えませんが。

あとさっきも書きましたが「コーディング規約」について質問しているのではありません。
この数行が読みにくくてしょうがない!というのであれば読んでいただかなくて結構です。
読んでくださる方に聞いているので。

確かに省略しすぎるのは自分もどうかと思っていますよ。
初めて「printf」なんて見たときは「なんのfやねん」って思いましたから。

561 :デフォルトの名無しさん :2018/12/16(日) 02:02:53.44 ID:zisHaYIc0.net
voidはまた質問者の気分を害して悦に浸ってるのか。こいつマジでスレの害悪だわ。

562 :デフォルトの名無しさん :2018/12/16(日) 02:04:29.37 ID:GOuL0+IB0.net
>>558
良いも悪いも、そもそもサンプルなんて読んでいませんし、挿入ソートがどういうモノか、というのだけを読んで書いていますので。
そもそも、ここもそのネット上なわけで。私が書いている関数の内容が正しく動くかや、あなたが今書いていることも信用していいんですかね?
疑い始めたらきりがありませんよ。
くだらない議論なので無価値ですね。

>>559
作るはずがない、と言われても作りました。何の根拠が?w
速い遅いのこだわり、とか書いていますが、そもそもこだわっていません。
「なんで自分の書いた挿入ソートのコンパイルが、最適化の有無でこんなに速度が変わるんだろう」というふとした疑問を書いているだけです。
私が、「速い挿入ソートが書きたい」なんて一言でも書いたでしょうか?

563 :デフォルトの名無しさん :2018/12/16(日) 02:11:16.40 ID:JR5j914d0.net
レジストリwwwww

564 :デフォルトの名無しさん :2018/12/16(日) 02:14:08.51 ID:GOuL0+IB0.net
さて、夜はふけてきましたが、
一部やかましいだけで有用な情報も得られなさそうなので、そろそろ休みます。
私が原因でスレをお騒がせしてしまって申し訳ございませんでした。

もし、挿入ソートが速くなる理由等分かるかたいましたら、また別の日にご教授頂けると嬉しいです。
ひとまずはテスト用のドライバ関数を作ってみたいと思います。
>>545さんありがとうございました。

みなさまおやすみなさい。

565 :デフォルトの名無しさん :2018/12/16(日) 02:26:17.39 ID:cTh7msTfM.net
自演お疲れさまでした

566 :デフォルトの名無しさん :2018/12/16(日) 02:31:39.01 ID:GdI2y+/Wa.net
おやすみなさい

567 :デフォルトの名無しさん :2018/12/16(日) 02:44:07.72 ID:GdI2y+/Wa.net
経験としては、O3にするとバクが顕在化するんであんまり使わないですね。
自分だけなら対応できるけど100人で作ってるプログラムはなかなか難しい。

568 :デフォルトの名無しさん :2018/12/16(日) 04:45:04.91 ID:lv3vm4Nk0.net
逆だろ
バグを顕在化させやすい条件を故意に作るんだよ
ストレステストとかそういうのだし

569 :デフォルトの名無しさん :2018/12/16(日) 08:41:25.08 ID:+JTyra3G0.net
>>529
一般に最適化は、常に同じ結果を出力する最短の計算に変換される。
ソートと書いてあるが、コードに特に比較条件がないので、これは単に
例えば(1 2 3 4 5)->(5 4 3 2 1)と入れ替えている。
元のコードは4+3+2+1=10の入れ替えが発生するが、単に入れ替えるだけなら、
5を1と4を2と、・・・と入れ替えればいい。計算数は2となる。
大小関係の確認を正しく入れれば、他のソートと同様なるかもしれない。
と、以上のように、俺が思っているだけなので、確認した方がいい。

570 :デフォルトの名無しさん :2018/12/16(日) 09:54:31.21 ID:+TcxNu6P0.net
おーい粘着!生きてるか!

折角俺様が「registerなんて見ねえ!」なノリなんだから、
一生懸命仕様を調べて突っ込みに来いよ!
お前の存在価値なんてそれくらいしかないんだし。


>>561
ゆとりなお前らはそれが駄目なんだよ。話が全く進まないだろ。
俺が間違っていることを言っていると思うのなら、ズバッと突っ込みに来るべきなのさ。
お前らはそれをする度胸もないまま、文句しか言えないわけでさ。
ゆとりが何万人いても何も作れなかったのはそれが根本的原因だよ。

少なくとも半角君は前に進むレスをしてるだろ。
彼が10人いれば確実に事態は進展する。
纏まることはないと思うが、それでも烏合の衆でしかないお前らより数段マシだ。

その言い方だと、お前も>>529のコードのやばさが分かってないだろ。
その他ゆとりも大概そんな感じだが。
それで粘着するのはお前らが全員馬鹿だと自身で証明しているようなものなのだが、
それも理解出来ないのだろ?

導くつもりなら、本当に見てやらないといけないのは「根本的に方向性を間違ってないか」であって、
完全にずれていると分かっている初心者の質問にも優しく答えてあげることではないんだよ。
それは逆に迷惑だと俺は思うがな。本人の為にならない。

とはいえ、どういうレスをするかは本人の自由だし、お前らなりのポリシーがあればやればいい。
それで「ゆとり専用:ぼくにやさしいすれ」が成立するのならそれもありだろう。
問題は、お前らゆとりは何もしない/出来ない癖に文句ばかり言ってるわけでさ。
それが本当にいけない。

571 :デフォルトの名無しさん :2018/12/16(日) 10:01:21.28 ID:aG56rBWDa.net
>>569
シェルソートとかコムソートじゃねえかなそれは

572 :デフォルトの名無しさん :2018/12/16(日) 10:11:10.20 ID:lv3vm4Nk0.net
>>570
525のコードのやばさが一番わかってないのはおまえだ
registerだあ? 全然関係ねえよ、おまえ上っ面しか見てねえ証拠だ

573 :デフォルトの名無しさん :2018/12/16(日) 10:18:48.77 ID:+TcxNu6P0.net
>>572
それで、お前は525のコードに

・問題がない、のか、
・俺が指摘してないもっと大きな問題がある、のか

を言えない/意図的に言ってないだろ。
それがお前らの最悪なところだよ。
突っ込まれるのが怖くて言えないのだとは思うが、
だからゆとりは死ななければ直らない、と言ってるわけでさ。

で?どっちなんだ?
後者なら堂々とマウント取りに来いよ。

574 :デフォルトの名無しさん :2018/12/16(日) 11:10:40.38 ID:lv3vm4Nk0.net
>>573
ほらな、何がやばいのか他人に聞かなきゃわからないだろ
煽れば教えて貰えると思っている甘ったれ野郎

575 :デフォルトの名無しさん :2018/12/16(日) 11:39:09.26 ID:Q57qqdXG0.net
というワケで評価用のテストドライバをテキトーにさくっとオレが書いてやったぞ

 https://ideone.com/FwRQ0E

あとはテキトーにやりなさい
オレのエレガントなテストドライバ関数群を使えば
いろんな整列アルゴリズムをバカでもチョンでも簡単に評価できる

 @乱数列生成 :aho_malloc_random_data()
 A列複製   :aho_malloc_clone_data()
 B大小関係チェック:aho_check_seq1()
 C要素存在チェック:aho_check_seq2()

リファレンス評価用に標準ライブラリqsort()もあわせて評価した
100,000件辺りの秒数で件数増加に伴うゴミっぷりの程度も評価している

このスレの低学歴知恵遅れたちが騒いでるようなコードについての問題は一切ない
vs2017でも適切に期待通りに動作することは確認した

評価する前から予見できてたことだが
挿入ソートがゴミすぎて困ることだけは改めて分かる

それ以外一切問題ない

低学歴知恵遅れが騒ぐコトはいつも的外れなワケ

576 :デフォルトの名無しさん :2018/12/16(日) 11:49:03.98 ID:+TcxNu6P0.net
>>574
それはお前のことだよゆとり。
そしてだからこそお前らは全く進歩せず、今でも池沼ゆとりのままな訳だ。

お前らは本当にワンパターンで、コミュ障も酷い。
それをパターン暗記で誤魔化そうとしているわけだが、そりゃ無理だ。
実際、それはお前にとって何ももたらさないし、その積み重ねが今な訳でさ。

少なくとも俺は何ヶ所も訂正すべき点を具体的に指摘している。
それに対してマウントを取るつもりなら、もっと重大なことを具体的に指摘せねばならない。
それをお前は出来ないから、どこかで見たフレーズで誤魔化そうとしているわけでさ。

ゆとりはマジでこれが酷い。
非ゆとりは、基本的には、自分で調べて理論武装し、挑んでくる。
この過程で成長する。だから、その後で紛糾しても、少なくとも当人には利益があるし、
当然勘違いしてたらぶっ叩かれるので修正もされる。つまり確実に本人は前進する。
お前らはこの過程をやろうとしないから、全く成長しないし、実際、してない。
だから今のお前が具体的に何も言えないわけでさ。
それを認めるのならまだしも、それをコピペフレーズで誤魔化そうとしているのだから重傷だよ。

聞くは一時の恥、聞かぬは一生の恥、って奴だよ。

リアルやID制のサイトならまだしも、
匿名掲示板ですら『恥』と思って聞けないその虚栄心では、リアルでは全く聞けてないだろ。
だからお前らは相変わらず池沼な訳でさ。

577 :デフォルトの名無しさん :2018/12/16(日) 11:54:04.82 ID:Q57qqdXG0.net
コレで挿入ソートがゴミ同然なのが
一目瞭然で分かる


 sort(>>529のコード)
 https://i.imgur.com/I3aSs5K.png

 qsort
 https://i.imgur.com/gdiXaoz.png

つまりもともとこんなゴミみたいなシロモノを
時間かけて最適化するのはムダ

578 :デフォルトの名無しさん :2018/12/16(日) 11:54:37.67 ID:W0MJyJGm0.net
>>575
お前、口が悪くて思い込みは激しいがここまでちゃんとフォローしてやるってのは偉いな。
下手に外野から評論ばっかりしてる奴らよりよほどこのスレでは役に立ってるわ。

579 :デフォルトの名無しさん :2018/12/16(日) 12:07:06.08 ID:fTV/MXSFa.net
ソートの性能は机上でわかるから、最適化について教えてくれや。
あとスーパースカラーの効き方とか絡めて語ってくれると助かるわ。

580 :デフォルトの名無しさん :2018/12/16(日) 12:24:14.24 ID:+TcxNu6P0.net
>>579
× 教えてくれや
× 助かるわ
お前らゆとりが駄目なのはそこなんだよ。他力本願過ぎ。
そして指摘しても糞女と同様開き直るし、救いようがない。

お前がどういう風に分かってないかなんて誰も知らないのだから、
お前自身がいろいろ調べて、

○ 俺的にはこう思うんだが、どうかな?

とやらないと駄目なんだよ。
具体的に上手くやったのは497で、497-499-502-503とならざるを得ない。
そのサイトには「シグナルでは使う」と書いていたから、それを否定する俺の見解を質してきたわけだ。
このやりとりは少なくとも彼には利益があっただろう。
そしてこの積み重ねが差になっていく。

お前も含めて、粘着共は何一つ意見を言えない。言う知能すらないからだ。
その差がどうして生じたのか、いちいち教えてやってんだからよく考えろよマジで。

581 :デフォルトの名無しさん :2018/12/16(日) 12:25:29.13 ID:XNrlNwMM0.net
>>529
挿入ソートの場合は、挿入すべき場所に直接挿入すればよいので、
swapで何度も入れ替えないようにして、必要なところに直接挿入するのがいいかもしれません。
一瞬バブルソートのように見えて、挿入ソートってこんなのだっけ?と思いました。

最適化についてはこのコードだけではなんともいえませんが、
大まかでよいのであれば、全体をclock関数で時間計測したように
この関数の中で経過時間を計測してみるのもよいと思います。
効果のある場所が限定できると推測もしやすくなりますので。

582 :デフォルトの名無しさん :2018/12/16(日) 12:47:37.29 ID:GOuL0+IB0.net
>>575
おおお、私の挿入ソートの為にありがとうござます。お手数おかけしました。
ちゃんと内容を読めていないので、時間を取ってテストドライバのソースを読んでみたいと思います。

一旦ひとまとめすると、
一応私の書いたソートは動いていて、ちゃんと「挿入ソート」になっているという感じでしょうか。
やはり、>>579さんもおっしゃる通り、なぜ-O無しと-O1の最適化の有無で、ソート時間が大幅に変わるのかが気になります。
コンパイラって不思議ですね。

>>581さん、ありがとうございます。
挿入ソート内での時間計測もやってみたいと思います。
この挿入ソートを作る前にバブルソートも作ったのですが、
以下の様に書きました。
void bubble_sort(unsigned array[], unsigned length)
{
 register unsigned *l = &array[0];
 register unsigned *r = &array[length - 1];

 while (r > l) {
  while (l < r) {
   if (*l > *r) {
    swap(l, r);
   }
   l++;
  }
  l = &array[0];
  r--;
 }
}

これに関しては、最適化の有無で極端にソート時間が変わる、というのはありませんでした。
と言っても最適化有効の方が速くはなっていましたが。

583 :デフォルトの名無しさん :2018/12/16(日) 13:49:55.21 ID:1E8BbQgX0.net
乱数で特定のデータを作って、それがソートされてるっぽいから
アルゴリズムは正しい・・・って正しいのか?

584 :デフォルトの名無しさん :2018/12/16(日) 14:02:59.03 ID:YrIrW4/W0.net
ほぼ整列済みのにデータに対してだけ速い挿入ソートがランダムなデータにはクッソ弱いのなんて当たり前じゃん

585 :デフォルトの名無しさん :2018/12/16(日) 14:11:58.83 ID:Q57qqdXG0.net
https://ideone.com/g3SF36
https://i.imgur.com/DCnfjLD.png

忠実に書いてみて試してみたが
そういうほど効果はなかった

void insersion_sort2(aho_type_t* au_A, size_t n_A_length) {

  const aho_type_t const* cu_end_of_data = au_A + n_A_length;
  aho_type_t* au_j;

  for (aho_type_t* au_i = au_A + 1; au_i < cu_end_of_data; ++au_i) { // @
    aho_type_t u_x = *au_i; // A
    au_j = au_i - 1; // B
    for ( ; au_j >= au_A && *au_j >= u_x; --au_j) { // C
      *(au_j + 1) = *(au_j); // D
    } // E
    *(au_j + 1) = u_x; // F
  }
}

586 :デフォルトの名無しさん :2018/12/16(日) 14:12:26.99 ID:Q57qqdXG0.net
  /*
  @ i ← 1
  @ while i < length(A)
  A  x ← A[i]
  B  j ← i - 1
  C  while j >= 0 and A[j] > x
  D   A[j+1] ← A[j]
  C   j ← j - 1
  E  end while
  F  A[j+1] ← x
  @  i ← i + 1
  @ end while
  */

587 :デフォルトの名無しさん :2018/12/16(日) 14:19:33.35 ID:MKia07Gc0.net
またvoid君が暴れてたのかw

588 :デフォルトの名無しさん :2018/12/16(日) 14:21:40.72 ID:Q57qqdXG0.net
ちなみに乱数シードを変更して自動的に1000パターンのセルフチェックもやってみたが
>>529のコードの誤りは一度も検出されてない
種類を減らして重複を増やして試してみたりもしてる
コレでも>>529のコードの誤りは一度も検出されてない

 出力された要素に入力された要素が含まれること
 出力された要素の大小関係が適切であること

コレがひたすらプログラムでセルフチェックされてる

589 :デフォルトの名無しさん :2018/12/16(日) 14:23:51.69 ID:lv3vm4Nk0.net
>>576
さっきからマウントマウントって
盛りのついたサルみたいなのはおまえだけだ

registerと書いてあったら何がやばいのか
仮引数に[]と書いてあったら何がやばいのか
やばいといった張本人=おまえが説明することだ
こればかりはググれで逃げることはできないぜ

失言でマウント取り損なって真っ赤になってるサルめ

590 :デフォルトの名無しさん :2018/12/16(日) 17:18:28.63 ID:+TcxNu6P0.net
>>589
じつはぼく、やばさがわかりません、まで読んだ

591 :デフォルトの名無しさん :2018/12/16(日) 17:23:33.91 ID:lv3vm4Nk0.net
>>590
うん、おまえが言ったことがどうやばいのかは全然わかんねえ

525のコードに限らずとも
registerと書いたらどうやばいのか
仮引数に[]と書いたらどうやばいのか

早く言えよ脂ハゲ
それとも撤回か?

592 :デフォルトの名無しさん :2018/12/16(日) 17:56:55.46 ID:Q57qqdXG0.net
今回の最終コード(メモリ解放を忘れてた箇所を修正した)
 https://ideone.com/sylJTW

実行結果(挿入ソートの修正前後)
 ideone
  https://i.imgur.com/OkRrvlm.png
 オレのPC
  https://i.imgur.com/7oy0aQS.png

proc      elms   cts   cts/100000elms
sort(修正前) 524288 34.736 6.625366
sort(修正後) 524288 21.109 4.026222
qsort      524288 0.074  0.014114

結論:挿入ソートを使うのは徒労
    >>529のコード自体は一切問題ない
    そして、コードの誤りは一切なかった
     ⇒ つまり、この板には低学歴知恵遅れしかいないことがまた実証された
        つまり、低学歴知恵遅れがテキトーなことばっかりいってることがまた実証された

593 :デフォルトの名無しさん :2018/12/16(日) 18:41:12.85 ID:lv3vm4Nk0.net
撤回でいいんだな? おい脂ハゲ

594 :デフォルトの名無しさん :2018/12/16(日) 19:16:02.98 ID:+TcxNu6P0.net
>>591
>>593
>>574
まずはお前自身の論理に一貫性を持たせようか。
>>574なんて全く今のお前自身だろ。

ゆとりは本当にこれが酷い。
お前らが『失敗作』扱いされるのも当たり前。

595 :デフォルトの名無しさん :2018/12/16(日) 19:55:13.86 ID:MKia07Gc0.net
void君と半角君がいるw

596 :デフォルトの名無しさん :2018/12/16(日) 20:22:05.70 ID:+TcxNu6P0.net
>>595
お前も味方の>>593に何か教えてやったらどうだ?
お前も自分の意見すら表明出来ないヘタレだし、そもそも問題を理解出来ないから無理か?

まあこれがゆとりが『失敗作』扱いされる理由だ。
本当によく考えろ。

597 :デフォルトの名無しさん :2018/12/16(日) 21:11:35.54 ID:78j4CJdmd.net
んで引数voidの件にはダンマリかよ
Cの基礎も知らずによく上から目線でゆとりをバカに出来るよな
上司や部下から陰で笑われてるだろお前

598 :デフォルトの名無しさん :2018/12/16(日) 21:47:08.64 ID:+TcxNu6P0.net
>>597
このスレ&過去スレ読んでそれ言ってるのか?
なら重傷だな

ゆとりって、本当に連呼リアンと知能もモラルも同程度だな
どうもお前らは連呼すれば既成事実が出来上がると本気で思っているようだが、そんなことはないから

599 :デフォルトの名無しさん :2018/12/16(日) 21:55:54.72 ID:GOuL0+IB0.net
>>592
本当に検証ありがとうございました。
今テストドライバのソースを眺め始めたところで、まだ読み終わっていないのですが、
10行目のマクロが do {} while (0) で囲ってあるのには何か理由や慣例のようなものがあるのでしょうか。
合わせて教えて頂けると嬉しいです。

600 :デフォルトの名無しさん :2018/12/16(日) 22:00:32.41 ID:MKia07Gc0.net
void君絶好調だなw
ゆとりを馬鹿にしているみたいだけどまだ若い分潰しが効く
それに引き換えvoid君は老害の一言に尽きる
引数voidって何だ?と書き込んだ時点でお前のレスの信憑性はお前の頭と一緒で限りなく薄いんだよ禿w

601 :デフォルトの名無しさん :2018/12/16(日) 22:04:09.68 ID:hxwpEJ+zM.net
引数void君の日曜日

602 :デフォルトの名無しさん :2018/12/16(日) 22:14:09.84 ID:+TcxNu6P0.net
>>600
ゆとりは知恵遅れすぎて整合性という概念がない。

王道と王道と(ryだ。
俺を信用しないのは自由だが、世界中の誰もそれをしないのには理由がある。
ゆとりはこのことすら認識出来ない。

だからゆとりは『失敗作』なんだよ。
なんつーか、普通に考えれば分かるだろ、が通じない。
そして無駄に議論が紛糾する。
お前らの足もお前らが引っ張ってるんだと思うぜ。

603 :デフォルトの名無しさん :2018/12/16(日) 22:17:44.41 ID:A7Qua2Dpa.net
>>599
1文での表現で、かつ、セミコロンない場合のエラーを実現するためだね。

604 : :2018/12/16(日) 22:39:13.74 ID:IjCemHtZ0.net
>>600
>10行目のマクロが do {} while (0) で囲ってあるのには何か理由や慣例のようなものがあるのでしょうか。
もう覚えなくともよい古代の小技でしかありません、気にしたら負け

605 :デフォルトの名無しさん :2018/12/16(日) 22:40:10.46 ID:GOuL0+IB0.net
なるほど、
if (a > b)
 swap(a, b);
などを置き換えられたときにエラーが発生しなくなるのですね。
勉強になりました。ありがとうございます。

606 :デフォルトの名無しさん :2018/12/16(日) 22:41:05.38 ID:GOuL0+IB0.net
×などを
〇などが

607 :デフォルトの名無しさん :2018/12/17(月) 03:25:30.31 ID:SLvNUvmN0.net
>>600
引数に void を知らないのはかなりの初心者だと思うよ。

まあ、大昔のC言語にはなかったんだけど、その大昔からずっと使っているなら引数に void を入れておけば
引数なしを表すという規格になって、そしてあらゆる標準的なヘッダファイルの中で使われ始めて
man getchar なんてやって man ページ出すと int getchar(void); なんてのが出て来て、試しに引数に何か
セットして呼ぶように書いたらエラーが出たりして、ああこりゃ便利になったなあなんてことを体験したりして、
まず忘れる事はないだろうから。

608 :デフォルトの名無しさん :2018/12/17(月) 06:30:07.34 ID:QzDaCAv50.net
voidを知らないのは、K&R Cのまま更新が止まったボケ老人だ
若かった頃から不勉強の傾向が強かったやつね

609 :デフォルトの名無しさん :2018/12/17(月) 09:37:10.86 ID:nW56DxVi0.net
>>501
それは別のところで確保すべき話ではないの?

610 :デフォルトの名無しさん :2018/12/17(月) 12:43:01.45 ID:FuitD2SD0.net
VOIDと書いてスタークルーザーを思い出す。

611 :デフォルトの名無しさん :2018/12/17(月) 12:47:32.91 ID:I/0A0iGaM.net
今Cやってる人はなに作ってるんですか?

612 :デフォルトの名無しさん :2018/12/17(月) 16:55:11.83 ID:CFStKxet0.net
Javaのスキルが低すぎて干された人物でしょう
すると引数voidを初めて見たというセリフの整合性がつく
C言語ならマウンティングできると思ったんでしょ

613 :デフォルトの名無しさん :2018/12/17(月) 17:08:16.23 ID:epqh6mY00.net
オレは単なるジョークだと思ってたんだが、本気だったとは

614 : :2018/12/17(月) 20:55:39.65 ID:TMWWsAye0.net
>>608
K&R2 には、すでにして void は存在しましたけれども、K&R1 にはなかったのでしょうか?
個人的には void よりも void * の方が好きです、今でも何にでも使える最強アイテムだと思ってバンバン使っています…

615 :デフォルトの名無しさん :2018/12/17(月) 21:11:40.45 ID:WCs/11MM0.net
void*は一旦char*なりにキャストしてやらないと演算できないのが惜しい。

616 :デフォルトの名無しさん :2018/12/17(月) 21:18:03.63 ID:ddAMIqrq0.net
演算だって???

617 :デフォルトの名無しさん :2018/12/17(月) 21:26:23.72 ID:WCs/11MM0.net

ポインタ演算知らない人?

618 :デフォルトの名無しさん :2018/12/17(月) 21:51:10.09 ID:epqh6mY00.net
分かるけど、省略はしない方が良い

619 :デフォルトの名無しさん :2018/12/17(月) 21:57:32.13 ID:tIzZYkqxa.net
mallocの戻り値がchar *みたいな

620 :デフォルトの名無しさん :2018/12/17(月) 21:58:37.52 ID:4lEE+Jgc0.net
惜しいもくそもない
キャストで演算結果がかわるから当たり前

↓もしかしてpとqは同じ結果になるとか思ってんの
void* p_aho;
void* p = (char*)aho+1;
void* q = (short*)aho+1;


まずポインタがなんなのか分かってない
頭わるう

621 :デフォルトの名無しさん :2018/12/17(月) 22:06:29.28 ID:4lEE+Jgc0.net
ジェネリックポインターがどういうもんかすら分かってない低学歴知恵遅れが
低学歴知恵遅れのvoid君をバカにしてんのか

コレは滑稽

622 :デフォルトの名無しさん :2018/12/17(月) 22:08:35.85 ID:epqh6mY00.net
void君かな?

623 :デフォルトの名無しさん :2018/12/17(月) 22:09:18.40 ID:4lEE+Jgc0.net
顔真っ赤にしてるし

624 :デフォルトの名無しさん :2018/12/17(月) 22:10:03.38 ID:4lEE+Jgc0.net
省略可能()だって
コレは面白いことをおっしゃる

625 :デフォルトの名無しさん :2018/12/17(月) 22:40:03.34 ID:kePHxvF20.net
初心者です。
voidが存在しない時代のC言語では、関数の戻り値などはどのように記述していたのでしょうか。
良かったら教えてください。

626 :デフォルトの名無しさん :2018/12/17(月) 22:44:15.58 ID:P/jTcJUAa.net
最初は戻り値はintのみのはず。

627 :デフォルトの名無しさん :2018/12/17(月) 22:45:59.53 ID:5htGqSBWH.net
何も書かないとint

628 :デフォルトの名無しさん :2018/12/17(月) 22:46:17.04 ID:YSKVu3hZM.net
>>611
Linuxのデバイスドライバ

629 :デフォルトの名無しさん :2018/12/17(月) 22:53:04.98 ID:kePHxvF20.net
>>626,627
なるほど何も書かずにいきなり関数名とかだったんですね。
そうすると自然に戻り値はint型として扱われる感じなんですね。
ありがとうございます。

630 :デフォルトの名無しさん :2018/12/17(月) 23:10:51.39 ID:m222wRI70.net
>>607-608
結局連呼しか出来ないのか。
そしてそれがお前自身初心者で老害な証明であることにも気づけないんだろ。
お前ら本当に終わってる。


が、まあ、それはさておき、他人を追い落としたいのなら、
ネガティブキャンペーンではなく、ポジティブな競争を仕掛けろ。
つまり、俺よりもっと的確なアドバイスが出来れば、当然俺より上だというわけだ。
半角君がいいとは思わないが、少なくとも彼はこれをやってるだけマシだ。

東亜板の連中なんて馬鹿が大半で、本質が見えてない。
だから非韓三原則や法則

韓国人は、助けない、教えない、関わらない
韓国人と関わると不幸になる

なんてのを「韓国人」属性に結びつけているが、実際はそうじゃない。
(理由は他にもあるが、一つには)連中はネガティブキャンペーン『しか』やらないから、
結果的にそれに巻き込まれ、不幸になるだけだ。
そしてそれは今のお前ら池沼ゆとりにも当てはまる。
ゆとりなんて叩きたがっている奴はいくらでもいる。
馬鹿共がそれに気づいたら、お前らもっと終わるぞ。
その癖はマジでさっさと直せ。

ウンコを投げ合っていたとしても、それがポジティブ方向への競争なら、
だんだんマシにはなるんだよ。
お前らもちゃんとそれに参加しろ。

631 :デフォルトの名無しさん :2018/12/17(月) 23:38:18.98 ID:4lEE+Jgc0.net
void君の場合、キミラみたいにとてつもなく頭悪いワケでない
void君は、頭おかしい

頭おかしいから無罪
責任能力がない

632 : :2018/12/17(月) 23:58:26.51 ID:TMWWsAye0.net
>>631
私とおんなじ刑法39条適用組ですね!

633 :デフォルトの名無しさん :2018/12/18(火) 00:26:04.62 ID:qkRcBu1Pa.net
みんな仲間さ

634 :デフォルトの名無しさん :2018/12/18(火) 00:28:28.60 ID:RutBA2Qm0.net
>>630
そもそもウンコだって分かってるのに投げるなよ

635 :デフォルトの名無しさん :2018/12/18(火) 00:54:59.12 ID:GicIxRpF0.net
>>634
> ワッチョイ aaf9-fk3u
死ね

つーか、お前みたいな奴しかいないからゆとりは駄目なんだよ。
文句言う前に何でもいいから知ってる範囲で何か言え。
そしてそれが有効打かどうかを競うんだよ。
それすらしない奴には文句を言う権利すらないんだよ。

お前らは分かってないんだろうが、マジな話、
「ゆとり★ちゃんねる(仮称)」が未だに存在しないのもおかしな話なんだよ。
お前らゆとりはゆとり内で確実に内ゲバしてる。(自覚症状はないのだと思うが)
原因はお前らのその態度だと思うぞ。足を引っ張り合ってる。

636 :デフォルトの名無しさん :2018/12/18(火) 01:29:36.53 ID:HuP+yDtL0.net
おだいじに

637 :デフォルトの名無しさん :2018/12/18(火) 01:42:38.54 ID:AChTjxH60.net
void* を大きさ1として演算できちゃう gcc 拡張がキモイ

638 :デフォルトの名無しさん :2018/12/18(火) 06:36:55.66 ID:xgHv4hiI0.net
> f34f-rp3U

効いてる効いてるw

639 :デフォルトの名無しさん :2018/12/18(火) 09:31:46.74 ID:92SsvGE7a.net
>>637
俺も最初知った時は驚いた。

640 :デフォルトの名無しさん :2018/12/18(火) 09:36:54.35 ID:6efkgyQbM.net
>>630
的確なアドバイスとかどこの口が言ってんだよwww
voidもunsignedも知らないレベルなのに初心者をとっちめて追い返してるだけじゃん。ホント屑

641 :デフォルトの名無しさん :2018/12/18(火) 09:40:18.56 ID:xgHv4hiI0.net
registerと書いたら何がまずいのか説明マダー?(tntn

642 :デフォルトの名無しさん :2018/12/18(火) 17:11:09.05 ID:272sPWG0H.net
#include<stdio.h>
#define N 5

int sum(int *p){

int wa=*p,i,a[N],k;

for(i=1;i<N;++i){
wa=wa+*(p+i);
}
return(wa);
}

main(){
int a[N];
int i;

for(i=0;i<N;++i){
scanf("%d",&a[i]);
}
printf("%d\n",sum(a));
}

643 :デフォルトの名無しさん :2018/12/18(火) 17:11:45.38 ID:272sPWG0H.net
#include<stdio.h>
#define N 5

int sum(int p[]){

int wa=p[0],i,a[N],k;

for(i=1;i<N;++i){
wa=wa+p[i];
}
return(wa);
}

main(){
int a[N];
int i;

for(i=0;i<N;++i){
scanf("%d",&a[i]);
}
printf("%d\n",sum(a));
}

644 :デフォルトの名無しさん :2018/12/18(火) 17:12:09.11 ID:272sPWG0H.net
#include<stdio.h>
#define N 5
#include<math.h>

float vecNorm(int *p){

int wa=*p**p,i;
float ans=0;
wa=0;

for(i=1;i<N;++i){
wa=wa+*(p+i)**(p+i);
}

ans=sqrt(wa);
return(ans);

}


main(){

int a[N];
int i;

printf("enter vec:");
for(i=0;i<N;++i){
scanf("%d",&a[i]);
}
printf("norm=%f\n",vecNorm(a));
}

645 :デフォルトの名無しさん :2018/12/20(木) 01:12:02.01 ID:PGlfyh8s0.net
PARI/GPでの多項式の割り算について
例えば Mod(x^5,x^2-x-1) と入力すると
Mod(5*x+3,x^2-x-1)
と出力されます。
この剰余類 5*x+3 を多項式として次に使いたいのですが
一度コピペして貼りつける以外の方法はありますか?

646 :デフォルトの名無しさん :2018/12/20(木) 14:46:32.32 ID:dwI07DhgH.net
うちの大学の線形リストのノードの削除方法が異端なんだけど、本当にあってるのか教えて
コードはコレ
http://www.cc.kyoto-su.ac.jp/~yamada/ap/list.html#delete
次ノードの繋ぎ変えしてないしワケわからん

647 :デフォルトの名無しさん :2018/12/20(木) 14:49:53.65 ID:dwI07DhgH.net
if文の中でやってるところが意味不明で

648 :デフォルトの名無しさん :2018/12/20(木) 15:23:58.12 ID:HJafH88zx.net
ヒント
ndPtrPtrは次のノードを示すアドレスが格納されている変数のアドレス、言い換えるとnextメンバのアドレス。

649 :デフォルトの名無しさん :2018/12/20(木) 15:23:59.11 ID:pLjZUA4qM.net
あってる。異端でもなんでもない

650 :デフォルトの名無しさん :2018/12/20(木) 15:33:59.42 ID:mvSJol6Sa.net
>>646
それ以外の方法あるか?
まあ変数の使い方はいろいろあると思うけど

651 :デフォルトの名無しさん :2018/12/20(木) 15:56:04.93 ID:7Qt44qX50.net
>free(*ndPtrPtr);
これを
free(ndPtrPtr);
と誤読してちょっと頭抱えた。

652 :デフォルトの名無しさん :2018/12/20(木) 16:20:36.96 ID:HdfUNn3W0.net
int nodeDelete(node_t **ndPtrPtr, int n) 内の
if (*ndPtrPtr != NULL) ...
が分からんとすれば、その前のwhileブロックから抜ける条件・
抜けたときの状態を把握できてないんだと思うぞ。

whileブロックの動作を再考する方が早いかも知れん。
n == 0 の場合
0 < n, n < リストのノード数 の場合
n >= リストのノード数 の場合

653 :デフォルトの名無しさん :2018/12/20(木) 16:27:02.34 ID:ebMind6hd.net
理解したわ
ポインタがなに指してるか理解不足だったわ

654 :デフォルトの名無しさん :2018/12/20(木) 16:50:21.12 ID:+Bqr0ubdM.net
自分の理解不足を棚に上げて人様の正統なコードを異端呼ばわりしたことについて一言。

655 :デフォルトの名無しさん :2018/12/20(木) 18:53:47.26 ID:As7dWUw1M.net
まあ初心者にはありがちだし正直に理解不足認めてるんだからくだらんことで話引っ張るなよ

656 :デフォルトの名無しさん :2018/12/20(木) 20:34:36.71 ID:RsFs7LFZM.net
>>646
異端じゃないがセンスはない
線形リストなんてlist_headが決定版なんだからそれだけ覚えておけばいい

657 :デフォルトの名無しさん :2018/12/20(木) 23:55:08.25 ID:y9sbY0Ic0.net
>>646
異端っちゃ異端。普通は以下。
typedef struct nodetag {
struct nodetag *next; // 走査を速める為に先頭、と言うか本質部分は前側に
data_t data; // dataが最後、と言うかオマケ類は全部最後、そうじゃないと継承出来ないし
};
int nodeDelete(node_t **ndPtrPtr, node_t *ndPtr); // n番目を指定とかありえん、リストはそういう使い方はしない
int nodeDelete(node_t **ndPtrPtr, data_t data); // またはこれ

コンテナ類なんてOOPがドフィットするんだから、OOP的に書かないと駄目なんだよ。
こいつはそれが出来ていない。
リストを使ったこと無い奴がとりあえず書いてみました、というコードであり、良いコードではない。


池沼ゆとりが多いようなので明記しておくが、
お前らは『老害』に『年齢条項』を入れてゆとり≒20代は該当しない、ということにしたがるが、それは間違いだ。
老害の定義は、公平には、

・その問題に、より効率的に対処できる新しい方法があるにも関わらず、
古い方法しか使わない/使えない馬鹿

の事だ。
OOPなんて30年前にC++により再定義され、大変素晴らしかったからほぼ全部の言語に採用されてる。
今時OOPを理解してないのも、またコンテナ等OOPに最適なものにOOPを適用しないのも老害だ。
そしてこの老害コードで学ぶ>>646もまた、最初から「老害」となる。
(642が悪いわけではないが、教科書のコードに問題があり、「老害」からのスタートになる)

分かるか?
老害の十分条件には「知っているけど使わない」のみならず、単に「知らない」も入るんだよ。
このコードに問題を検出出来ないのなら、その時点で老害だ。
それはOOPを知らない、ということだから。
重ねて言うが、老害に年齢は関係ない。実際、池沼ゆとりの大半が既に老害になってるだろ。

658 :デフォルトの名無しさん :2018/12/21(金) 00:27:52.80 ID:pse73zvs0.net
「そうじゃないと継承できないし」
見事に手段が目的化してるな。
OOPがクソ宗教ってはっきり分かんだね。

659 :デフォルトの名無しさん :2018/12/21(金) 00:46:55.39 ID:e7/cJrp90.net
>>658
絵に描いたような老害乙

Javaみたいに全部無理矢理OOPは問題があるとして、
C++の範囲で普通に使う分には問題ないし、今更OOPに文句言うのも老害だろ。
第一世代はCが制覇したが、第二世代はOOPが制覇してる。
その理由を考えろ。

660 :デフォルトの名無しさん :2018/12/21(金) 01:00:18.07 ID:hN5N0o1Ma.net
リストは順序あるでしょ。

661 :デフォルトの名無しさん :2018/12/21(金) 01:08:54.29 ID:j37Ohb1y0.net
普通にほとんどのOSはCで書かれてる
いまでもCが天下

662 :デフォルトの名無しさん :2018/12/21(金) 01:11:08.64 ID:j37Ohb1y0.net
OSのアプリケーションインターフェースは
ほぼすべてC

Cのインターフェースをそのまま使えないウンコ言語なんか
使い物にならない

663 :デフォルトの名無しさん :2018/12/21(金) 01:27:10.71 ID:+b5aVjIs0.net
>>657
痛いなー。もういろいろ悔しくて仕方ないってことは伝わったよ

664 :デフォルトの名無しさん :2018/12/21(金) 01:52:35.34 ID:e7/cJrp90.net
>>660
お前もリスト使った事無いのに、何故文句だけ言うの?
それがゆとりが駄目なところだ。死ね。

ていうかマジな話、ゆとりが未だにゆとりなのはこれが原因だと思うぜ。
お前ら自身がおかしな方向に誘導しまくってる結果、
ゆとり『だけ』のコミュニティでは収拾がつかず、コミュニティを保てない。
だからお前らは年齢層が高くて居心地が悪いと分かり切っているここ2chに出張ってくるしかないわけでさ。
これは俺らにとっても迷惑だし、お前らにとっても不幸な話だぞ。

インタフェース自体は、実際使えば「これは間違いだ」とすぐ分かる。
n番目、でリストを管理するなんてあり得ないから。
ただ、使ったことが無くとも、C++等参考にすれば、正しい方向には進めるだろ。
それもせず、とりあえず文句を言うその癖はマジで早く直せ。
お前ら自身がそれで被害を被っている。(自覚出来ていないようだが)

https://ja.cppreference.com/w/cpp/container/list/erase
https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.linkedlist-1.remove?view=netframework-4.7.2

C++は「イテレータ()」とかアホなことやってるから余計に分かりにくくなってるが、この場合は「ポインタ」だと思っていい。
(というか、OOPのイテレータは糞だ。これは認める。あれはおそらくJavaが元凶だが)
.NETはまんまだが、Node<T>は参照渡しになるからこれも「ポインタ」だと思っていい。

ここら辺も調べればすぐ分かる話でさ、この意味ではその京産大の先公は「老害」だと断定出来る。
過去スレで東工大のリストが出てたろ。あっち見た方がいいと思うぜ。


>>663
お前がな。
だだこねれば受け入れられるのはゆとりコミュニティ内だけの話であって、マジで迷惑だから止めろ。
上記の通り、そのコードは一般的に見て「かなり間違った」事をやってる。
それを見分ける能力もないのに文句だけ言うなゴミゆとり。

665 :デフォルトの名無しさん :2018/12/21(金) 02:19:18.24 ID:lfxw1L5ka.net
リストは順序あるよ

666 :デフォルトの名無しさん :2018/12/21(金) 02:30:30.08 ID:UIMsFVlQ0.net
あるある。

667 :デフォルトの名無しさん :2018/12/21(金) 05:32:19.37 ID:lsetsG4i0.net
C言語で継承とか意識しなくちゃいけないんですか?

668 :デフォルトの名無しさん :2018/12/21(金) 05:50:21.94 ID:FGbnqlsP0.net
>>657
1つの方法が絶対と思い込んでるおまえこそ老害の典型だ
頭固すぎ

669 :デフォルトの名無しさん :2018/12/21(金) 05:51:36.03 ID:FGbnqlsP0.net
>>667
そもそもだよな

670 :デフォルトの名無しさん :2018/12/21(金) 06:29:14.35 ID:PkTs+Gix0.net
最近継承とか覚えたから誰かに話したくてしょうがないんだろ w
まあ気持ちはわかるが

671 :デフォルトの名無しさん :2018/12/21(金) 08:37:47.92 ID:UIMsFVlQ0.net
そう言えばそうじゃないと継承できないって、もしやC++特有の決まりなのかな?
クラスが作れる言語でクラス変数の宣言の順序が関係する言語を知らんのだけど。

672 :デフォルトの名無しさん :2018/12/21(金) 08:51:45.23 ID:9Mj5/4cfM.net
継承って、OOP三本柱、継承・多態・カプセル化のうち最も早く信用を失った要素じゃん。
今じゃ当のOOP界隈自身が継承より委譲とか言っちゃってる。

673 :デフォルトの名無しさん :2018/12/21(金) 09:43:00.98 ID:C5YB7rUV0.net
多態こそがOOPの本質だと思っているので
それ以外はオマケ程度にしか見てないです

674 :デフォルトの名無しさん :2018/12/21(金) 12:03:47.45 ID:FGbnqlsP0.net
スレチ
C++スレでやれ

675 :デフォルトの名無しさん :2018/12/21(金) 12:08:33.02 ID:coLyQ5Vra.net
メッセージングです

676 :デフォルトの名無しさん :2018/12/21(金) 12:14:41.72 ID:PRxQR0TH0.net
664 名前:デフォルトの名無しさん (ワッチョイ 236e-q1e7)[sage] 投稿日:2018/12/21(金) 05:50:21.94 ID:FGbnqlsP0 [1/3]
>>657
1つの方法が絶対と思い込んでるおまえこそ老害の典型だ
頭固すぎ

665 名前:デフォルトの名無しさん (ワッチョイ 236e-q1e7)[sage] 投稿日:2018/12/21(金) 05:51:36.03 ID:FGbnqlsP0 [2/3]
>>667
そもそもだよな

670 名前:デフォルトの名無しさん (ワッチョイ 236e-q1e7)[sage] 投稿日:2018/12/21(金) 12:03:47.45 ID:FGbnqlsP0 [3/3]
スレチ
C++スレでやれ

677 :デフォルトの名無しさん :2018/12/21(金) 12:30:50.77 ID:choQhZIjM.net
>>671
> そう言えばそうじゃないと継承できないって、もしやC++特有の決まりなのかな?
そんなわけあるか w
そもそも>>657の奴を継承って言うこと自体がちょっとおかしい

678 :デフォルトの名無しさん :2018/12/21(金) 12:39:24.63 ID:FGbnqlsP0.net
>>676
何か用か?

679 :デフォルトの名無しさん :2018/12/21(金) 12:52:04.69 ID:lfxw1L5ka.net
継承を頑張ったプログラムって、疎結合・高凝集からどんどん外れていく運命にあるんだよね。

680 :デフォルトの名無しさん :2018/12/21(金) 12:56:17.53 ID:choQhZIjM.net
そりゃ継承ごときで頑張らないといけない>>679ならそうなるだろうよ w

681 :デフォルトの名無しさん :2018/12/21(金) 12:56:53.99 ID:eqYC63Aux.net
継承はそのうち親子関係に矛盾が生じ、親クラスのメソッドやブロパティを隠したくなる。

682 :デフォルトの名無しさん :2018/12/21(金) 13:48:48.03 ID:FGbnqlsP0.net
下手な継承休むに似たりというだけ
継承そのものの是非とは無関係

その昔、多重継承をまず否定ありきで喚いていた連中とお前ら同じだ

683 :デフォルトの名無しさん :2018/12/21(金) 13:52:55.77 ID:Vi7rbNdd0.net
C++亡者はなんでCのスレで延々と雑談するんだろう

684 :デフォルトの名無しさん :2018/12/21(金) 14:11:28.71 ID:PiZ4lBZmM.net
継承より委譲。継承は間違いだったby OOPコミュニティ一同
https://refactoring.guru/replace-inheritance-with-delegation

685 :デフォルトの名無しさん :2018/12/21(金) 15:27:16.62 ID:mfb3XB1ua.net
>>677
そうだよな。普通のオブジェクト指向言語は順序に関わらず継承できるよな。
とすると普通でない言語での話かまたは彼が何かを誤解しているということかな。

686 :デフォルトの名無しさん :2018/12/21(金) 15:50:13.39 ID:lfxw1L5ka.net
継承とはキャストと見つけたり

687 :デフォルトの名無しさん :2018/12/21(金) 16:19:17.16 ID:FGbnqlsP0.net
>>684
継承より委譲を使うべき事例を挙げているにすぎない

688 :デフォルトの名無しさん :2018/12/21(金) 16:31:46.47 ID:PiZ4lBZmM.net
継承より委譲を使うべきかは「あとで」発覚する。
犬クラスや猫クラスを哺乳類クラスから継承させて喜んでいるところに、問題(カモノハシ)は突然やって来るのだ。
そうなってからあわてるよりも、常に委譲を使い、継承のことなど忘れさるべきだ。

689 :デフォルトの名無しさん :2018/12/21(金) 17:02:28.85 ID:vKEYTKwK0.net
そういやgolangは継承捨てちゃったんだよな

690 :デフォルトの名無しさん :2018/12/21(金) 17:07:16.46 ID:FGbnqlsP0.net
>>688
1行目と2行目以後、言ってることが矛盾してるぞ
「あとで」か「常に」か、どっちなんだ

691 :デフォルトの名無しさん :2018/12/21(金) 17:16:20.54 ID:QpLg2mIsM.net
>>690
横からだけど、全く矛盾してないぞ?
どこが矛盾してるんだ?

692 :デフォルトの名無しさん :2018/12/21(金) 17:31:07.39 ID:mfb3XB1ua.net
うん。矛盾してない。
日本語よくわからない人かな?

693 :デフォルトの名無しさん :2018/12/21(金) 20:19:10.57 ID:lsetsG4i0.net
初心者です。

カモノハシは哺乳類ですが、哺乳類クラスを継承することでどのような問題が発生するのでしょうか?
よろしければ教えてください。

694 :デフォルトの名無しさん :2018/12/21(金) 20:44:04.05 ID:QZspeJhP0.net
妊娠メソッドが規約に違反してしまいます。

695 :デフォルトの名無しさん :2018/12/21(金) 20:45:30.64 ID:choQhZIjM.net
>>685
だから継承でもなんでもなくて構造体の最後の要素の長さを可変長にしてるだけ
99.9%問題ないけど厳密には規格違反だったと思う

696 :デフォルトの名無しさん :2018/12/21(金) 20:47:05.89 ID:b6qAhl4Oa.net
>>693
いつ哺乳類と分類できたんだという話だよな。
その分類もいろんな切り口があるわけだし。

697 :デフォルトの名無しさん :2018/12/21(金) 20:57:17.23 ID:lsetsG4i0.net
なるほど、カモノハシは胎生ではなくて産卵するので問題になりうる、ということですね。
ありがとうございます。

698 :デフォルトの名無しさん :2018/12/21(金) 21:37:11.59 ID:81A29Thc0.net
オライリーのアルゴリズムクイックリファレンス持ってる人居ませんか?
アルゴリズムを勉強したいんですけど、結構ソースコードがあって分からないです

699 :デフォルトの名無しさん :2018/12/21(金) 22:40:36.57 ID:HoIQMu/H0.net
あれ肝心なところは「ここでC++のテンプレートを使って・・」とか
「○○ライブラリを使って・・」となってて、結局よく分からんかった。

700 :デフォルトの名無しさん :2018/12/21(金) 22:46:23.26 ID:e7/cJrp90.net
本当にゆとりはどうしようもないな。

初心者は絶対的な知識量が足りてないから、やってることは結果的に「老害」と一致する。
C言語なんて20年ほぼ変更無し=ここ20年の進歩を「文法的には」取り込めてないのだから、
文法から入るお前らみたいな奴は必ず「老害」からのスタートになってしまうし、実際そうなってるだろ。

この点、やはり初心者は新しい言語からやるべきなのさ。
そうすれば、少なくともお前らのような「古くて非効率な手法しか使えない馬鹿=『老害』」にはならずに、
「新しくて効率的な方法しか使えない新人」になるが、こっちの方がずいぶんマシだ。
とはいえ、新しすぎて評価が固まってない言語も危険ではあるが。(具体的にはGoがゴミ)

「継承」に粘着している馬鹿は継承の実装を考えてみるといい。
C++は当初はトランスパイラ=C++文法をC言語に変換してCコンパイラを通すもの、だったと聞く。
同様に、C++でのOOPをC言語で実装する際、どう変換するか考えてみるといい。
正解は、他言語のOOPの実装をググれば得られるだろう。

継承については色々議論があるが、今回のようにコンテナの場合は、
ListBaseクラスを継承しテンプレートでデータ構造に幅を持たせるのがとりあえずの正解だよ。
おそらくstd::list<T>もそうなってると思うぜ。(ただし速度重視で全テンプレート展開もあり得るが)
そしてC言語においても同等のオブジェクトコードが得られるソースコードを記述しろ、という話であってさ。
(それ以前にコンテナが欲しければ素直にC++使った方がいいと思うが)

というか、C++は改良版Cなんだから、C++を食わず嫌いするのも典型的な老害なんだよ。
当然だがC言語が抱えていた問題点は修正されてる。
コンテナ等も完全に整備されてる。
スマポ()とかやってるC++erは馬鹿だから無視でいいが、
Cの問題点に直面してるのにC++を試してない奴は定義通りの老害だよ。
Cが出現した頃とはずいぶん状況が変わっているわけでさ。
https://cpplover.blogspot.com/2016/05/mitsicp.html

701 :デフォルトの名無しさん :2018/12/21(金) 23:15:48.04 ID:pse73zvs0.net
だったらC++スレ行けば?
PythonやJSのスレでRubyのウンコード貼り付けて宣伝する糞キチガイと同じ臭いすんだわお前。クサい。

702 :デフォルトの名無しさん :2018/12/21(金) 23:43:53.69 ID:e7/cJrp90.net
>>701
文句言う前にOOPを理解しろよ。お前は完全に「老害」だぞ。
そしてCでもOOPに準じてコードを書け、という話であってさ。

ゆとりは幼稚すぎる。
もうちょっとましな反論は出来ないのか?

○○と同じ臭いがする、というのもまたお前らのパターンのようだが、
結局の所、当たってる奴がいないだろ。
それは、ゆとりの脳は1bitの容量しかなく、
「ぼくのすきなひと」「ぼくのきらいなひと」しか解像度がないからだ。
そんなことやり続けてるからお前らは幼稚園児のままなんだよ。

が、マジな話、C言語でもOOPを理解してコーディングするのとデタラメにやるのではずいぶん違うから、
OOPはマジで理解しとけ。
むしろC言語(というか各言語)は方言でしかなく、
プログラミングパラダイムとしてのOOPの方がつぶしが利くし、有用だ。

703 :デフォルトの名無しさん :2018/12/21(金) 23:46:17.30 ID:j37Ohb1y0.net
https://ideone.com/WQ3pQP

animal
┣platypus
┗bird━penguin

普通にCでも継承はできる
低学歴知恵遅れだとCではできない

もともと継承なんか使ってもいいことなんかないからな
低学歴知恵遅れほど嬉しがって継承使う

704 :デフォルトの名無しさん :2018/12/21(金) 23:58:01.00 ID:j37Ohb1y0.net
何度もいうが
オレレベルぐらいでないとオブジェクト指向はムリ

何度もいうが
低学歴知恵遅れにオブジェクト指向は
キチガイに刃物

何度もいうが
この板にいるような低学歴知恵遅れに
オブジェクト指向はムリ

705 :デフォルトの名無しさん :2018/12/22(土) 00:14:40.06 ID:ruBkeT7Z0.net
>>703
毎回お前のその無駄な情熱はどこから来るのか謎だが。

一応言っておくと、parentを持つその方法は「包含」であって、「継承」ではないぞ。
この際大した問題ではないが。

706 :デフォルトの名無しさん :2018/12/22(土) 00:18:09.34 ID:b6CiPLFa0.net
低学歴知恵遅れは
vtableも知らないのか

レスから頭の悪さがにじみ出てtる

707 :デフォルトの名無しさん :2018/12/22(土) 00:20:00.60 ID:b6CiPLFa0.net
仮想関数でないメンバ関数は
はっきりいって普通のCの関数と同じだからな

まず低学歴知恵遅れは基本的なことがわかってない

こんなのがC++つかうとかムリ

708 :デフォルトの名無しさん :2018/12/22(土) 00:22:20.24 ID:ruBkeT7Z0.net
あとついでに言っておくと、リストについては、

・おそらくポインタに不慣れだから無駄に引っかかってるだけ
・どうせリストなんて使わない
 (=事実としてその京産大の先生は使ったことがないから間抜けなインタフェースになってる)
・そもそもコンテナが必要ならC言語以外では普通に標準orフレームワークで整備されてる
 (=ただ単に再開発してるだけ)

だから、引っかかった場合はとりあえず無視でいいと思うが。

709 :デフォルトの名無しさん :2018/12/22(土) 00:23:04.93 ID:b6CiPLFa0.net
もうな低学歴知恵遅れはレスすればするほど
低学歴知恵遅れなのを自白することになるからな

レスしないほうがいい

710 :デフォルトの名無しさん :2018/12/22(土) 00:34:25.01 ID:ruBkeT7Z0.net
>>706
vtableはフラットに構成されてるものなんだよ。
お前のは階層構成になってるし、実際、直接呼び出せてないだろ。(無駄にオーバーヘッドがある)
それは「継承」ではない。

まあ正直そこら辺は割とどうでもいいのも確かだが。

711 :デフォルトの名無しさん :2018/12/22(土) 00:35:32.56 ID:mRtO7h8x0.net
>>700
C言語なら俺に聞け 148
https://mevius.5ch.net/test/read.cgi/tech/1537347410/37
>なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?

712 :デフォルトの名無しさん :2018/12/22(土) 00:36:02.90 ID:b6CiPLFa0.net
また低学歴知恵遅れが
もっと頭悪いこといいだしてるわ

713 :デフォルトの名無しさん :2018/12/22(土) 00:38:18.48 ID:b6CiPLFa0.net
もうね
支離滅裂すぎて
コメントしようがない

それぐらいめちゃくなこと書いてる自覚が
低学歴知恵遅れにはない

714 :デフォルトの名無しさん :2018/12/22(土) 00:41:48.52 ID:b6CiPLFa0.net
頭悪すぎると
自己防衛本能が働くのかもしれないが
脳みそが空想の世界にいくらしいな

どうやったらそんな頭悪いええ加減なレスを
自信満々に淡々と書けるのか不思議でならないわ

715 :デフォルトの名無しさん :2018/12/22(土) 01:48:01.62 ID:ghZDfTzQ0.net
>>700
20年て、どこから出てきたマジックナンバーだ?
それを言うなら29年なんだが

716 :デフォルトの名無しさん :2018/12/22(土) 07:52:56.06 ID:gJp1vt+rM.net
Linusがcppを排したのは正解だったんだな

717 :デフォルトの名無しさん :2018/12/22(土) 08:27:41.36 ID:LEZtop+80.net
低学歴知恵遅れ&お前ら連呼の人が、引数 void って初めて見たぞ
の人と同一人物だったとは

718 :デフォルトの名無しさん :2018/12/22(土) 10:05:42.90 ID:Ym27DU080.net
C言語のスレだから、そろそろ話をC言語に戻そうよ
C++の話は専用スレでも立ててそこで継続してくれ

719 :デフォルトの名無しさん :2018/12/22(土) 10:15:17.63 ID:j02wAUXX0.net
iZ-Cは魅力的なAPIがいっぱいだよ。

720 :デフォルトの名無しさん :2018/12/22(土) 11:12:54.97 ID:BR4LVxYj0.net
新設するまでもなくC++のスレッドも複数あるからなぁ。
濃いネタばっかりで「C++はいいぞ、早くCから移行しろ」程度じゃ
相手にしてもらえないレベルだと思うけど。

…いや、俺も理解できてるわけじゃないがな。

721 :デフォルトの名無しさん :2018/12/22(土) 11:51:34.32 ID:aSH6WKCWa.net
Cでオブジェクト指向っぽく書くと継承しなくていいのがいいよね。
冗長にはなるけど。

722 :デフォルトの名無しさん :2018/12/22(土) 12:11:28.34 ID:q6a6sTJo0.net
OOP自体が間違い。OOP書きたいのにC使うのは間違い中の間違い。

723 :デフォルトの名無しさん :2018/12/22(土) 12:26:28.69 ID:1IcOSx0Ja.net
>>722
じゃあどう書くわけ?
デザインパターンを常に排除すんの?

724 :デフォルトの名無しさん :2018/12/22(土) 12:55:54.08 ID:FB4FQRnX0.net
関数の第一引数を構造体にするならファイルポインターもオブジェクト指向に
なっちゃうからな。
仮想関数テーブルとかつくっちゃってるのかな?

725 :デフォルトの名無しさん :2018/12/22(土) 13:17:52.98 ID:GdiBSH+o0.net
昔CでのOOPが流行った頃は「オブジェクト指向=継承」みたいな捉え方が主流だったから
構造体にvtable持ってピギーバックで継承して、って感じだったな。

726 :デフォルトの名無しさん :2018/12/22(土) 13:20:28.89 ID:ruBkeT7Z0.net
>>721
それは一理ある。

俺自身はCもclass構文を取り入れるべきだと思っているが、実際そうならないのは、

・分かっている奴が書けば何とかなる

からなのも事実だ。
そして「継承」が無駄に嫌われているのは、Javaでは関数ポインタを提供しなかった為、
継承を使うべきでない局面で使われまくり、余計に意味不明になる事が多かったからだ。
デザインパターン自体がバッドプラクティス集なのもそのせいだ。
あれも本来は「第一級関数」を持つ言語で書き直し、
既存のJavaで書かれたデザインパターンは老害ゴミとして捨て去られるべきなのさ。

ただ、本来「継承」を用いるべき局面については当然「継承」の方がフィットするわけで、
Goみたいに

× 継承に代わる便利なものを用意したから継承が不要となった
○ ただ単に継承/仮想関数を排除しただけ

の言語は完全に乗り遅れてる。あれならCで書いても同じだし。
(Goは元から80年代の言語だと揶揄されていたが、全くその通りだった)

とはいえ、Goを作った連中は君と同じ感覚なのだろうとは思う。
君はGoを気に入るかもね。

727 :デフォルトの名無しさん :2018/12/22(土) 13:27:38.05 ID:nwnvhQAlM.net
> 本来「継承」を用いるべき局面については当然「継承」の方がフィットする

設計時どれだけそう思い込んでいても、のちに覆され得る。それは設計時には知り得ない。
単純に継承のことは完全に忘れ去ってしまうべきである。
そんなものは無かった。

728 :デフォルトの名無しさん :2018/12/22(土) 13:50:48.44 ID:Hmvw7Yp+M.net
老害ゆとりのvoid君
相変わらず言ってる事が支離滅裂で草

729 :デフォルトの名無しさん :2018/12/22(土) 13:56:16.04 ID:BEf9L/k+M.net
void君がよく「ゆとり」連呼してるけど
彼本人はどうなん?
発言内容からはキャリアを感じさせないし
そもそも年齢もせいぜい35くらいじゃないの?

730 :デフォルトの名無しさん :2018/12/22(土) 13:59:01.93 ID:Ym27DU080.net
カサブランカの世界だな

731 :デフォルトの名無しさん :2018/12/22(土) 14:00:34.13 ID:IG9dO8ZOa.net
>>725
そうね。便利なマクロ用意したら結局それC++じゃんみたいな。
無遅刻無欠勤がとりえでコピペの手間を厭わないsubversion大好きかつ注意深い人達が作った、再利用を全く考えないワンオフ物の超巨大クラス構造みたいなの見ると、継承は初めから無い方がいいなと思うよ。ほんとつらい。

732 :デフォルトの名無しさん :2018/12/22(土) 14:03:16.29 ID:ruBkeT7Z0.net
>>727
まあ実際それをやったのがGoな訳で。そう思う人がいるのも事実だろうさ。
(俺はGoはポシャると思っているけど)

733 :デフォルトの名無しさん :2018/12/22(土) 14:26:09.40 ID:9V9oS+990.net
>>721
書き方次第だよ。linuxで最も有名なライブラリの一つであるglibは継承してるし

734 :デフォルトの名無しさん :2018/12/22(土) 15:34:01.41 ID:ghZDfTzQ0.net
空想論の域を出てないなあ

735 :デフォルトの名無しさん :2018/12/22(土) 21:50:01.34 ID:H4+WRP2A0.net
死にたい

736 :さまよえる蟻人間 :2018/12/22(土) 21:56:40.29 ID:Op/4E6E/d.net
死にたいのは何かが足りないから。

その何かを探しに旅行へ行こう。

旅人は旅に旅立つ。

737 :デフォルトの名無しさん :2018/12/22(土) 22:42:35.80 ID:Ym27DU080.net
片道切符に誘うのやめろ!

738 :デフォルトの名無しさん :2018/12/23(日) 01:05:41.98 ID:vlmCWjWkM.net
Cの世界へ逝こう

739 :デフォルトの名無しさん :2018/12/23(日) 11:39:57.84 ID:nNQ759QC0.net
>>735
Cぬな

740 :デフォルトの名無しさん :2018/12/23(日) 12:16:27.31 ID:qYRfL2gu0.net
全てがCになる

741 :デフォルトの名無しさん :2018/12/23(日) 12:39:52.20 ID:nNQ759QC0.net
С

742 :デフォルトの名無しさん :2018/12/27(木) 23:00:48.46 ID:1iKhYige0.net
全てがFになる

743 :デフォルトの名無しさん :2018/12/27(木) 23:16:13.58 ID:fn4IYFyt0.net
そして、全てはぬるぽ

744 : :2018/12/27(木) 23:48:52.00 ID:59YrudQc0.net
>>742
冷密=「冷たい密室と博士たち」の方が好きです他は雰囲気ワードを散りばめただけのどちらかというと駄作に見えてしまうのですが、唯一これは極上のロジックだと思うのです

745 :デフォルトの名無しさん :2018/12/28(金) 06:05:14.46 ID:4iocbykD0.net
このスレで全てがFつーたら、-1のことだろ

746 :デフォルトの名無しさん :2018/12/28(金) 09:26:28.29 ID:Bx5qAOnaa.net
255もよろしく

747 :デフォルトの名無しさん :2018/12/28(金) 17:38:41.28 ID:SNiJRt+t0.net
#defineを使って関数を定義するテクニックがあります

#define kansuu() (ここに関数の内容を書く)

一時的にその関数を無効にしたいときはどうしたらいいでしょうか?

#dfine kansuu()

こんな感じにkansuu()以降を空白にしておくのがいいですか?

748 :デフォルトの名無しさん :2018/12/28(金) 17:40:24.93 ID:FW6v28vq0.net
#define kansuu() (いっぱい書いてる)

#undef kansuu
#define kansuu()

749 :デフォルトの名無しさん :2018/12/28(金) 17:54:33.91 ID:4iocbykD0.net
void kansuu(void)
{
ここに関数の内容を書く
}

#define kansuu() (ここに関数の内容を書く)

int main(void)
{
kansuu(); //マクロ
(kansuu)(); //関数
}

750 :デフォルトの名無しさん :2018/12/28(金) 23:36:56.58 ID:le4HGTEI0.net
よくあるdebug printfのアレじゃね

751 :デフォルトの名無しさん :2018/12/29(土) 00:42:29.78 ID:bhEXf4Rq0.net
>>748
> #define kansuu()

kansuu()の後には何も記述しないのが正しいスタイルってことですね

>>749
関数とマクロ、そういう使い分けができたんですか・・・

752 :デフォルトの名無しさん :2018/12/29(土) 10:25:00.95 ID:PBX00OFRa.net
-Dじゃあかんのか?

753 :デフォルトの名無しさん :2018/12/30(日) 17:16:13.69 ID:i7KTb38La.net
いいんじゃないか?
コンパイラのコマンドがどう解釈するかに掛かってはいるが。

754 :デフォルトの名無しさん :2018/12/31(月) 21:39:38.58 ID:MpZmteVw0.net
よくやるのは
#ifdef HOGE
#define func() ここに処理
#else
#define func()
#endif
で、-DオプションでHOGEの定義を切り替える。
好みや宗教により#ifdefを#if definedにしたり、HOGEの値により分けたり、プリプロセッサを使わず処理のifで分岐したり。

755 :デフォルトの名無しさん :2019/01/01(火) 01:03:53.24 ID:JA4reBf90.net
初心者です。
あけましておめでとうございます。
本年もよろしくお願いいたします。

756 :デフォルトの名無しさん :2019/01/02(水) 20:01:12.90 ID:RordgnsG0.net
かっぱらいプログラム言語と言うのが出来そうな予感がした。

757 :デフォルトの名無しさん :2019/01/03(木) 09:41:01.80 ID:MUpMksOg0.net
Linux環境のデバドラと組み込みの違いって何ですか?

758 :デフォルトの名無しさん :2019/01/03(木) 10:32:23.68 ID:H9RYMXki0.net
デバイスドライバというのはデバイスをドライブするプログラムである。
組み込みというのはまあ特定の製品を制御するための専用のシステムである。専用というのはつまり汎用ではないということで、要はPC向けではないということである。

759 :デフォルトの名無しさん :2019/01/03(木) 10:38:18.81 ID:MUpMksOg0.net
>>758
ありがとうございます!

760 :デフォルトの名無しさん :2019/01/03(木) 16:57:06.44 ID:38Nc8DQPa.net
LinuxならLinuxに合わせた形でデバイスとのやりとりを作る必要があるが、そうでないならその辺は自由になる。

761 :デフォルトの名無しさん :2019/01/03(木) 17:09:14.18 ID:MUpMksOg0.net
>>760
なるほど
自分はLinuxに合わせて作ろうと思ってます

762 :デフォルトの名無しさん :2019/01/03(木) 19:27:30.38 ID:Gl0+wAUb0.net
そもそも組込み機器でLinux使うこともあるから>>757の質問自体がイミフなんだが

763 :デフォルトの名無しさん :2019/01/03(木) 23:20:49.06 ID:x5GCx+Ws0.net
まあ、組み込みとだけ言ってしまうとなんでもありになってしまうな。
Windows Embedded なんてのもあるし。組み込みだからといってOSがないとは限らない。
というか今となっては何も入ってない方が珍しいかな?

764 :デフォルトの名無しさん :2019/01/04(金) 07:14:05.80 ID:w3lkHMGF0.net
わざわざ「組み込み」と言う意味があるかどうかだな
ノートPCをロボットの脳として搭載することもできるが
OSがWindows10 Homeじゃ組み込みとは言えないのか

765 :デフォルトの名無しさん :2019/01/05(土) 18:26:16.82 ID:pJbMq/2ja.net
今じゃ小さいの幾らでもあるからなんでも組み込みにできるな。
コストと耐久性の問題はあるが。

766 :デフォルトの名無しさん :2019/01/06(日) 21:17:49.87 ID:LPav389N0.net
一時はECUなど特定の分野を除いて組み込みもLinuxに席巻されそうになっていたけど、最近のIoTブームのせいか超小型超低消費電力のマイコンのニーズが高くなり昔ながらの職人芸的組み込みソフトが復権してきてるイメージあるわ。

767 :デフォルトの名無しさん :2019/01/06(日) 21:36:48.83 ID:rMmabB99a.net
まあプログラムはむしろ楽だね。
貧弱なプラットフォームの方が。

768 :デフォルトの名無しさん :2019/01/07(月) 06:58:10.64 ID:k1Vvc+OE0.net
PICなんかを使った、電子工作の延長みたいな
「Cでもプログラムできるワンチップ」ていうジャンルも
盛んになってるみたいだし。

あそこまで小さくなると、直接マシン語で考える方が
手っ取り早いような気がするわ。

769 :デフォルトの名無しさん :2019/01/07(月) 17:11:01.86 ID:Cio2TleD0.net
気がするんではなく実際そうだ
あれはアセンブラで使うもの

770 :デフォルトの名無しさん :2019/01/07(月) 17:19:52.92 ID:YLZmdTQx0.net
アセンブラで出来てC言語で出来ないことがイマイチわからないです。
なんか具体的な例などあれば・・・

771 :デフォルトの名無しさん :2019/01/07(月) 17:22:48.61 ID:ArcgbVcT0.net
C言語使う為には最低限コンパイラが動く環境を
用意しないと行けないが
アセンブラは比較的簡単に実装できる
いざとなったら16進で入力すれば良いし

772 :デフォルトの名無しさん :2019/01/07(月) 18:58:49.76 ID:YLZmdTQx0.net
>>771
なーるほど!コンパイラがいらずでCPUやメモリ使えるってことですね!
それは確かに便利だありがとうございます。初めてアセンブラの利用価値に合点がいきました。アセンブラわからないですが(´・ω・`)

773 : :2019/01/07(月) 19:01:38.90 ID:c5u8F3uW0.net
>>770
自己書き換えプログラム、とかはどうですか?

774 :デフォルトの名無しさん :2019/01/07(月) 19:06:52.70 ID:ArcgbVcT0.net
8ビットCPUの頃はやった事あるけど
今のCPUだと難しいのではないかな

775 :デフォルトの名無しさん :2019/01/07(月) 19:13:29.39 ID:Cio2TleD0.net
真のハーバードアーキテクチャだとな

776 :デフォルトの名無しさん :2019/01/07(月) 19:20:28.86 ID:aW5a0RDY0.net
コンパイラが要らなくてもアセンブラは必要なものじゃないの?

777 :デフォルトの名無しさん :2019/01/07(月) 19:34:19.06 ID:VIu/Fipc0.net
>>776
8bit時代、サブルーチン程度ならニーモニックどころかダンプ直打ちしてた基地外もいた

778 :デフォルトの名無しさん :2019/01/07(月) 19:41:40.02 ID:0y/PgDfv0.net
おっさん世代はZ80ぐらいなら主要なニーモニックは未だにヘキサで覚えてる。

779 :デフォルトの名無しさん :2019/01/07(月) 21:33:52.93 ID:Cio2TleD0.net
>>777
ごめんな
コーディング用紙つかってた
I/Oの鬼ダンプとか今でも思い出すよ

780 :デフォルトの名無しさん :2019/01/07(月) 21:46:22.29 ID:E11lC+b50.net
このスレの平均年齢いくつなの……w

781 :デフォルトの名無しさん :2019/01/07(月) 21:58:59.48 ID:fnTlHl64a.net
>>772
それだけでなく本当にCだけではできない事があるのが普通だ。CPUにもよるけどね。

何か特定のレジスタに値をセットしないと何かの機能が使えないみたいな場合はCではレジスタの指定をして値をセットすることができないので最低でもその部分だけインラインアセンブラにしたり全部アセンブラで書いたりする(またはそれ用に拡張がされたCコンパイラを使う)。

その他、80系やx86系ってI/Oポートあるが、あれはCからはアクセスできないのでその部分はアセンブラにする。

まあしかしそういうのはほとんどデバイスドライバの中で必要になる事なので普通は一般ユーザは考えなくてもよくなっている。

782 :デフォルトの名無しさん :2019/01/07(月) 22:02:17.91 ID:fnTlHl64a.net
>>777
それ昔は普通に居た。何せアセンブラなかったりあっても高かったりで使えないことが多かったからな。

>>778
3E 00   LD A,0

のような。

783 :デフォルトの名無しさん :2019/01/07(月) 22:31:49.44 ID:VIu/Fipc0.net
>>782
XOR使おうぜ

784 : :2019/01/07(月) 22:37:49.75 ID:c5u8F3uW0.net
>>781
思い出した!たしか 386 にて real mode から protected mode に移る命令は C では書けませんね…
他にもなにか面白い話があったような気がしましたが、もう思い出せない…実は 286 はリアルモードに戻れるとか…

>>778
HALT を言ってみよ

785 :デフォルトの名無しさん :2019/01/07(月) 23:02:03.29 ID:HO7xoVU80.net
LD は ゼロやキャリーフラグ変化するんだっけ?

786 :デフォルトの名無しさん :2019/01/07(月) 23:06:04.57 ID:JlpUfKel0.net
オムニバースを解析するソフトウェアを開発するにはどうすれば良いですか?

787 :デフォルトの名無しさん :2019/01/07(月) 23:11:49.25 ID:ArcgbVcT0.net
>>784
逆じゃないか?
286では戻れずに、不便だったけど
386では戻れるようにしたとか

788 :デフォルトの名無しさん :2019/01/07(月) 23:51:44.52 ID:4vLmnBNE0.net
>>784
76

789 : :2019/01/07(月) 23:54:17.89 ID:c5u8F3uW0.net
>>787
>286では戻れずに、不便だったけど
通説ではそうなんですが、「実は…」という話があった気がします、そのため「だけ」に 286機を確保していたつもりだったのですが、うっかり捨ててしまった、やりたかったことを今思い出してしまった…

790 :デフォルトの名無しさん :2019/01/08(火) 00:17:51.75 ID:oEiIhl5B0.net
NECのPC98での話ですが、プロテクトモードとリアルモードを行き来するのに
リセットで実装していたと聞きました(死中に活ありみたいな感じ)。

「実は・・・」って話は知らないw

791 :デフォルトの名無しさん :2019/01/08(火) 07:38:36.71 ID:iKVSkTiF0.net
>>789
0F 05 LOADALL

792 :デフォルトの名無しさん :2019/01/08(火) 07:56:15.99 ID:hvlZBAYo0.net
なんか286はPC用じゃなく工業製品用を想定して設計されてたって記事読んだ記憶が。

793 :デフォルトの名無しさん :2019/01/08(火) 08:00:10.01 ID:3ZWgvjCS0.net
さあ、C言語の話をしようか。

794 :デフォルトの名無しさん :2019/01/08(火) 10:13:36.31 ID:qFTAFG9Fx.net
昔から疑問なんだけど、マップドIO制御を除いてC言語だけでRTOSのカーネルは書けるのだろうか?
タスク同士のシステムコール発行によるプリエンプトはsetjmp/longjmpで何とかなりそうだけど、割り込みハンドラからのシステムコールによるタスクディスパッチは何をどうあがいてもスタックポインタの直接書き換えが必要な気がしてならない。

795 :デフォルトの名無しさん :2019/01/08(火) 10:40:29.19 ID:qjoMs7mdH.net
ハンドラ内でsetjmpしたらどうなるんだろう

796 :デフォルトの名無しさん :2019/01/08(火) 11:39:30.49 ID:iKVSkTiF0.net
CだけでOSなんて、Cは元々そういう使い方を想定していない
実際UNIXは5%がアセンブラだった

特権命令は誰か言っていたとおりだし
PCとSPのようなCが前提にしているものの初期化をCでは絶対に書けない

797 :デフォルトの名無しさん :2019/01/08(火) 13:48:48.48 ID:we27gJDs0.net
でも最近のUEFIとかなら全部Cで書かれたOSでも起動できそうだけどね。

798 :デフォルトの名無しさん :2019/01/08(火) 16:18:38.83 ID:rMmlRXYeM.net
C言語を一番最初に学んで、C++、ほかスクリプト言語と使っているが、C言語で文字列処理ライブラリーってみんなどうしてる?
C++ だとboost C++ とかいろいろなライブラリがあって、オープンソースだったり商用利用できたり、物によってはGPLだったりするけど、そういうのに相当するC言語の文字列処理ライブラリってある?
各自で作りためたオレオレライブラリをみんな使ってるの??

799 :0794 :2019/01/08(火) 16:22:15.64 ID:rMmlRXYeM.net
つまり今から俺が自分用に文字列処理ライブラリ(独りよがりのオレオレライブラリ)を作る意味があるのか、俺が知らないだけでboostみたいに出来合いの洗練されたライブラリがあるのか…な…?
Pythonとかは言語仕様で十分複雑なことが出来るし、ホントC言語だけなんでこんな毎回面倒な目に合うのだろう。

800 :デフォルトの名無しさん :2019/01/08(火) 16:37:12.54 ID:iKVSkTiF0.net
Cを修行中ならオレオレライブラリを作ることにも充分に意味がある
既製品を使うことしかできないくせに天狗になってるやつが時々いる
使っているライブラリがオレオレか既製品かといった手段ではなく
知的な旅でどこへ行けたかが問題であることを見失うな

801 :デフォルトの名無しさん :2019/01/08(火) 16:56:52.52 ID:LJT6VvGba.net
俺はboostを知らない。
Cではあまり複雑な文字列処理を書かないしな。
複雑なのはPerl使ったりする。

802 :デフォルトの名無しさん :2019/01/08(火) 18:11:31.32 ID:rMmlRXYeM.net
みんなありがとう

Cは全然修行中なわけではなく、別に必要にも迫られてない(C++もPythonも使える恵まれた環境)
ただ必要になったとき、みんなどーしてんだろうと。
C言語で文字列処理なんてするシチュエーションが少ない、とかかな。

初めてPython使ったときは感動した。簡単すぎて。C++では修行中に文字列処理ライブラリとかオレオレライブラリ作成やってみたけど、できあがった物がどう見てもboostの下位互換で悲しかった。
だからC言語で良いライブラリがあったら知っておきたいと思ったんだ。

803 :デフォルトの名無しさん :2019/01/08(火) 18:41:54.19 ID:MwaFnBBQ0.net
>>796
頑張れば書けるよ!

Cというよりは Cの文法を使った何か になったけどな・・・

804 :デフォルトの名無しさん :2019/01/08(火) 19:47:06.06 ID:qjoMs7mdH.net
>>799
glibとか?

805 :デフォルトの名無しさん :2019/01/08(火) 22:16:50.19 ID:BZbwJw/70.net
ちょっとすみません
gccの最適化オプションの-O2を使った場合に動作がおかしくなったりすることはありますか?

806 :デフォルトの名無しさん :2019/01/08(火) 22:19:56.62 ID:oEiIhl5B0.net
あるかもしれないし、ないかも知れない
そういうソースがあるなら、晒して皆に確かめてもらえ

807 :デフォルトの名無しさん :2019/01/08(火) 23:00:38.10 ID:E9NMc6wba.net
>>805
ある。
多分これからvolatileに関するやりとりが始まる。

808 :デフォルトの名無しさん :2019/01/08(火) 23:28:52.41 ID:BZbwJw/70.net
>>806
最適化したことでおかしくなったと言うわけではないんですが
どうなのかなと気になったもので
具体的にはO2の中のどの最適化でバグが出ることがありますか?
あとgccではなくg++でした

809 :デフォルトの名無しさん :2019/01/08(火) 23:31:24.43 ID:BZbwJw/70.net
>>807
volatileというものに気を付けないといけないわけですか

810 :デフォルトの名無しさん :2019/01/08(火) 23:45:28.12 ID:3ZWgvjCS0.net
>>808
仕様上規定されていない部分は最適化によって挙動が変わることがある。だから不確定な処理や誤った処理を書いていた場合に、これまでたまたま上手く動くコードが生成されていただけで、最適化によって挙動が変わってバグが顕在化することがある。
例えば、評価順序が不確定な処理を書いていたのがたまたま期待通りの順序で実行するコードになっていただけとか、不正なアドレスのメモリを参照や更新してしまっていたがたまたま問題がなかっただけだったとか。

811 : :2019/01/09(水) 00:17:56.61 ID:BRCoi/pn0.net
>>807
volatile は一切使わないことにしました…

812 :デフォルトの名無しさん :2019/01/09(水) 00:28:20.37 ID:QEOONCVCM.net
volatileにすべきところでしないから最適化でバグるんだよ

813 : :2019/01/09(水) 00:40:32.88 ID:BRCoi/pn0.net
>>812
volatile すべきところ、って具体的にどういうところですか?それは本当に volatile にする必要があるのですか?

814 :デフォルトの名無しさん :2019/01/09(水) 01:08:46.29 ID:QEOONCVCM.net
>>813
メモリマップドIOと
共有メモリマルチプログラミングで
最適化時のアクセス省略防止。

815 :デフォルトの名無しさん :2019/01/09(水) 02:45:48.52 ID:cump+mlU0.net
>>810
ありがとうございます
そうであれば不確定な部分がなければバグはでないということですね
最適化用にプログラムの書き方も変える必要があるのかと思っていました

volatileはライブラリの中で使っていそうですがきっと大丈夫でしょう

816 : :2019/01/09(水) 03:15:23.18 ID:BRCoi/pn0.net
>>814
個人的には、memory-maped な世界はよくしらない(インテル系しかしらない…).
shared memory って、特別なことはありましたっけ?マルチスレッドなら排他処理用のオブジェクト(pthread-mutex/cond)を使っておれば問題ないし、fork() の中と外で同じ変数をつつくときは…はて、どうしてたっけ?

817 :デフォルトの名無しさん :2019/01/09(水) 03:28:53.85 ID:T8HUoC+c0.net
そういやvolatileってC言語の場合CPUによってはうまく行かない事がありうるのな。
例えば4バイトの整数にアクセスするとして、そのCPUが2バイトづつしか読み書きできなかったら必ず2回のアクセスになる。
すると上位バイトと下位バイトで取得した時間が違っていたり一度に4バイト全体の内容を書き換えられない。

818 : :2019/01/09(水) 04:25:49.36 ID:BRCoi/pn0.net
>>817
そういうのは >>816 のとおり、そのためのカラクリ(pthread等)を使用してアクセスするべきだと思います、裸で触ること自体が発想としてイカレているのではないでしょうか?

819 :デフォルトの名無しさん :2019/01/09(水) 04:49:03.78 ID:/QFmT4Vc0.net
マイコンなどのIO アドレスを、PC 側のメモリのアドレスに関連付けているのだろう(Memory-mapped I/O)。
これで、PC側のアプリでは、PCのメモリを読み書きするだけで、マイコンの操作ができる

PC側のメモリを読むと、マイコン側のメモリから読み込む。
読み込むと、マイコンの電圧が変わって、値が不定か逆などになる

通常は、pull up, pull down 抵抗などで、5V・0V にしているけど、
閾(しきい)値(Threshold)があって、
例えば、1V以下なら0V、4V以上なら5Vと判定される場合、1〜4Vは、不定になる

まあとにかく、読み込むだけで電圧が変わる・リセットされるから、
読み込むだけでも、電圧の状態が変わる

だから、IOアドレスを読むだけでも意味がある・状態を変えているので、
コンパイラで最適化・省略してほしくない!

820 :デフォルトの名無しさん :2019/01/09(水) 05:40:56.66 ID:4Rn8lGBj0.net
>>819
volatileと一切何の関係もねえし

821 :デフォルトの名無しさん :2019/01/09(水) 07:03:03.74 ID:nmJLIVr10.net
いや、「Cのプログラムで変数(あるアドレス)を読むことが、
ハードウェア的には状態リセットの操作になっているから、
読めと指示した場所で必ず読み取り動作を行って欲しい」だから、
volatileの使い方のひとつとして正当でしょ。

ハードウェア的な内幕の説明が少々ぎごちない気がするけどね。

822 :デフォルトの名無しさん :2019/01/09(水) 07:55:50.33 ID:YaNn8N94x.net
>>817
多バイトアクセスがatomicに行われないのはvolatileの守備範囲ではなくinterlockの守備範囲。
なのでCPUによってはvolatileがうまく行われないってのはvolatileに対する名誉毀損になる。

823 :815 :2019/01/09(水) 08:02:53.56 ID:/QFmT4Vc0.net
マイコンなどのIO アドレス(port)を読み書きするには、その装置の手順が決まっている

まず、制御ポートに、読み込むポート番号を教える。
そこで装置を制御できるようにするために、例えば、50μ秒待つ

次に、ポートから読み込む。
読み込まれたポートは、電圧の状態を変える

電気電子的動作の要件・時間が、厳密に決まっている。
ある回路を動作させるときに、回路を切り替えないといけない

電圧の高低で、ある回路の部分を止めて、異なる部分を動作させる(電流を流す)。
そのため、規定の時間よりも、速くアクセスできない

824 :デフォルトの名無しさん :2019/01/09(水) 11:29:26.49 ID:4Rn8lGBj0.net
電流を流すってのはバイポーラの場合だね
今ほとんどのコンピュータがCMOSで電流はゼロアンペアだ
寄生容量で交流成分が漏れたり貫通電流の問題はあるが
それは信号が電流表現ということではない

825 :デフォルトの名無しさん :2019/01/09(水) 18:32:34.88 ID:ur1geU61p.net
>>808
最適化でおかしくなる場合の例としては潜在的バクがある。そしてよく見るのは組み込み系。volatileもそうだがprintfいれたり-O0にすると動作が正常化するってのがある。

volatileの例だと
int* fifo=0x0001;
int data=*fifo;
のようなコードはvolatileつけないと順番入れ替えられたりコードそのものがなくなったりする。

-O0やprintf入れると直る系はキャッシュ周りのこともある。キャッシュを積極的に使うかどうかで、キャッシュを使わない場合に安定する。キャッシュをたくさん使うprintfのような関数を入れると再度積み直しになって安定する。

後者は潜在的なバグで発見が難しいことが多い。プログラミングはわかるけど組み込みを知らない人がやらかすバグの一つ。

826 :デフォルトの名無しさん :2019/01/09(水) 19:37:23.10 ID:pHvZAha70.net
キャッシュ絡みの潜在的なソフトのバグってのは経験ないなぁ。キャッシュが化けるハードのバグなら経験あるけど。
キャッシュ絡みってシノニム問題のこと?

827 :デフォルトの名無しさん :2019/01/09(水) 19:41:27.69 ID:G9k7j+QI0.net
キャシュの話はC言語にかぎらずどの言語でも起こりそう

828 :デフォルトの名無しさん :2019/01/09(水) 20:19:35.23 ID:pHvZAha70.net
ああ、キャッシュ絡みのソフトバグ思い出した。
動的にプログラム入れ替えるソフト作ったときにIキャッシュをクリアし忘れてて誤動作したことあるわ。
Dキャッシュと分離されてる拡張ハーバードアーキテクチャの良い勉強になった思い出。

829 :デフォルトの名無しさん :2019/01/13(日) 00:46:58.72 ID:Yl3ShYz90.net
IMCCOやTecConfのエントリー作品を見る限り、
Cのコードゴルフって10年くらい前と短かさとかが変っていないように思えるんだけど
これはCが成熟しきった(所謂「枯れた」)言語である程度の成長限界があるからなのかな。
それとも凄腕プログラマの興味がPythonやらRubyなんかに移っちゃったのかな。

830 :デフォルトの名無しさん :2019/01/13(日) 01:10:46.51 ID:/M42Y9uV0.net
> コードゴルフ
意味無いから誰も参加しないだけでは

831 :デフォルトの名無しさん :2019/01/13(日) 01:20:23.99 ID:zp78LtJW0.net
>>770
アセンブラとC言語はまったく違うのに何を言っているのか?

832 :デフォルトの名無しさん :2019/01/13(日) 01:23:29.53 ID:zp78LtJW0.net
>>802
あのな、コンピータには文字列という概念がないのだよ。

833 :デフォルトの名無しさん :2019/01/13(日) 01:50:41.81 ID:IM9k4xNE0.net
> それとも凄腕プログラマの興味がPythonやらRubyなんかに移っちゃったのかな。

ハハッ、ナイスジョーク

834 :デフォルトの名無しさん :2019/01/13(日) 10:13:49.80 ID:yABfrIyE0.net
>>832
それを言ったら数値という概念もないよね
人間から見たら数値として扱えるように演算しているだけで
コンピュータにはビットのオンオフしかないよ

835 :デフォルトの名無しさん :2019/01/13(日) 10:20:29.78 ID:7BHWGbvy0.net
>>834
CPUがビット演算しか備えていないならそうかも知れないけど、整数や浮動小数点数の演算を備えているのだから数値の概念はあるだろう。

836 :デフォルトの名無しさん :2019/01/13(日) 10:59:24.10 ID:EaFLGn72a.net
それいったらあるのはせいぜい、アルファベットとか…

837 :デフォルトの名無しさん :2019/01/13(日) 11:17:20.34 ID:IIjq691iM.net
>>834
むしろ数値しかない

838 :デフォルトの名無しさん :2019/01/13(日) 11:26:53.62 ID:EaFLGn72a.net
チューリングマシンの説明に数値なんて出てこないでしょ

839 :デフォルトの名無しさん :2019/01/13(日) 11:49:52.93 ID:Mw9Ec3URa.net
>>838
チューリングマシンは計算機のひとつの仮想モデルだけど、いつからそれに限定した話になったの?
そもそもスレ違いだからこれ以上議論する必要はないけど。

840 :デフォルトの名無しさん :2019/01/13(日) 11:56:05.87 ID:EaFLGn72a.net
チューリングマシンでもコンピュータでもなんでもいいけど、記号操作をやってるんです。
数値なんてのはかなり抽象化した話です。

841 :デフォルトの名無しさん :2019/01/13(日) 12:02:55.92 ID:QSfXhXiJM.net
CPU の数値演算はビット列をAND、OR、 NOTの組み合わせで変換してるだけだしね

842 :デフォルトの名無しさん :2019/01/13(日) 12:27:42.01 ID:Ov2pIYHC0.net
まぁ根本的に機械にはビットも数値も文字も文字列も無いわな。電気的にHiかLowかって話だから。
そういう話するスレではないと思うが。

843 :デフォルトの名無しさん :2019/01/13(日) 12:51:37.79 ID:gz3n+4+q0.net
演算器を構成するゲートレベルなら話は別だが、CPUレベルなら整数の加算てのは
ひとつのプリミティブな操作だろう。

844 :デフォルトの名無しさん :2019/01/13(日) 12:52:03.33 ID:+ibs1ZYS0.net
C言語以外の話題になると、俄然盛況になるスレ

845 : :2019/01/13(日) 13:19:44.44 ID:QvV+lMh50.net
>>841
3種類もあるのかなあ… NAND または NOR どちらか一方だけじゃない?

846 :デフォルトの名無しさん :2019/01/13(日) 13:37:24.61 ID:Gq5QlaCR0.net
今どきはHDLで書いてLUTベースになってるんじゃないのん?

847 :デフォルトの名無しさん :2019/01/13(日) 13:53:19.28 ID:mc4jTf550.net
原子/分子に文字の概(ry

848 :デフォルトの名無しさん :2019/01/13(日) 17:00:14.26 ID:T8nAK+of0.net
>>845
NAND だけで全ての論理回路を構成できるけど NAND だけで構成されてるかどうかはわからん

849 :デフォルトの名無しさん :2019/01/13(日) 17:43:49.41 ID:kE5YqrGT0.net
基本回路はNOTで、その出力で駆動する
スイッチング素子を直列に置くか並列に置くかでAND/ORにしてるだけ
出力を負論理にするのはIOL>IOHだったTTL時代の名残

850 :デフォルトの名無しさん :2019/01/15(火) 07:09:12.36 ID:nk6JBEGL0.net
根本は電子とホールの移動度の差

851 :デフォルトの名無しさん :2019/01/15(火) 07:18:28.73 ID:P3RuPPdOa.net
たとえば水流で動作するコンピュータがあったらと考えると電子とホールは全然本質じゃない

852 :デフォルトの名無しさん :2019/01/15(火) 08:01:36.67 ID:c3MJrubW0.net
そういや、スマートボール(まぁパチンコ台みたいなものと思ってくれ)式に
上の投入口からボールを落とすと、台に仕組まれたシーソーの傾きが変わって
後から入れるボールの流れも変わる、ていう「機械式計算機」の
モデルもあったな。
シーソーにラッチがついてて「メモリ機能」を持たせたり、
ボールを何個か積み上げるとラッチが解除される仕掛けで変更したり。

>>850 は半導体素子の原理説明だったかな。
P型、N型それぞれの中でも、電子と正孔の両方があったはず、だよね。

853 :デフォルトの名無しさん :2019/01/15(火) 08:06:38.17 ID:O800IQzp0.net
正孔なんてものは存在しない
あるはずの電子がない状態というだけ

電流の向きと電子の移動方向が逆ということを
どうしても受け入れられない石頭のための説明だ

854 :デフォルトの名無しさん :2019/01/15(火) 09:33:53.56 ID:biAsBETNx.net
>>853
あるはずの電子がない状態を「正孔」と定義してるのでは?
正孔が存在しないってのは定義を否定することになる。

855 :デフォルトの名無しさん :2019/01/15(火) 10:10:49.40 ID:O800IQzp0.net
>>854
ならない
おまえ個人のオレ様ルールで否定ということにしたいだけだ

856 :デフォルトの名無しさん :2019/01/15(火) 10:24:18.70 ID:ymCyYm1q0.net
つまり電子が無くなることなんて無かった…?

857 :デフォルトの名無しさん :2019/01/15(火) 10:36:11.91 ID:xc4OhZdf0.net
>>853
「あるはずの電子が無い状態」のことを性行っていうんよ

858 :デフォルトの名無しさん :2019/01/15(火) 11:02:13.55 ID:O800IQzp0.net
846みたいに陽電子と勘違するやつがいるから指摘しといたんだ

859 :デフォルトの名無しさん :2019/01/15(火) 11:06:00.20 ID:TmM1XKX0M.net
誤「あるはずの電子がない」
正「電子がある方が結合が安定する(けど陽子数と合わない)」

860 :デフォルトの名無しさん :2019/01/15(火) 11:19:45.08 ID:O800IQzp0.net
>>859
ほほう それでそれで?
      ____
     /:::::::ヽ
    f::/" ̄ ̄ヾi
    |:リ _ _|
    |r==( o)( o)
    ( ヽ  _) i
  __/ヽ ー== イ
 /ヽ ヽ \__ノ
`/ i  \_/、
/ r-、    ハ
レ⌒ヾi /  / |
i   ̄`ー―-ヘ |
ヽ_____ノーイ
| \    ノ
    ̄ ̄ ̄ ̄

861 :デフォルトの名無しさん :2019/01/15(火) 12:02:58.73 ID:P3RuPPdOa.net
ホールはあるぞ。
電子も実はないんだとか言うならまだわかるが。

862 :デフォルトの名無しさん :2019/01/15(火) 12:03:00.19 ID:+hPQnyk+M.net
>>855
じゃあ、逆に聞くが正孔って何?

863 :デフォルトの名無しさん :2019/01/15(火) 12:12:57.27 ID:O800IQzp0.net
ブツではなく状態ということだ

864 :デフォルトの名無しさん :2019/01/15(火) 12:46:21.45 ID:biAsBETNx.net
なんだ、やっぱりその状態があるって認めてるじゃん。正孔(という状態)は存在する、と。
てか誰も「正孔というモノ」の話なんかしてなくて一人だけ勘違いしてるw

865 :デフォルトの名無しさん :2019/01/15(火) 12:53:56.34 ID:XHhYs/N9M.net
いや俺も勘違いしてるから二人にしとけ。

866 :デフォルトの名無しさん :2019/01/15(火) 12:59:09.57 ID:adxfbmcy0.net
じゃあ俺も俺も

867 :デフォルトの名無しさん :2019/01/15(火) 12:59:28.21 ID:uoTEW6ZSa.net
ところで何の話をしているのかね?

868 :デフォルトの名無しさん :2019/01/15(火) 13:10:35.80 ID:adxfbmcy0.net
過去レス読めばいい

869 :デフォルトの名無しさん :2019/01/15(火) 15:48:52.44 ID:O800IQzp0.net
>>864
絡んできたくせに結局849の日本語が通じてないだけかよ
相手して損した

870 :デフォルトの名無しさん :2019/01/15(火) 16:17:51.71 ID:Q775hXRk0.net
トムとジェリー 仲良くけんかしな
トムトムトムにゃーご
ジェリージェリージェリーちゅう

871 :デフォルトの名無しさん :2019/01/15(火) 17:18:14.06 ID:biAsBETNx.net
>>869
もうこの話題も飽きたので相手しないだけ。

872 :デフォルトの名無しさん :2019/01/15(火) 17:23:42.61 ID:TYEZC8N+0.net
昭和の香り

873 :デフォルトの名無しさん :2019/01/15(火) 20:58:52.03 ID:uoTEW6ZSa.net
昭和は遠くなりにけり

874 :デフォルトの名無しさん :2019/01/15(火) 21:44:31.19 ID:O800IQzp0.net
>>871
バイバイ、イソップのキツネ君w

875 : :2019/01/15(火) 22:02:49.14 ID:niK8DUcQH.net
>>870
猫にねずみが噛み付いた
あべこべだ猫たたき
ねずみっていきものさ!
猫だっていきものさ!

876 :デフォルトの名無しさん :2019/01/16(水) 17:45:04.86 ID:ECRqnYoc0.net
そういやトムジェリって一作目が作られたのが1940年なのな。戦前だ。
それで延々と続いて2017年にもOVAのDVDが出ている。恐ろしく長寿だ。
まあディズニー関係が一番長寿なんだろうけどね。

877 :デフォルトの名無しさん :2019/01/16(水) 17:49:16.09 ID:ryLt0Gqla.net
スーパーマンの1941年のアニメなんてすごいレベル高いよ

878 :デフォルトの名無しさん :2019/01/16(水) 22:19:46.42 ID:+bYxL46c0.net
ENIACの頃か

879 :デフォルトの名無しさん :2019/01/17(木) 23:04:44.74 ID:KvO4PGbE0.net
フラッグの状態によって引数を変更する必要があるのですが
どのやり方がベストでしょうか?

//A:冗長だけど単純で解りやすいと思う
if ( flag )
{
func(PARAM1, PARAM2, 1, "hoge1", 2, "hoge2", 3, "hoge3");
}
else
{
func(PARAM1, PARAM2, 2, "hoge2", 3, "hoge3", 1, "hoge1");
}

//B:いったん変数に入れてから function call
if ( flag )
{
n[0] = 1; n[1] = 2; n[2] = 3;
str[0] = "hoge1"; str[1] = "hoge2"; str[2] = "hoge3";
}
else
{
n[0] = 2; n[1] = 3; n[2] = 1;
str[0] = "hoge2"; str[1] = "hoge3"; str[2] = "hoge1";
}
func(PARAM1, PARAM2, n[0], str[0], n[1], str[1], n[2], str[2]);

880 :デフォルトの名無しさん :2019/01/17(木) 23:05:39.65 ID:KvO4PGbE0.net
//続き
//C:テーブルその1
const int table[2][3] = {{1,2,3},{2,3,1},};
const char *stbl[2][3] = {{"hoge1","hoge2","hoge3"},{"hoge2","hoge3","hoge1"}};
i = flag ? 0: 1;
func(PARAM1, PARAM2, table[i][0], stbl[i][0],table[i][1], stbl[i][1],table[i][2], stbl[i][2]);

//D:テーブルその2 順番が違うだけの場合だったらこれでもいける
const int table[3] = {1,2,3};
const char *stbl[3] = {"hoge1","hoge2","hoge3"};
int order[2][3] = {{0,1,2},{1,2,0}};
i = flag ? 0: 1;
func(PARAM1, PARAM2, table[order[i][0]], stbl[order[i][0]],table[order[i][1]], stbl[order[i][1]],table[order[i][2]], stbl[order[i][2]]);

//E:三項演算子 これは無駄に比較が多くなるから無しかも
func(PARAM1, PARAM2, flag?1:2, flag?"hoge1":"hoge2",flag?2:3, flag?"hoge2":"hoge3",flag?3:1, flag?"hoge3":"hoge1");

881 :デフォルトの名無しさん :2019/01/17(木) 23:16:19.13 ID:lB4jgDBk0.net
>>879
ケースバイケース

882 :デフォルトの名無しさん :2019/01/18(金) 00:27:39.99 ID:mQ1FzYrGa.net
引数が5個あるのはすでにおかしいという気もあ

883 :デフォルトの名無しさん :2019/01/18(金) 00:39:40.92 ID:2Bf08m/t0.net
個人的にはAが好きだけど
こういうの馬鹿にする人いそうなのが困る

884 :デフォルトの名無しさん :2019/01/18(金) 01:55:40.31 ID:b8LPMN8g0.net
引数でやりとりせず大域変数に渡したくなる

885 :デフォルトの名無しさん :2019/01/18(金) 01:59:06.15 ID:9Rl7pqwkM.net
配列に入れてnとstr丸ごと渡せよ

886 :デフォルトの名無しさん :2019/01/18(金) 02:04:58.72 ID:4oORRjeGM.net
構造体に入れてポインタ渡さない?

887 :デフォルトの名無しさん :2019/01/18(金) 05:44:13.01 ID:APqq2jRu0.net
この範囲だけで言えば A が見通しが良くて分かりやすいんじゃないかな。

1, 2, 3 の並び方が(順列で)6通り存在するとか、
1 と "hoge1"... だけでなく、1 と "hoge2" の組み合わせも発生しうるとか、
func()の呼び出しパターンがもっと複雑だったら、
「flagの値に応じて適切な引数でfunc()を呼び出す関数」を作ると思う。
call_func(int flag, [func()に渡す引数]); みたいな感じ。

[func()に渡す引数] の部分を、カンマで区切った引数群にするか、
構造体にまとめるかは、別の要素が絡むので、強く主張できない。

888 :デフォルトの名無しさん :2019/01/18(金) 06:01:14.41 ID:5rrYPQ5i0.net
俺なら次のようにする。
void *a[]={1,&"hoge1",2,&"hoge2",3,&"hoge3",2,&"hoge2",3,&"hoge3",1,&"hoge1"};
func(flag?a:a+6);

889 :デフォルトの名無しさん :2019/01/18(金) 15:49:59.44 ID:dETdnGdxa.net
>>879
その flag が 0 か 0 以外の値にしかならず 1 や 2 で違う動作になる事は未来永劫ない場合と、将来的になる可能性がある場合とでやり方は変えるかも知れない。

でも最初のやり方で良いんじゃないかな。あまり捻ると分かりづらくなるし。
flagの値によって何十通りもの違う呼び出しになるとかいうなら色々考えた方が後々良いのかも知れないが。

890 :デフォルトの名無しさん :2019/01/18(金) 16:33:30.33 ID:qQDJcXFa0.net
flagに1も2もあるかよ
Win32のGetMessageみたいなアホなケースはあるが

891 :デフォルトの名無しさん :2019/01/22(火) 14:42:25.83 ID:Um5Ij+zI0.net
突然のステマ(OSSについてだけど)
LuaTeXっていうTeXのLua拡張?(よく分からん)に付いてくる
pplibっていうPDFライブラリおすすめ。
ドキュメント↓
https://serveur-svn.lri.fr/svn/modhel/luatex/trunk/source/texk/web2c/luatexdir/luapplib/html/ppapi.html#c-api
C向けのAPIでかなり最近に開発されたおかげか挙動が素直

892 :デフォルトの名無しさん :2019/01/22(火) 15:04:03.04 ID:zFHfz07h0.net
>>891
みえない

893 :デフォルトの名無しさん :2019/01/22(火) 15:24:29.26 ID:rPWXpeN+0.net
Username for Subversion luatex repository

とか入力を求められるけど、何やら登録が必要?

894 :デフォルトの名無しさん :2019/01/22(火) 15:34:39.22 ID:Um5Ij+zI0.net
>>893
ユーザー名: anonsvn
パスワード: anonsvn

895 :デフォルトの名無しさん :2019/01/22(火) 15:35:11.14 ID:Um5Ij+zI0.net
ていうかごめん。普通に匿名SVNであることを書き忘れてたわw

896 :デフォルトの名無しさん :2019/01/22(火) 15:47:59.14 ID:rPWXpeN+0.net
こちらも Subversion の公開レポジトリでは anonsvn が一般的と知らなかった。

案内ページも表示されないんで完全会員制の秘密クラブの扉でも
ウッカリ開いてしまったのかと、少々慌ててしまった部分もある。

897 :デフォルトの名無しさん :2019/01/22(火) 16:00:45.48 ID:J1mDHp9Ya.net
バカには見えないプログラムでございます。

898 :デフォルトの名無しさん :2019/01/24(木) 09:31:07.67 ID:0uzJSPSp0.net
確かにAPIはスッキリしてるけど機能が少なすぎるね>>891
Poppler使うわ。

899 :デフォルトの名無しさん:2019/01/27(日) 03:05:06.13 ID:y+WQJSAc+
Cで手軽に使えるエディタなにか教えて
今まではbcpad使ってたんだがWindowsの互換問題なのか起動するがコンパイルしようとすると落ちるんよね
互換モード使っても使えんかったし,bcc32コンパイラはコマンドラインからは正常に使えた
bcapdをDLし直したが駄目やった

900 :デフォルトの名無しさん:2019/01/27(日) 03:07:35.22 ID:y+WQJSAc+
VS持っているけど数百ステップのコードに使いたくないんよね
bcpad並みに気軽に使えるエディタを教えてくれ
最悪はAtomやサクラなんだが

901 :デフォルトの名無しさん :2019/01/27(日) 17:56:04.26 ID:dmqtxJI00.net
てす

902 :デフォルトの名無しさん :2019/01/30(水) 19:18:19.67 ID:lQux7EEV0.net
この板ってPCの書き込みは見れない仕様なの?

903 :デフォルトの名無しさん :2019/01/30(水) 20:09:31.10 ID:5GzTmkIQ0.net
は?

904 :デフォルトの名無しさん :2019/01/30(水) 21:15:29.41 ID:lQux7EEV0.net
>>903
この板をPCのクロームで見てみて
レス数が903なのに、メイトでは897なんよね

905 :デフォルトの名無しさん :2019/01/30(水) 21:22:29.10 ID:yhwdEVRM0.net
>>904
なんかNGしてるワッチョイでもあるんでは?

906 :デフォルトの名無しさん :2019/01/30(水) 21:25:54.58 ID:yhwdEVRM0.net
あ,なんかしょーもないレスの仕様だけ書き込むのもアレだから
ちょっとしたことだけど……
C99の仕様だとfor文の条件の中で新しい変数が宣言できるけど
(新規のプロジェクトでは)積極的に使っていいと思う?
for (int8_t __cnt_foo; __cnt_foo < 42; __cnt_foo++) {
...
}
↑こういうの。

907 :デフォルトの名無しさん :2019/01/30(水) 21:33:33.88 ID:uDOSlsoAM.net
>>904
2cH.scか2ch.Netみてるんでしょ

908 :デフォルトの名無しさん :2019/01/30(水) 21:35:32.25 ID:lQux7EEV0.net
LINEの入社試験でC選んだけど
forの中などで宣言できる仕様になってた
cppやjavaでも使えるし使っていってええんじゃ

それにi,j,kってどうでもええ変数やから頭でも書く必要もないような

909 :デフォルトの名無しさん :2019/01/30(水) 21:43:46.06 ID:5GzTmkIQ0.net
反復文のブロック外で使わない変数を、反復文の外で宣言しなければならない今までの仕様がむしろおかしい。
あと中で宣言すれば変数名ijklmn,,,なんて自体も避けれる。多重ループでなければ。

910 :デフォルトの名無しさん :2019/01/30(水) 21:53:53.32 ID:fRt/VtGE0.net
for での変数宣言は // の単一行コメントと同じ程度には使うかな。

むしろ変数名が __cnt_foo なのが気になる。2つの下線で始まってる部分。

__cnt_foo を宣言だけして、初期化してないのも怖いなぁ。
でも、今お手元のgccで試したところ、エラーも警告も出ないんだね。


あと、これは投稿番号904になるつもりだが、実際どうかな?

911 :デフォルトの名無しさん :2019/01/30(水) 22:37:01.37 ID:yhwdEVRM0.net
>>910
ブラウザで見てるが,レス番号は904だ。
あと初期化は単に書き忘れただけw

「2つの下線で始まる函数や変数は局所使用」
って結構いろんなプロジェクトで(OSSでもたまに)
みかけるんだけど,変かしら。

912 :デフォルトの名無しさん :2019/01/30(水) 22:48:12.86 ID:HCwEhiL7a.net
>>911
処理系で予約されてるんじゃなかったかな

913 :デフォルトの名無しさん :2019/01/30(水) 23:09:19.54 ID:TJoXpOJw0.net
>>911
_で始まる変数やマクロは原則予約語で使う表記になるから控えた方が良いって話だったような

914 :デフォルトの名無しさん :2019/01/31(木) 04:33:42.98 ID:9oWu7LhB0.net
>>911
うん、変だ
下線2つで始めるのは衝突を最高レベルに警戒する場合の不自然なスタイルで
たいていはスコープが効かないマクロやビルトインで何かするときだ

何の変哲もない局所変数でそんなことするのはひねくれ者だ

915 :デフォルトの名無しさん :2019/01/31(木) 04:59:33.42 ID:aHTkbrhz0.net
素直にこう書けばいいんだよ

for (int i = 0; i < 42; i++) {

916 :デフォルトの名無しさん :2019/01/31(木) 07:35:09.17 ID:9oWu7LhB0.net
衝突を避けている識別子たちを、わざわざ追いかけていく、当たり屋みたいな奇行はよせ

917 :デフォルトの名無しさん :2019/01/31(木) 08:34:51.69 ID:ANKnOfTnM.net
>>911
それはコンパイラやライブラリのソースコードだったか目が霞んでたんじゃないか?
アンダースコア2つはどんな場所でも予約されている

918 :デフォルトの名無しさん :2019/01/31(木) 10:01:39.25 ID:2IY59Hh/0.net
わたしがスペシャル変数と呼んでる一連のアンダーバー付きの変数はプログラミング業界で取り返しのつかないほど広まってる

919 :デフォルトの名無しさん :2019/01/31(木) 13:13:58.47 ID:JEItRzDdM.net
Python「……」

920 :デフォルトの名無しさん :2019/01/31(木) 16:20:12.34 ID:2v9wwy3D0.net
世界統一変数名が必要なんだよね。でもあそこと、あそそこが悪さする。

921 :デフォルトの名無しさん :2019/01/31(木) 16:52:59.91 ID:hLsI8bIs0.net
スーパーグローバル変数「___________________GET!!!!!」

922 :デフォルトの名無しさん :2019/01/31(木) 16:54:01.34 ID:hLsI8bIs0.net
すまん$が抜けてた

923 :デフォルトの名無しさん :2019/02/02(土) 19:10:56.37 ID:6Psw+wcJ0.net
汎用大域ループカウンタを宣言しておけばええんや

924 :デフォルトの名無しさん :2019/02/02(土) 22:15:48.72 ID:5ka5WtNb0.net
CX

925 :デフォルトの名無しさん :2019/02/03(日) 16:08:26.01 ID:Z/smOlQY0.net
じゃぁ、変数名が I 〜 N で始まる場合は自動的に整数変数と見て、
宣言せずに使えるようにしよう。

926 :デフォルトの名無しさん :2019/02/03(日) 17:48:04.65 ID:JQdPtia00.net
もうちょっとボカしてくれれば面白いものを。

927 :デフォルトの名無しさん :2019/02/03(日) 17:56:15.17 ID:DVXBklBr0.net
>>925
昔そんな言語なかったっけ?言語と言うよりはそういう特殊仕様が実装された実行環境かな。なんとなくBASICとかであったような気がするんだが。
(もしかすると40年ぐらい前のマイコン用に作られた言語かも知れない。こういうのはバイト数減らすのに都合が良いから)

928 :デフォルトの名無しさん :2019/02/03(日) 18:04:56.82 ID:UmkqfD+A0.net
由緒正しきBASICはそもそも変数宣言なんていらん。

929 :デフォルトの名無しさん :2019/02/03(日) 18:09:15.27 ID:RfDSwLa60.net
BasicだとDEFINTなんてあったな
宣言無しで型が決まるのはもう少し古い言語だな

930 : :2019/02/03(日) 18:18:49.02 ID:t4xt++QjH.net
>>928
DIM

931 :デフォルトの名無しさん :2019/02/03(日) 18:42:43.82 ID:v3/qMBNz0.net
>>927
Fortran だね
Cが教育課程に採用される前の言語

932 :デフォルトの名無しさん :2019/02/03(日) 18:56:42.51 ID:RfDSwLa60.net
I、J、Kをループ変数に使うというのは
その辺りからの伝統というかしきたりだったね

933 :デフォルトの名無しさん :2019/02/03(日) 18:58:36.52 ID:Q6V8DKqV0.net
>>927
FORTRANだろ

934 :デフォルトの名無しさん :2019/02/03(日) 19:11:35.29 ID:fibfEOKo0.net
ここの住民が言語作ったら良い言語できそうだな
あ、グローバル変数とvarとletは無しでお願いしますね

935 :デフォルトの名無しさん :2019/02/03(日) 19:17:13.15 ID:RfDSwLa60.net
変数使わない言語がいいな

936 :デフォルトの名無しさん :2019/02/03(日) 19:22:06.40 ID:DVXBklBr0.net
>>931>>933
あ、そうか。そういやそうだったね。すっかり忘れてた。

937 :デフォルトの名無しさん :2019/02/03(日) 19:23:53.89 ID:RfDSwLa60.net
「Fortran、再起動!」
「出撃!」

938 :デフォルトの名無しさん :2019/02/03(日) 19:27:53.77 ID:DdA3Wm74M.net
>>935
forthとか?

939 :デフォルトの名無しさん :2019/02/03(日) 19:35:40.13 ID:fibfEOKo0.net
>>935 じゃあ全部定数にしよう(暴論)

940 :デフォルトの名無しさん :2019/02/03(日) 19:56:55.85 ID:UmkqfD+A0.net
>>938
スタックも広義の変数なような?

llvmでは一度代入した変数は書き換えない(全て準定数)って聞いたけど、ループ変数なんか値書き換えないとやってられないような?

941 :デフォルトの名無しさん :2019/02/03(日) 20:08:52.98 ID:Q6V8DKqV0.net
>>938
流石にForthにも変数はあるよ

942 :デフォルトの名無しさん :2019/02/03(日) 20:59:31.07 ID:DdA3Wm74M.net
>>941
>>935は変数使わない言語って言ってるんで。
forthに変数が無いとは言ってないよ。
でもちょっとしたことなら全部スタックで済ましちゃうでしょ?そういう言語だし。

943 :デフォルトの名無しさん :2019/02/03(日) 21:36:40.63 ID:o+jOfHnE0.net
llvmにも書き換え可能なメモリを確保する命令はある。
それでループ変数を作っておいて、書き換え不可変数への置き換えは最適化におまかせする感じ。

944 :デフォルトの名無しさん :2019/02/03(日) 22:05:11.19 ID:Q6V8DKqV0.net
>>942
アスペ?

945 :デフォルトの名無しさん :2019/02/03(日) 22:10:21.16 ID:DdA3Wm74M.net
突然の自己紹介??

946 :デフォルトの名無しさん :2019/02/04(月) 02:10:59.10 ID:0dEMPpXZ0.net
最近
「私たちのアポロ計画」
という映画みたら、黒人のBBAがFortran使っててドヤ顔してたわw
Fortranごとき中高生でもできるのにね。

947 :デフォルトの名無しさん :2019/02/04(月) 04:58:45.67 ID:18M/gPzw0.net
>>945
ああ、単に煽りたいだけの人なのね

948 :デフォルトの名無しさん :2019/02/04(月) 06:55:51.99 ID:eH/He5cH0.net
もっとボカせばいいのに(しつこい)

949 :919 :2019/02/04(月) 08:07:42.85 ID:01AVniBC0.net
>>926 (== 942) こういうネタを投稿するときは
どのくらいボカすか、ってさじ加減が難しいんだよ。

あからさま過ぎれば、知識の豊富な人には物足りないし、
おとなし過ぎると、何の話かサッパリ分からんって人が多くなる。
今回は間口を広げる方針、分かりやすさ優先だったと解釈してくれ。

950 :デフォルトの名無しさん :2019/02/04(月) 10:30:19.38 ID:BGg5R2c70.net
>>946
じゃあCは中高生には使えんとでも言いたいのか? おめでたいやつだな

951 :デフォルトの名無しさん :2019/02/04(月) 10:51:20.21 ID:958Z8DnZ0.net
#include <stdio.h>
#include <stdlib.h>
FILE *fp;
int c;
void main() {
fp=fopen("HOGE.LOG", "w");
fputs("このプログラムは何かまずい?まずいとしたらどうなる?",fp);
exit(c);}

952 :デフォルトの名無しさん :2019/02/04(月) 11:05:37.79 ID:BGg5R2c70.net
ばかでけえ釣り針だな
クジラでも狙ってるのか?

953 :デフォルトの名無しさん :2019/02/04(月) 11:06:18.82 ID:TOy5lCxb0.net
あーあ釣られちゃった
スレめんどくさくしないでね

954 :デフォルトの名無しさん :2019/02/04(月) 12:51:43.30 ID:i3TKqgTm0.net
速報 ワイ どこに釣り針が仕掛けられているのか分からず

955 :デフォルトの名無しさん :2019/02/04(月) 13:17:46.57 ID:7h07tci2x.net
釣り針にかかってみる。
main引数のvoidを省略するのは非標準なのでダメって話じゃないのん?

956 :デフォルトの名無しさん :2019/02/04(月) 13:17:49.13 ID:eH/He5cH0.net
>>954
cが初期化されてないんでしょ(鼻ホジ)

957 :デフォルトの名無しさん :2019/02/04(月) 13:23:03.13 ID:h1bt6e1C0.net
明示しなくても0に初期化されない?

958 :デフォルトの名無しさん :2019/02/04(月) 13:44:12.81 ID:eH/He5cH0.net
それはmain函数の戻り値の処理を省いても0が返る,みたいな危うさがない?
……知らんけど

959 :デフォルトの名無しさん :2019/02/04(月) 13:46:18.98 ID:h1bt6e1C0.net
気になる点
mainの引数指定がない
fopenが成功したかチェックしていない
fcloseしていない

960 :デフォルトの名無しさん :2019/02/04(月) 16:13:18.04 ID:BGg5R2c70.net
>>955
♪授業中あくびしてたら口がでっかくなっちまった〜

961 :デフォルトの名無しさん :2019/02/04(月) 17:53:18.29 ID:958Z8DnZ0.net
大域変数は、仕様上、0で初期化される事が保証されてる。
mainが実質的にintを返しているのと同じ状態、void指定からexit()によって値を返す形式も許容範囲内。
exit()は閉じてないストリームを閉じる処理も含んでいる。

mainの引数指定していないのは、GCCでも警告すら出ないで通った。
void指定したのと同一のコード吐き出すけど、これ本当に何かまずいの?

962 :デフォルトの名無しさん :2019/02/04(月) 18:24:32.77 ID:8k8r0y3l0.net
>>961
mainの引数なしはギリギリセーフ
戻り値なしはギリギリチョップ

963 :デフォルトの名無しさん :2019/02/04(月) 18:49:29.84 ID:jFZpHwREM.net
>>959
> fopenが成功したかチェックしていない
fputsもな

964 :デフォルトの名無しさん :2019/02/04(月) 18:50:42.11 ID:h1bt6e1C0.net
ううむ
セーフとか言う意味じゃ無く、
気持ち的に落ち着かないと
言った方が良いかな

965 : :2019/02/04(月) 19:00:36.55 ID:CLpqTC7n0.net
個人的には
int main()
は許容範囲です、でも
void main(int argc, char **argv)
は許容できません

理由は、main() が接続(リンク)するスタートアップは、main() の内容がどんなものであれ変わらないから
スタートアップ(呼び出し側)が固定であるのならば、呼び出され側のシグネチャーも固定であるべきと考えます
スタートアップが仮定する引数と返り値を、main() が変えていい、とか考えられない暴挙だと思うのです

私がコンパイラを書くことが万が一あったとしたら、void main() はコンパイルエラーにします…

966 :デフォルトの名無しさん :2019/02/04(月) 19:22:17.76 ID:X0TXiuYZ0.net
>>965
前者はC99ぐらいから廃止予定だったけど後者は規格にちゃんとあるんじゃなかっただろうか?

967 :デフォルトの名無しさん :2019/02/04(月) 20:04:17.97 ID:zvEiFsrUa.net
>>951
まずくないけど変な感じはする。
それと本当なら出力の最後に改行が必要なのではないか?
fclose()がないが、exit()するならその中でやられている筈。しかし自分でやった方が良いとは思う。

968 :デフォルトの名無しさん :2019/02/04(月) 20:05:29.32 ID:T5zgWCiB0.net
exit on free や exit on (f)close の臭いがする

969 : :2019/02/04(月) 20:28:02.23 ID:CLpqTC7n0.net
>>966
引数の指定なし、は今でもありえるでしょうね、廃止予定とはきいていません
void main() は、ISO/IEC 9899/1999 5.1.2.2.1 にて陽に記述はありません
(ただし、or in some other implementation-defined manner. という注記はありますけれども)

970 :デフォルトの名無しさん :2019/02/04(月) 20:29:04.76 ID:jUExJMkq0.net
AVRやPICといったマイコンでの話。

符号付整数型を文字列に変換しようと思ってるんだけど
定番のsprintfはこれら8bitマイコンにはややメモリを食いすぎて実装するのは厳しい。

代わりにメモリの消費量が少ないitoaという関数を使おうかと思ってるんだけど
itoaよりさらにメモリを節約できる方法ってあったりする?

971 :デフォルトの名無しさん :2019/02/04(月) 20:40:33.65 ID:8k8r0y3l0.net
>>970
7行printf があったので、それを改造して使ってたな
自分だけが使う分には便利だった

972 :さまよえる蟻人間 :2019/02/04(月) 20:50:44.05 ID:MwdPLMKS0.net
>>970
3桁くらいなら、わり算と余りが使えるかも。

973 :デフォルトの名無しさん :2019/02/04(月) 20:55:36.25 ID:BGg5R2c70.net
>>965
その論法では()と(int, char**)が共存しえないな

974 :デフォルトの名無しさん :2019/02/04(月) 20:58:12.71 ID:01AVniBC0.net
>>951 は「行儀が(とても)悪いけど、明確な規格違反も含んでいない」っていう
引っ掛け問題なんじゃないか?
いくつか気になる点があって調べたけど、どれも規格違反とまでは言えなかった。

>>970
実際に不都合が発生するまではライブラリの関数を使うべし、
ってのがプログラミングの定石だけど、それは置いといて。
itoa() は標準関数じゃないみたいだから、独自ライブラリなら
関数のソースも付属してるんじゃないかな。
自分が使う数値の範囲が限定されるなら、付属ソースを参考に
専用の「数値→文字列」の変換関数を作るのも簡単かと。
(コードの著作権とかの方面は考慮してないので御注意)

975 :デフォルトの名無しさん :2019/02/04(月) 22:30:53.53 ID:jUExJMkq0.net
>>971
>>972
>>974
ありがとう、itoa関数よりもっとコンパクトな関数の自作に挑戦してみる(`・ω・´)

976 :さまよえる蟻人間 :2019/02/04(月) 22:36:37.94 ID:A8/6icsqd.net
int n = 123;
char a[4];
a[0] = '0' + (n / 100) % 10;
a[1] = '0' + (n / 10) % 10;
a[2] = '0' + (n / 1) % 10;
a[3] = 0;

977 :デフォルトの名無しさん :2019/02/04(月) 22:42:47.31 ID:jUExJMkq0.net
>>976
おお、なんか軽そう!

978 :デフォルトの名無しさん :2019/02/04(月) 23:30:45.04 ID:X0TXiuYZ0.net
割り算や剰余は8ビットマイコンでは重いのでBCD変換後4ビット毎に文字列化する方法もある。
高速なBCD変換はググれば出てくる。

979 :デフォルトの名無しさん :2019/02/05(火) 09:26:29.85 ID:NCwCR2JIa.net
>>970
桁数固定で良いなら自分で下の桁から10で割った余りに'0'足して10で割るってのを桁数分だけ繰り返せば良いのでは?

980 :デフォルトの名無しさん :2019/02/05(火) 09:27:26.26 ID:NCwCR2JIa.net
うう。リロードしたら答えが全て書いてあるではないか。orz

981 :デフォルトの名無しさん :2019/02/05(火) 19:48:53.03 ID:ksVxO8O00.net
https://mevius.5ch.net/test/read.cgi/gamedev/1028273462/

1 名前:名前は開発中のものです。[] 投稿日:02/08/02(金) 16:31 ID:GWrer4oY
C言語でゲームって作れるわけ?
あんなの文章表示させられるだけでしょ?


255 名前:名前は開発中のものです。[] 投稿日:2017/02/05(日) 09:12:26.60 ID:AoXQwlvR [1/2]
くっそ懐かしいスレまだあったのか建てたの高校生だった頃の俺やぞwww
ちな今銀行のATMのシステム開発技術者。なんてアホなスレ建ててたんだ俺は・・・



ちょっとジーンとしたw

982 :デフォルトの名無しさん :2019/02/05(火) 20:36:40.97 ID:4jJQIC2L0.net
2002年w
暇なのでログ読ませていただきますw

983 :デフォルトの名無しさん :2019/02/05(火) 21:10:30.19 ID:or2LkC5v0.net
https://paiza.io/projects/ocopHn6TvkpJu4a--2xAig

初心者なんだが質問したい
もしスレチだったら無視してくれ

coding ground でやってたのだがコンパイルは通ったんだけど正常に実行されない。自分ではよくわからなかったので誰が暇な人いたら教えてほしい…
必要な情報あれば送る。

984 :デフォルトの名無しさん :2019/02/05(火) 21:50:01.63 ID:nQ1PAxEF0.net
>>983
文字列に改行文字がないのが原因では?

985 :デフォルトの名無しさん :2019/02/05(火) 22:00:33.04 ID:wHlrTA+U0.net
文字列は==では比較できない
#include <string.h>してstrcmp()を使いましょう

986 :デフォルトの名無しさん :2019/02/05(火) 22:05:58.12 ID:nQ1PAxEF0.net
>>985
マジだ見えてなかったわ

987 :デフォルトの名無しさん :2019/02/06(水) 02:22:12.53 ID:yGh9lkMb0.net
https://paiza.io/projects/F0I33_Di-fagw1kL49BVoQ

サンクス
strcmpを使ってみたのだがまだダメなようだ
正常にbreakできない
使い方が間違っているのかもしれない

988 :デフォルトの名無しさん :2019/02/06(水) 02:37:12.10 ID:Iaau3S1w0.net
>>987
よく読んでないけど
とりあえずfor文は100ループしたら駄目じゃないかい?
p回のような

989 :デフォルトの名無しさん :2019/02/06(水) 03:09:41.56 ID:jnwpwdAT0.net
>>987
そのプログラム問題ないぞ。単に入力に 0 が入ってない(というか何もない)からうまく行かないだけ。
下の所の「入力」タブを押して標準入力から読ませる文字列を入れておいてから実行すればいい。
例えばこんな風にだ。(これは入力の所に文字列セットしただけ。プログラム変更なし)。
https://paiza.io/projects/sZbQ6S7tfTLKqC_CEpG_8w

990 :デフォルトの名無しさん :2019/02/06(水) 03:16:24.22 ID:jnwpwdAT0.net
ま、しかし、入力が何もなしでいきなり EOF になった場合を想定していないのはまずいプログラムであるとは思う。

991 :デフォルトの名無しさん :2019/02/06(水) 04:30:43.46 ID:FgEjt1k50.net
Cが高速な理由ってコンパイラが出力バイナリの速度に重点を置いていて
かつそのコンパイラが長年の歴史をかけて磨かれてきたから。っていうのは間違ってるかな

Cの言語構造そのものに高速性が見出せない。
直にx86アセンブラを書いても速度が遅かったりするもん。

992 :デフォルトの名無しさん :2019/02/06(水) 04:57:27.49 ID:eUM592Vs0.net
ループから抜けるときに goto使ったらダメなんですか?

for (...) {
for (...) {
if (...) goto LOOP_EXIT;
}
}
LOOP_EXIT:

こういう感じで書いたら先輩に怒られました。
フラグ見てループ抜けるように修正しろと。
指示されたので従いますけど、どうしてダメなのかよく分かりません。

どなたか納得するような理由をご存知でしょうか?

993 :デフォルトの名無しさん :2019/02/06(水) 06:01:54.08 ID:erbfwmnV0.net
goto全否定は宗教みたいなもん。
万人が納得できるような理由はないと思う。
BASIC時代のスパゲッティーなプログラムの反省から制御の構造化を崩すようなgotoとcontinueは禁忌されることが多い。
ホントはここぞって言う時には使うべきなんだけどね。

994 :デフォルトの名無しさん :2019/02/06(水) 06:27:31.89 ID:1SbGZlcV0.net
>>981
レス番が0xffなのも草

995 :デフォルトの名無しさん :2019/02/06(水) 06:29:29.34 ID:1SbGZlcV0.net
>>993
continueはどのように構造化を崩すんだ?
ループの外へ出てしまうgotoやbreakとはちょっと違うと思うが

996 :デフォルトの名無しさん :2019/02/06(水) 07:45:48.33 ID:5UWRxIqtM.net
>>995
break文もそうだが、continueは構造化を無視してジャンプするという範疇に入るそうだ。
ま、宗教だね。

997 :デフォルトの名無しさん :2019/02/06(水) 08:30:46.09 ID:QSRxZnkxM.net
まあ初心者相手ならgotoには蓋をしておいて、15の誕生日になったら開けなさいって言っておいたほうがよいとは思う

998 :デフォルトの名無しさん :2019/02/06(水) 08:47:44.10 ID:ko7vbQjm0.net
Ruby にも、多重ループを一気に抜ける構文がある

catch(:hoge_break) do
3.times do |i|
4.times do |j|
throw(:hoge_break) if hoge
end
end
end

これを認めない人は毎回、継続フラグを判断し続けなければならない。
漏れはむしろ、こちらの書き方の方が、バグる気がする

999 :デフォルトの名無しさん :2019/02/06(水) 08:59:54.85 ID:2/r6PXjM0.net
並列実行させたいときループの途中に戻りたいと思ふ。

1000 :デフォルトの名無しさん :2019/02/06(水) 09:29:07.75 ID:6h2IvBM+0.net
>>994
その発送はなかったわw

1001 :デフォルトの名無しさん :2019/02/06(水) 09:56:36.40 ID:LaX4f5p90.net
本日配達の予定です。

1002 :デフォルトの名無しさん :2019/02/06(水) 12:30:20.04 ID:5DsLQSpRM.net
>>999
コルーチンやね
いくつかの言語でサポートされてるけどまあ今どきならマルチスレッド+同期化でやりたいことはできる
https://ja.m.wikipedia.org/wiki/コルーチン

1003 :デフォルトの名無しさん :2019/02/06(水) 12:30:56.55 ID:Zn5BTEOaa.net
>>991
C以外はCと同じようなことをしようとしてもコードが沢山作られて結果的に遅くなるって事だと思うが。(ただし人力で最適化してあるアセンブラ等は除く)。
昔は本当にそうだったように思う。高級言語なのにコンパクトなコード作るのはCぐらいじゃないか?今は知らないけどね。
それと今はインタプリタやVMで実行するのが一般的なJavaのような言語でも実行時に内部でコンパイルしたりJITつかったり工夫がされてるので速度は速くなる事はあるかも。
コードは内部的に大きくなってメモリ食ってるかも知れないけどね。小規模な組み込み用とかでなければ問題にならないと思う。

1004 :デフォルトの名無しさん :2019/02/06(水) 12:41:47.95 ID:CtZpHCTya.net
longjmpとか昔からあると思うよ

1005 :デフォルトの名無しさん :2019/02/06(水) 12:44:25.18 ID:Zn5BTEOaa.net
>>992
いや、いいよ別に。後でそれで混乱することにならないとか、あるいは使った方がより見やすく分かりやすくなるなら使えばいいのでは?
C言語はtry catch みたいなのもないし、トリッキーな方法でないものをあるかのように見せかけるプログラム作るよりはサクッと goto 使っちゃった方が良いと思う。

その先輩はそのような信仰を持っているか、または会社ならばそこでのコーディング規約で使わない事にしてあるんだろう。

1006 :デフォルトの名無しさん :2019/02/06(水) 12:46:40.08 ID:zkk6azTG0.net


1007 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1007
306 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★