X



C言語なら俺に聞け 151
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (ワッチョイ cf8f-fy95)
垢版 |
2019/04/02(火) 11:23:37.62ID:SQXqRaAc0
!extend:checked:vvvvv:1000:512
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/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0004デフォルトの名無しさん (ワッチョイ 1f19-9gjM)
垢版 |
2019/04/02(火) 16:37:14.52ID:VBVVrqHU0
前スレ977のリンクが404ぽいので
魚拓から復元してみた
https://ideone.com/IhBGrr

977 名前:デフォルトの名無しさん (アウアウエー Sa3f-XwTE)[] 投稿日:2019/04/01(月) 21:33:02.04 ID:v6mAk26Pa [1/3]
「要素型がint型で要素数がnの配列を受け取って、
全要素に添字と同じ値を代入する関数set_idx」を作成しました。
http://codepad.org/krsZoljq

配列aの要素数はマクロ定義で#define NUMBER 10とし、
問題なく動作しました。
ところが、この要素数10を60に書き換えてみたところ、
コンパイルされたexeファイルを実行しても動作しません。
コンパイラはMinGW(gcc)です。
思い当たる原因を教えていただけないでしょうか。
0005前スレ977 (アウアウエー Sa3f-XwTE)
垢版 |
2019/04/02(火) 20:52:18.32ID:JwQjLW9ya
>>4
codepadが消えてしまっていたのですね、
復元ありがとうございます。
当初は16行目を
int a[] = {0};
と書いていたため上手く動作せず質問した次第です。

前スレで色々とレス頂きありがとうございました。
プログラムを書く際にバッファオーバーランの危険性を考慮する必要があることすら知らないレベルなので、
メモリの使い方を念頭において学習していきます。
C言語は諦めた方がよいというレスもありましたが、
センスがないのは重々承知の上で、腹を括って勉強していくつもりです。
0006デフォルトの名無しさん (ワッチョイ 0f8f-068C)
垢版 |
2019/04/03(水) 00:01:40.97ID:qKRJca2S0
>>5
いえ
すみません

「呼び出し元で配列長を管理出来ている。問題はない」と言いうるようです /* むしろ free し忘れる方が問題か */
誤解・不適切な部分があったこと、申し訳なく存じます

色々大変かも知れませんが、頑張ってください
0009デフォルトの名無しさん (ワッチョイ 1f19-9gjM)
垢版 |
2019/04/03(水) 17:06:47.20ID:jUO0vRXi0
全く以てくだらんな
何言語だろうが関係ねえ話で
習得できなかったやつの言い訳を集めただけの駄文だ

もし「初心者」がここを見ているなら一言いいたい
【 あ ん な の 忘 れ ろ 】
プログラム言語に限らず人生すべてに影響する有害な集団催眠だ
0010デフォルトの名無しさん (ワンミングク MMbf-QHAD)
垢版 |
2019/04/03(水) 19:21:17.48ID:6tuZKWrYM
既存のソフト(dll)を引き継いだのですが、そのdll内でバイナリファイルをリードしています。
_open(xxx, _O_BINARY, _S_IREAD) しているのですが、複数のプロセスが同じタイミングでアクセスしても排他処理されないですよね?
どうもうまく読めてないのが原因かもしれない障害が発生して困っています。
どうすれば排他処理できるでしょうか。
0014デフォルトの名無しさん (ワンミングク MMbf-QHAD)
垢版 |
2019/04/03(水) 20:30:58.20ID:6tuZKWrYM
レスありがとございます。
後だしですが、書き込みはされないです。そこまでかんがえてなかったですが。
リードだけなら大丈夫そうですね。だったら他のとこに問題があるのかな・・・
0015デフォルトの名無しさん (アウアウウー Sa0f-dxKi)
垢版 |
2019/04/03(水) 20:57:30.11ID:GUjlsyjta
ファイル書いてる最中に読まないようにそのライブラリを使う側と書き込みする側のプログラムでロック掛けるようにするぐらいしか方法ないのでは?
ライブラリのソースもあって自分でも直せるというのなら自分でその辺改造しちゃえば良いんだろうけど。それだったらわざわざここに質問書かんよな?
0020デフォルトの名無しさん (アウアウウー Sac5-T5wd)
垢版 |
2019/04/08(月) 10:46:04.23ID:slzfC4/wa
ここどう?
https://www.jdoodle.com/
色んな言語使えるようだ。もちろんCもある。
0023デフォルトの名無しさん (ワッチョイ 7d02-w1lf)
垢版 |
2019/04/08(月) 20:55:25.55ID:26lZNeBT0
セキュリティの為にfoo_sが推奨されてるんだから、ガッコウのコードの方を変えるべきでは?
何年経ったと思ってるんだ。
0025はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c63e-k8NZ)
垢版 |
2019/04/08(月) 21:17:15.17ID:TICLg0mt0
>>23
_s 系の関数って言語仕様上はオプショナルでしょ。
安全でない関数の中で明確に仕様から削除されたのは
gets だけのはずだし、もちろん、安全性を意識させるのは
望ましいけど、どこでも _s 系の関数を使えるわけじゃない。

あくまでもオプショナルだから >>22 は「実装って」という聞き方をしているのだと思うぞ。
0026 ◆mxojKcXMM. (ワッチョイ 6247-BZhk)
垢版 |
2019/04/08(月) 22:00:58.21ID:PMJ1/1Ak0
>>25
Microsoft のコンパイラ以外では使えない、と聞いているのも納得がいかないのです、本当によいものなら、なぜ _s 系が移植されないのでしょうか…
0028 ◆QZaw55cn4c (ワッチョイ 6247-BZhk)
垢版 |
2019/04/08(月) 22:27:24.57ID:PMJ1/1Ak0
>>27
失礼。>>26>>22 への直接または間接の回答を意図しておりません
とある「有用な」実装が広く使われるべき、という意見に対して、microsoft のコンパイラ環境でしか使えない実装を教育目的で強要してもいいのか、というか、そもそもそんなに「有用」な実装なのですか?本当ですか?
という視点で >>22 を強く批判する内容です
0029はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c63e-k8NZ)
垢版 |
2019/04/08(月) 22:35:39.51ID:TICLg0mt0
>>28
_s 系の関数はオプショナルとは言えども規格にある存在なので、
Visual C++ は例のひとつとして挙がっているにすぎません。
間違いなくありがちな問題を軽減しますので、
使える処理系ならば使うように誘導するのは合理的です。
0030 ◆QZaw55cn4c (ワッチョイ 6247-BZhk)
垢版 |
2019/04/08(月) 23:24:16.54ID:PMJ1/1Ak0
>>29
お手数をおかけし恐縮ですが
「規格にある存在」というその規格をご教示願えますか?
手元にある ISO/IEC 9899:1999 には見えないようですが…
0036デフォルトの名無しさん (ワッチョイ ee8f-hWz0)
垢版 |
2019/04/09(火) 07:47:37.12ID:lax+sHP30
>>22
> fprintf_s みたいな
> foo_s 系の関数実装って増えてるん?

「いや増えてない」←わかる
「俺は foo_s みたいな関数が嫌い」←わかる
「俺は foo_s みたいな関数が嫌いだから >>22 を強く批判する」←全く分からない

誰か解説してくれるのだろうか



私は「ガッコウのセンセイ」でもないし「ガッコウの教材」の著者でもないから何とも
新学期だから知恵袋とかに質問増えそうじゃん?
0041デフォルトの名無しさん (アウアウウー Sac5-T5wd)
垢版 |
2019/04/09(火) 13:13:25.92ID:xq+Mg1lAa
漢なら localtime_r()
0053 ◆QZaw55cn4c (ワッチョイ 6247-BZhk)
垢版 |
2019/04/09(火) 21:52:14.86ID:ssMdw0XF0
>>33
実は K&R2 のみが正義、K&R2 こそ必要にしてかつ十分、という立場なので、そんな私が C99 を推挙した時点で、すでにして大幅に compromise しているつもりなのでした…
0056 ◆QZaw55cn4c (ワッチョイ 6247-BZhk)
垢版 |
2019/04/09(火) 22:25:14.01ID:ssMdw0XF0
>>54
>K&R2って妥協の産物

それも理解できます
K&R2 の最大の改悪部分は「構造体の実体渡しができること」
配列の実体を丸まま関数に渡せないくせに、構造体では出来るって意味わかんない
もしかして
struct S {
int a[65536];
};
とかいう構造体があったら、それを全部スタックに載せるつもりなのか?そういうことをする奴が現れる可能性を考えたのか?と小一時間問い詰めたい気分になりました…
0063 ◆QZaw55cn4c (ワッチョイ 6247-BZhk)
垢版 |
2019/04/10(水) 01:49:22.11ID:57hoitEO0
>>58
構造体といえどもアドレスを渡すのが真に正しく、配列なら言語仕様でそれを強要される、なぜ構造体には甘い顔を見せる必要があるのか?
0064はちみつ餃子 ◆8X2XSCHEME (ワッチョイ c63e-k8NZ)
垢版 |
2019/04/10(水) 04:59:47.74ID:mOo8C1VR0
>>56
極端なことが「できてしまう」のが問題ということですか? そもそも C なんてそんなものでしょう。
状況を見て適当に使い分けるべきで、駄目な使い方をしたら何だって駄目ですよ。
0065デフォルトの名無しさん (ワッチョイ ee8f-hWz0)
垢版 |
2019/04/10(水) 06:18:28.03ID:qyNiIlQC0
>>63
ド素人の勝手な推測だけれども

「配列だとマジでサイズどんだけか分かったもんじゃないじゃん」
「構造体のメンバ」に配列が来る場合はあるけど、そのサイズは多寡が知れてるじゃん」

という考えかもアリかもしんない
0068デフォルトの名無しさん (アウアウウー Sac5-T5wd)
垢版 |
2019/04/10(水) 09:42:54.83ID:G/tPYfHxa
>>56
昔々初心者の頃にやっちゃって物凄く遅くなって気づいた事があったw
0069デフォルトの名無しさん (アウアウウー Sac5-T5wd)
垢版 |
2019/04/10(水) 09:49:26.10ID:G/tPYfHxa
構造体も const で渡されたらこっそりポインタ使って読むだけのアクセスするコード作っちゃっても良いのにな。
マルチスレッドで動くプログラムの時に死ぬかも知れんが。
0071デフォルトの名無しさん (ワッチョイ 02a5-lO4n)
垢版 |
2019/04/10(水) 10:42:39.87ID:ryP68qDF0
現代教えられてる言語で60年代中期の古さを引きずってる言語だからだ

配列に対してsize適用すれば長さを取れるのは現代じゃあ普通で、
取れないC言語のほうがおかしい、
これ、誤解でも何でもないからな
0073デフォルトの名無しさん (ワッチョイ 912d-iMOx)
垢版 |
2019/04/10(水) 11:14:25.33ID:9YALwuYf0
>>58
事実上、構造体はほとんどの場合ポインタで渡すよな
実体で渡すという特殊なケースがデフォになってて
ポインタで渡すという主要な使い方でアドレス演算子が必須って
おかしくね?
0075デフォルトの名無しさん (アウアウウー Sac5-T5wd)
垢版 |
2019/04/10(水) 11:23:36.81ID:7gi5m8N9a
そして「C言語はおかしい」と満場一致で結論が出て、また新たな言語が作られるのであった。

        完
0076デフォルトの名無しさん (ワッチョイ 7d02-w1lf)
垢版 |
2019/04/10(水) 11:25:19.17ID:lv7m7vwC0
ここが変だよC言語って本が昔売られてたな。。。
0095デフォルトの名無しさん (ワッチョイ ee8f-hWz0)
垢版 |
2019/04/10(水) 17:20:34.39ID:qyNiIlQC0
記憶領域確保に失敗したとき
落ちないように頑張ってくれるのと
即落ちるのと

どっちがどうだったか忘れた
最近読んだどっかに書いてあった筈だけど思い出せん…

x86 限定で良いので挙動とコーディングの関係に心当たりのある方御教示ねがいます。。。
0112デフォルトの名無しさん (ワッチョイ ee8f-hWz0)
垢版 |
2019/04/10(水) 21:26:31.69ID:qyNiIlQC0
いや
仕事で使ってませんから
そもそも「毎回」っていうほど書いてませんし

何らかのツールで勝手に入るので「敢えて書く必要性がない」ということなのでしょうか
それとも一律に「書くな」というルールが定着している組織が実在しているのでしょうか
0114デフォルトの名無しさん (ワッチョイ ee8f-hWz0)
垢版 |
2019/04/10(水) 21:37:03.36ID:qyNiIlQC0
>>104 にて
scanf("%d", &x);

と書かれているのですが、ターミナルから9を80字入力されたらどうなさるおつもりなのでしょうか
また、signedともunsignedとも指定されておりませんが、その点はどのように汎用性を確保なさるのでしょうか
0122デフォルトの名無しさん (ワッチョイ 8b8f-ofH2)
垢版 |
2019/04/11(木) 00:04:19.55ID:SPJO7XdY0
>>121
> 例文:You shall die.
> 超訳:「死ね!」

さすがにそれは…

日本語の文章の方に "shall" は書かれてなかったもんで把握、と
示唆したつもりだったのですが、通じなかったようで、表現力につき反省する所しきりであります
0124デフォルトの名無しさん (ワッチョイ fb02-XGqV)
垢版 |
2019/04/11(木) 01:53:26.52ID:5ienNbe20
  *'``・* 。
  |     `*。
 ,。∩彡⌒ミ   *    みんなハゲにな〜れ
+  (´・ω・`) *。+゚
`*。 ヽ、  つ *゚*
 `・+。*・' ゚⊃ +゚
 ☆   ∪~ 。*゚
  `・+。*・ ゚
0125デフォルトの名無しさん (ワッチョイ 392d-XGqV)
垢版 |
2019/04/11(木) 07:54:50.71ID:YCq7KtVA0
>>118
4. 規格合致性
規格厳密合致プログラム(strictly conforming program)は,この規格で規定する言語機能及びライブラリ
だけを使用しなければならない(2)。さらに,いかなる未規定の動作,未定義の動作又は処理系定義の動作に依存する出力も生成してはならず,しかもどのような最低限の処理系限界も超えてはならない。

(2)規格厳密合致プログラムは,どの処理系でもサポートしているわけではない機能(附属書 F の中に例
がある。)を使うことができる。ただし,その機能を使うことができるのは,それが適切なマクロをもつ#ifdef 指令とそれに対応する#endif 指令とに囲まれている場合に限る。次に示すプログラム片がその例である。

#ifdef _ _STDC_IEC_559_ _ /* FE_UPWARD

が定義されている */

/* ... */

fesetround(FE_UPWARD);

/*

... */

#endif
0127 ◆QZaw55cn4c (ワッチョイ d347-yqpC)
垢版 |
2019/04/11(木) 20:58:24.95ID:mnND5pqz0
>>122
あくまで私見ですが、現代英語では will に単純に置き換えられるような shall の使い方はもうありえなく、
shall を使うのは shall を使う必然性があるから、だから、shall は辞書でいうところの「意志未来」であり、したがって shall を訳出しないのは不誠実な訳だとどうしても私は感じてしまいます…
0128デフォルトの名無しさん (ワッチョイ 8b8f-ofH2)
垢版 |
2019/04/11(木) 21:23:32.90ID:SPJO7XdY0
「英文読解」の場ではなかったので控えていたのですが

>>127
個人的には「こんなのを訳出させられた人は凄い」と思ってます

「原典は英語で日本語訳がある」もので「日本語訳が意味不明」の場合
原典で確認すると「訳出で明確ではない」部分が確認できるケースが多々あります

"shall" をどのように訳出するかは個人差ありますし
今回の箇所が「以前同じ文言があったので単純にコピペした」ものかどうかは確認していません


もちろん>>126さんが仰るように「強度の要請で助動詞を変える」ものもありえますが
C99の文書の場合は丁寧に "shall" の定義から書かれていますし、
何より "strictly conforming program" という表現は、明確に 4.5 での新情報です
0129デフォルトの名無しさん (トンモー MM4d-Ouf2)
垢版 |
2019/04/13(土) 04:36:48.17ID:/Uq84pFNM
昔の話。
若い頃K&Rの日本語版を買ってきて読み始めて、
間違いというか
サンプルとしてよろしくない
ところを見つけていた。

それが7年後に役立って
沢山仕事が入ってくるようになった。

本はキチンと読みましょう!
0132 ◆QZaw55cn4c (ワッチョイ d347-yqpC)
垢版 |
2019/04/14(日) 05:55:46.19ID:AVvjfIV70
>>131
「べし」が二人称主語のときは「当然〜するべき」「義務」をあらわすことが多いですね
ただしこの場合も、主観的な意見の場合・客観的な義務の場合の両方がありうるかもしれません
shall=べき、べし、というのはいい線いっていると思います
0133デフォルトの名無しさん (ワッチョイ 597b-/1Ht)
垢版 |
2019/04/14(日) 06:22:08.07ID:JgI3yl/w0
日常会話や文学なら "You shall die." を「汝死すべし」と訳して
原文のもつ「お前死んだ方がいいよ」と「お前はいつか死ぬであろう」の
両方のニュアンス(他の解釈もあるかも)を残すってのはアリだと思うけど、
技術的な文章では、複数の意味に取れる書き方はしないでしょ。
翻訳の読者が欲しい情報も、原文がどちらを意図してるのか、だろうし。
0138デフォルトの名無しさん (ワッチョイ 298f-Glgm)
垢版 |
2019/04/14(日) 09:54:03.65ID:/V8zrPr00
一年程度だが海外で仕事した経験のある俺にコメントさせてくれ。
shallにとくに意味はない。日本語に訳すのは難しいが方向性でいえば
汝死ぬ(shallなし)

汝はねぇ死ぬよ(shallあり)
かな。
つまり特に意味はない。特に強調してるわけでもないけど、つまり断定か。
0141 ◆QZaw55cn4c (ワッチョイ d347-yqpC)
垢版 |
2019/04/14(日) 10:50:12.57ID:AVvjfIV70
>>140
「意志未来」という言葉は辞書の言葉ですが、私の本意は >>121
つまり「規格」または「規格の書き手」が "You will die" という感情の含まれない淡白な表現を、それが実現するように強要する、それが "You shall die."
0142デフォルトの名無しさん (ワッチョイ 298f-Glgm)
垢版 |
2019/04/14(日) 11:15:43.43ID:/V8zrPr00
いや、ほんとに意味はないんだよ。書き手がなんか気持ち悪いからshallつけてるだけでshall抜きでもかわらん。
willとかshouldに比べてshallどうとかじゃなくて、willとかshouldがなかったらどうかを考えるべき。
0145デフォルトの名無しさん (ワッチョイ 818f-ofH2)
垢版 |
2019/04/14(日) 12:01:14.41ID:El+pt49w0
>>128
> 「英文読解」の場ではなかったので控えていたのですが
(中略)
> C99の文書の場合は丁寧に "shall" の定義から書かれています


これ以上、「C言語のスレ」として、どんな話題あるんですか
「ANSI C(なりC90なり)」「C95」「C11」を持ち出すなら意味があるかも知れませんが?
0147 ◆QZaw55cn4c (ワッチョイ d347-yqpC)
垢版 |
2019/04/14(日) 12:51:54.61ID:AVvjfIV70
>>144
その百人一首の上の句と下の句をつなげるように日本語と英語の一対一対応を増やしていくスタイルは、カルタが少ないうちはいいけれども腐るほど多くなったときに困りませんか?
でも、最終的には慣れればなれるほど自動的に丸暗記になるのだろうから(私も「you shall die =死ね」状態なのは事実)、語学に理屈付けは不要なのかもしれませんね…
0149デフォルトの名無しさん (アウアウウー Sa5d-clLQ)
垢版 |
2019/04/17(水) 19:18:17.08ID:xaCKxF64a
C言語で、配列を渡すときは&付けなくていいとありましたが
scanf("%c", &array[i][j]);
このときに&つけなならんのはなんでですか

cだとつけるのか二次元配列だとつけなきゃならないのか(根本的にわかってないかも)
そこら変詳しくおしえてもらえませんか
0150はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 7b3e-clLQ)
垢版 |
2019/04/17(水) 19:46:08.34ID:UWuCQ9XR0
>>149
配列は、条件を満たしたとき (というより条件を満たす場合の方が多いのだが……) にその先頭要素を指すポインタに型変換されるという特殊ルールがあるから。
配列 array を単に array と書いた場合には、 &array[0] に読み替えられると考えてもいい。
配列 array に & を付けて &array と書いた場合は「配列を指すポインタ」であって、「配列の先頭要素を指すポインタ」ではないことにも注意が要る。 (型が違う)

そのあたりのルールは歴史的経緯があってややこしいんだけど、この規則がないとそれはそれで記述がぐちゃぐちゃになるんでな……。
0151デフォルトの名無しさん (ワッチョイ 09da-La48)
垢版 |
2019/04/17(水) 20:36:55.41ID:VoxdaNRv0
>>149

int array[2][2]と仮定すると、array[0][0]の型はint
scanf()は渡されたアドレスを書き換える関数なので必要なのはint *
0154デフォルトの名無しさん (ワッチョイ 697b-Xu0i)
垢版 |
2019/04/18(木) 06:35:48.92ID:gmBt4t3M0
文字列(Cでは'\0'終端のchar配列)を格納できる変数 char s[SIZE]; に対して、

文字列を格納したい場合は
scanf("%s", s); // 連続したメモリ領域 s[0], s[1], s[2] ... に格納
配列名 s は &s[0](配列の先頭要素へのポインタ)と、値と型が等しい

1文字だけ格納したい場合は
scanf("%c%c", &[0], &s[1]); // s[0] と s[1] に1字ずつ格納
&s[0] は s と同じだが、 &s[1] との対応から &s[0] と書く方が分かりやすい

「配列名が暗黙に先頭要素へのポインタに変換される」話と、
「何を操作しているかをソースの書き方で明瞭に表現しようぜ」って話と、
整頓されずに混乱してるんじゃないかな。
「Cでは“文字列”とは何か」も絡んでるかも。


それに加えて、2次元配列という、これまたCではやや微妙な問題が噛んでるし。
char array[ROW][COLUMN]; // charの2次元配列
char *array[LINE]; // charへのポインタの1次元配列
>>149 の質問では二次元配列と明記されてるから本質じゃないけど、
説明を厳密にしようとすると、触れないのは片手落ちになっちゃうよね。
& 演算子でアドレスを得るときの内部的な処理の周辺。
0156154 (ワッチョイ 697b-Xu0i)
垢版 |
2019/04/18(木) 07:30:33.11ID:gmBt4t3M0
ありゃ本当だ。&[0] は誤りだね。ご指摘ありがとう。

誤: scanf("%c%c", &[0], &s[1]); // s[0] と s[1] に1字ずつ格納
正: scanf("%c%c", &s[0], &s[1]); // s[0] と s[1] に1字ずつ格納
0159デフォルトの名無しさん (アウアウウー Sacd-kBNU)
垢版 |
2019/04/19(金) 12:39:59.72ID:U46FCs4Qa
かといってそんな書き方してるプログラムはサンプルプログラム以外では見たことがない。
0172デフォルトの名無しさん (ワッチョイ 3602-YIQo)
垢版 |
2019/04/20(土) 01:30:17.77ID:2mEBnGIe0
早く配列になりたい
0173デフォルトの名無しさん (ワッチョイ 69ad-61/s)
垢版 |
2019/04/20(土) 12:04:07.28ID:adBHY6Cw0
忙しかったものですから、ウルトラ亀レスで申し訳ありません。

もちろんK&Rは良い本だとは思いますが、
よくないところがあると書きましたら、「それどこですか?」
のような質問がきていたのですが、仕事に忙殺されてレスが遅くなりました。

例えば、K&Rのハッシュ探索のプログラム。
ソースを見ればバグがあるとすぐわかるはずです。
K&Rのソースは単なるサンプルです。
仕事で実際に使えるわけではありませんし、

吐き出すハッシュ値をチェックしてみてください。
そのソースをF社の東大卒のプログラマがパッケージに組み込んでしまい、
大きなバグを引き起こしました。
で、俺が呼ばれてソースを見た瞬間に原因がわかって直しました。
K&Rを読んだときに気が付いていたからです。

K&Rを読んだときに、気が付く人はすぐ気が付いていると思います。
自分で考える人です。
本当のプログラマです。
0174デフォルトの名無しさん (スプッッ Sd12-fGro)
垢版 |
2019/04/20(土) 13:35:25.67ID:UeTDxeBdd
>>173
自分で考えるのが良いってのは、プログラマに限らずなんでもそうだよね。
その上で本当のプログラマとやらにもとめられるのは、考えて理解することよりバグを出さないテストを行う能力だと思うね。
考えてもミスる時はミスるし。
場数を踏んだプログラマは、もちろんちゃんと考えるけど、その上で自分の理解やコードを信じない。
ちょっと話が違うかな。
0175デフォルトの名無しさん (ワッチョイ 0d5f-YIQo)
垢版 |
2019/04/20(土) 18:04:05.64ID:YpwC1XIf0
>>173
それはK&Rのよくないところか?

K&RはCとはどんな趣旨のものかを紹介する本で
アルゴリズムを正確に教える本ではない

単にCの機能を説明するために例を挙げただけのナンチャッテコードを
いきなり本番環境に持っていった東大卒とかぬかすやる気のねえクズと
大きな事故に至るまで欠陥を検出できない会社の検証ルールの問題だろうが
0176デフォルトの名無しさん (ワッチョイ 368c-HmQt)
垢版 |
2019/04/20(土) 18:21:44.59ID:rZAwW+3j0
在るプログラムを作るのは間違い。買うのが正しい。
0183デフォルトの名無しさん (ワッチョイ 69ad-61/s)
垢版 |
2019/04/21(日) 10:26:51.61ID:gW8lsVjX0
>>175
173です。
おっしゃるとおりです。
俺の言いたかったのは、まあそういう感じです。
K&Rの信奉者があまりに多いので
どゆふうに指摘していいのか困惑している次第です。

つまり、言語の紹介本としては良い本だと思いますけど、
それ以上ではない。
現在、英語版のK&Rしか私の本棚に見つからないけど、
PREFACEの15行目からは、
This book is meant to help the reader learn how to program in C.
と始まっています。
この部分、日本語版にはどのように翻訳されていたか失念しましたが、
まさに、そのとおりなのです。

しかし、ハッシュ値のところですけど、
あと数文字をコーディングするだけでまともなコードになるのに、
なぜしなかったのか?という疑問はあります。
0185デフォルトの名無しさん (トンモー MMd5-+96b)
垢版 |
2019/04/21(日) 10:51:08.83ID:MDootfcvM
>>179
Cを数年やってからC++を
やりましたけど
最初は全くわかりませんでしたよ。
C++に慣れるまで1年ぐらいかかったかな?
全く別の言語と思ったほうが
よろしいかと思います。
0186デフォルトの名無しさん (アウアウエー Sada-aFPd)
垢版 |
2019/04/21(日) 11:08:55.42ID:gKcyDuy9a
Cでインターフェース・抽象性を意識したプログラムを書いてたらそんなに変わらんと思う。
ただ現実としては委譲を使ってたところから無理して継承に適応するために混乱することはある。現場で待っているのは神クラス。
0191デフォルトの名無しさん (トンモー MMd5-+96b)
垢版 |
2019/04/21(日) 14:48:54.11ID:YKRN8m01M
34年間、ほぼ毎日プログラミングしてますよ!
定年になってもずっとやってると思います。
作りたいものが一杯有りすぎて体が2つ3つ欲しいです。
今、最も力を入れているのが人工知能です。
人類を滅ぼす悪魔のソフトを造るのが人生最大の目標です!
0192 ◆QZaw55cn4c (ワッチョイ 7247-hooH)
垢版 |
2019/04/21(日) 15:58:12.64ID:MozNv5pX0
>>191
>人類を滅ぼす悪魔のソフト
これにはとても興味がありますね

「人類を滅ぼす悪のソフトウェア」
うーん、ぱっと思いつくところではテトリスとか…
0193デフォルトの名無しさん (ワッチョイ 0d5f-YIQo)
垢版 |
2019/04/21(日) 17:58:31.04ID:XP3sT+Yd0
>>183
全然わかってねえじゃん
あと数文字をコーディングすることが
Cの機能を説明するサンプルとしては邪魔だったら
その数文字をコーディングしねえのは当たり前だ

サンプルってのはS/N比が大事なんだよ
そこで伝えようとしていること以外のノイズは
徹底排除する必要があるんだ
0195デフォルトの名無しさん (ワッチョイ 368c-HmQt)
垢版 |
2019/04/21(日) 19:19:27.57ID:AjzRUWat0
脳波を検出して見たいVRを出してやるわ ==> 人類滅亡
0196デフォルトの名無しさん (ワッチョイ 69ad-61/s)
垢版 |
2019/04/21(日) 20:04:10.03ID:gW8lsVjX0
>>193
初心者向きの本ですから真似する馬鹿もいるということを
想像すべきでしょうね。
おまえこそ馬鹿だな
想像力がゼロだ
笑えるぞ?
知ったかのクズだ
0197デフォルトの名無しさん (トンモー MMd5-+96b)
垢版 |
2019/04/21(日) 20:08:24.68ID:YKRN8m01M
今どきCとか
K&Rとかで
能書きこいて
馬鹿ジジイにも
ほどがあるwww
0200デフォルトの名無しさん (ワッチョイ 7252-U8iM)
垢版 |
2019/04/21(日) 23:45:38.39ID:2X82VWTJ0
>>196
あの時代の初心者は今時の初心者と違って、大半はちゃんと自分で考えて自力で技術を習得していく姿勢があり、ただ教えてもらった通りにするだけのようなのは自然と落伍していったと思うよ。当時の想定する読者層にあった適切な内容だったろうと思う。
0202デフォルトの名無しさん (ワッチョイ 92ad-AoSc)
垢版 |
2019/04/22(月) 01:07:58.48ID:HMkHCtfr0
>>196
人の意見を聞く気がないなら
チラシの裏にでも書いてなよ

175にもあるけど
初心者の真似するバカのコードが
そのままリリースされる態勢を反省した方が前向き

あと何であの本に信奉者がいるのか
理解できない自分も
0203デフォルトの名無しさん (ワッチョイ 0d5f-YIQo)
垢版 |
2019/04/22(月) 02:24:36.97ID:RPRc4IKz0
>>200
当時のccが寡黙だったのが却ってよかったよな
なんで動かないのか自分の頭で考えるしかなかった
今どきのコンパイラは過保護で
落伍すべき者を引っ込み付かないところまで引きずっちまう
0204デフォルトの名無しさん (トンモー MMd5-+96b)
垢版 |
2019/04/22(月) 08:39:06.04ID:29O1k2F2M
>>202
お前のような馬鹿な奴は
そのうち自滅するよ(笑)

お前は「おれ天才!」とか
思ってる低知能のクズだ
もっともたちが悪いクズ
0205デフォルトの名無しさん (アウアウウー Sacd-kBNU)
垢版 |
2019/04/22(月) 10:09:04.63ID:y6AB5FtQa
>>179
いや、俺は使えない。

C++は30年ぐらい前にやろうとはしたが当時のPCでもワークステーションでも流行っておらず当然そのような仕事もなく、自分は主にUNIX関係の仕事だったので使う機会がほとんどなかった。

その後PCの方ではWindowsが流行ったが仕事はそのままなので変わらず、趣味ではWindowsでDelphi使ったりもしたがC++はほとんど手を着けず大雑把にしかわからないまま。

仕事はやがてLinux関係に移行するがそこでもC++が必要とされる事はなく現在に至る。趣味でJavaを覚えたりもしたが自分の仕事ではほとんど必要とされなかった。
今は趣味で Kotlin を覚えているところだが、C++については複雑化し過ぎたようなので今さらやる気は起きない。多分今後もやらないと思う。
Windowsプログラムを作る必要が出てきたとしても今ならC++なしで出来そうだし必要になるとしても局所的だろう。
0206193 (ワッチョイ 0d5f-YIQo)
垢版 |
2019/04/22(月) 10:13:09.11ID:RPRc4IKz0
>>204
196の時点ではまだ僅かに技術的な話題に振れていたが
今度は100%罵倒のみ
とうとう落ちるところまで落ちたな
0213デフォルトの名無しさん (アウアウウー Sacd-JNgg)
垢版 |
2019/04/23(火) 11:04:29.35ID:lZSXa7efa
標準入力で最初に数字を入力して、その値だけ文字列を入力するのはどんな感じで書けばいいですか

3
asdf
qwert
sdfghg

こんな感じで最初の入力の値に合わせて配列を用意する?感じになるとおもうんですが
なにもひらめきまへん
0214デフォルトの名無しさん (ワッチョイ 0d5f-YIQo)
垢版 |
2019/04/23(火) 11:22:00.88ID:ITUqyUOr0
>>211
配列の宣言に使う[]は演算子ではない
直接宣言子の一部だ

意図的に演算子に似せてあるので
勘違いするのは無理ないが
演算子は式に作用するもので
宣言子に含まれる[]はこの定義に該当しない
0218デフォルトの名無しさん (アウアウウー Sacd-kBNU)
垢版 |
2019/04/23(火) 15:59:59.72ID:gv0SOq8da
>>213
文字を入力するだけで変数に入れる必要がないなら getchar() で '\n' 三回読んだら終わり。
変数に入れる必要があるなら最初の値の分だけ char * を保持する配列を char ** に malloc() や calloc() 使って確保して、更に全要素を malloc() や calloc() 使って確保して、それに対して fgets() を繰り返す。
0220デフォルトの名無しさん (アウアウウー Sacd-kBNU)
垢版 |
2019/04/23(火) 17:41:00.23ID:gv0SOq8da
月月火水木金金
0223デフォルトの名無しさん (ワッチョイ 69ad-61/s)
垢版 |
2019/04/23(火) 20:44:52.15ID:k/LWg8++0
>>222
日本は戦争しないでしょ?
そして巻き込まれもしないと思う。

だって日本には軍隊がないんだもの。
自衛隊なんて銃もろくに撃てないへなちょこばかりだから。
0229デフォルトの名無しさん (ワッチョイ 3602-Mntl)
垢版 |
2019/04/24(水) 03:42:44.00ID:SZsIFAZx0
よね
0230デフォルトの名無しさん (ワッチョイ 5e63-JNgg)
垢版 |
2019/04/24(水) 08:04:11.05ID:P2wnwvJc0
ICEデバッグしてるとき、とある変数の値をいくつか足し算して、別の変数に代入する関数で、
変数の内容同じなのに、結果が違う。。
最適化OFFにしてビルドしてる。
0239デフォルトの名無しさん (ワッチョイ 3602-Mntl)
垢版 |
2019/04/24(水) 18:27:12.37ID:SZsIFAZx0
まずはアイスクリームでも食べて休むといい
よね
0241デフォルトの名無しさん (ワッチョイ 5e63-JNgg)
垢版 |
2019/04/24(水) 20:00:32.37ID:P2wnwvJc0
230だけど、俺の見当違いでした。
インプットの変数の値が違っていたので、当然足し算の結果も違っていたというオチ。
ICEデバッグだと変数を表示するとメモリの中じゃなくて表示した時点で割り当てられたレジスタの値を表示するので、
変数としては変わってないはずなのに他で書き換えられるので逐一変わって混乱していた。

ICE初心者でしたw
0242デフォルトの名無しさん (ワッチョイ 3669-hooH)
垢版 |
2019/04/24(水) 22:16:06.15ID:03JhFb4B0
デバッグ中に最適化を抑制するのは間違いではないと思います。
慣れてくると最適化したままでもある程度推測できるようになりますので、
リリースオプションでICEを使用することの方が多くなるかもしれません。
0244デフォルトの名無しさん (ラクペッ MM81-1KF1)
垢版 |
2019/04/24(水) 22:41:36.06ID:W4WRMDmVM
ぶっこ抜くと言うよりターゲットボードのCPUの代わりに専用のソケットを実装して専用プローブで接続する
PCなどと違って組み込みのSoCにソケットなど無いのでぶっこ抜いて差し替えるなど無理
0246デフォルトの名無しさん (アウアウウー Sae9-MRXB)
垢版 |
2019/04/25(木) 00:33:17.24ID:1oTSGFU/a
scanf("%d%d%d", &a, &b, &c);
こうまとめて入力するのをfgets使うとどうやるの?

fgets(s, sizeof(s), stdin);
sscanf(s, "%d", &a);

このセットをループで三つまわすしかない?
一行でやる方法あるんかな
0249デフォルトの名無しさん (ワッチョイ 1b02-1PXK)
垢版 |
2019/04/25(木) 04:21:17.20ID:D6NtakiX0
>>246
なんというか、ほとんど答えが上に書いてあるかのような質問だな・・・

sscanf(s, "%d%d%d", &a, &b, &c);
0253デフォルトの名無しさん (アウアウウー Sae9-tnqD)
垢版 |
2019/04/26(金) 10:28:55.76ID:YRtkzMZRa
>>252
それって商売になってるのか?
普通に公開されてるが。
0255デフォルトの名無しさん (アウアウウー Sae9-tnqD)
垢版 |
2019/04/26(金) 14:06:27.08ID:YRtkzMZRa
そうなの?何の宣伝になってるのか全くわからんのだが。
0257デフォルトの名無しさん (アウアウウー Sae9-tnqD)
垢版 |
2019/04/26(金) 14:36:01.95ID:YRtkzMZRa
元々有償でプログラム作るスレとして作ったスレだったんだろうけど結局誰もそんな風には使ってなくてただのプログラム発表の場になってるよね?

ま、しかし、5ちゃんのような掲示板で稼ぐのは無理があるよなあ。それ専用のサイトなら可能だろうけど。
0258デフォルトの名無しさん (ワッチョイ 4b63-MRXB)
垢版 |
2019/04/27(土) 10:20:19.39ID:H+/AGAV+0
既存をちょっと修正してほぼデグレのテストというスタイルの俺には、
要望に応じて1から新しいプログラムを組む人を尊敬する
修正は修正で既存への影響の面でそれなりのノウハウは要るにしても
0260デフォルトの名無しさん (トンモー MM79-LqAG)
垢版 |
2019/04/27(土) 16:22:24.62ID:W91FG5LxM
>>259
文句を言わずに、というより
文句を言わせずに、だと思う。

俺は奴隷だったので
よくわかる。

会社辞めて派遣になって
気分すっきり!
な~んの責任もないのに
年収1000万だもの

派遣辞められません!
0262デフォルトの名無しさん (ワッチョイ 4b63-MRXB)
垢版 |
2019/04/27(土) 18:25:28.46ID:H+/AGAV+0
派遣でそれだけ貰える程のスキルがあるってことは、
C言語だと本当に低レベルのデバイスの制御からビジネスロジックの
設計からお任せできるレベル
独立すべきでしょう
0263デフォルトの名無しさん (ワッチョイ e501-SN11)
垢版 |
2019/04/27(土) 19:19:15.66ID:e+ce++rA0
ハードの設計から組み込みソフトはもちろんWindows、Android.、iOSのアプリ、DBもWebもゼロから設計できるスキルがあったらどこに行ったらそんな高級取りになれるでしょうか?
0266デフォルトの名無しさん (ワッチョイ 1b02-KxX0)
垢版 |
2019/04/28(日) 03:02:09.70ID:IQfIs7rY0
自分で開業した方が良さそうな感じもするが、そうなると営業力も必要になるな。

まあでも Android や iOS アプリの場合は営業力あまりなくても世界中に売れれば儲かる事がある。
電卓アプリでこんな風に稼いでいる人も居るし。
https://appmarketinglabo.net/calculator-1100man/
これは世界での需要がどのぐらいあるかとプログラムが簡単かどうかはあまり関係ないってことでもあるかな。
需要がないものだと作るのが大変なプログラムでも売れなくて稼げない。苦労と儲けは無関係。
0267デフォルトの名無しさん (ワッチョイ 1b8c-B2tE)
垢版 |
2019/04/28(日) 07:50:35.97ID:3xnz0I0C0
大半の自営業は開発費半分を前金でもらいとんずら。
0268デフォルトの名無しさん (トンモー MM79-LqAG)
垢版 |
2019/04/28(日) 13:24:06.83ID:JRRKtJTbM
>>267
日本に前金払うところなんてないから。
たからデスマになる
0270デフォルトの名無しさん (ワッチョイ 5d21-ynyp)
垢版 |
2019/04/29(月) 21:07:19.95ID:2RjR17Kk0
Linuxでシリアル通信のソフトを作成しています。
http://codepad.org/L4BLwgAQ

コマンドを送信すると、相手が応答電文を返してくる仕様なのですが
write→readでは、うまく受信できないようです。
teratermで同じ電文を投げると、受信できるので
このソースが悪いのだと思っています。
投げて、受けるというのを上手くやるにはどうしたらいいでしょうか。
お助けをよろしくおねがいします。
0274デフォルトの名無しさん (トンモー MM79-LqAG)
垢版 |
2019/04/29(月) 22:19:37.72ID:dHR449jcM
Cっていいよね。
シンプルで全て見えてる。
キチンと組めば性能も素晴らしく、
ソースも分かりやすい。

ま、馬鹿が使うと酷いことになるから
馬鹿には触らせたくない!

馬鹿にはJavaがお似合いw
0277デフォルトの名無しさん (トンモー MM79-LqAG)
垢版 |
2019/04/29(月) 23:27:52.24ID:dHR449jcM
ああ
Javaわかんね―馬鹿か

Cしかわからん馬鹿院生って感じかな(笑)
0280本田宗一郎 (トンモー MM79-LqAG)
垢版 |
2019/04/30(火) 09:04:16.26ID:UDRlTLQRM
Cしかできない奴はCを評価できない

そんな簡単なこともわからない

院生くずれのバカニート(笑)
0281デフォルトの名無しさん (ワッチョイ cb34-KxX0)
垢版 |
2019/04/30(火) 10:31:21.97ID:FQfKtoeU0
いや評価はできる

この世の森羅万象すべてを知り尽くしているやつなんかいない
みんなそれぞれ何らかの「井の中」にいる
そこからCならCがどう見えるかを述べているのを
聞いた者がどう捉えるかの問題だ

自分の「井の中」のほうが相手より大きそうだからって
天狗になるやつこそ成長の止まった将来性のないやつだ
0282デフォルトの名無しさん (トンモー MM79-LqAG)
垢版 |
2019/04/30(火) 11:10:18.88ID:UDRlTLQRM
できね―よ馬鹿
0283デフォルトの名無しさん (ワッチョイ 1b8c-B2tE)
垢版 |
2019/04/30(火) 11:15:16.30ID:/zD1IEOE0
OSなしで書ける言語はC?
0291デフォルトの名無しさん (ワッチョイ 1dd2-DhOR)
垢版 |
2019/04/30(火) 13:23:52.39ID:JZ+qVZdl0
OS無しで動くプログラムが書ける言語はC?
ってことだろうな
0295デフォルトの名無しさん (ワッチョイ e501-SN11)
垢版 |
2019/04/30(火) 15:58:16.84ID:QYNECMA50
>>294
そりゃビットサーチとか場合によってはCPUの機能を使ったほうが速かったりシンプルに書けるケースもあるけど、それはそれでまた別の話。
それを以てC言語で書けないとは言えないよ。
0296 ◆QZaw55cn4c (ワッチョイ 6347-HJzg)
垢版 |
2019/04/30(火) 16:35:39.02ID:iYYZTFZo0
>>295
まあ java だけで「やってしまった」OSというのもありますから…多分 JNI を使っているとは思いますけど…
C 言語だけで全部やってしまう、というのはありえなく、例外 exception の実装に有用な setjump(), longjump() ですら、CPU を叩かずにはいられない内容ですから、世に蔓延する「C言語マンセー」は、その機会があればなんとしても叩かずにはいられないのです
0297デフォルトの名無しさん (ワッチョイ e501-SN11)
垢版 |
2019/04/30(火) 17:01:36.40ID:QYNECMA50
>>296
もしかしたら貴方と私は違う思想の元で仕事してるのかも。
JNIはAndroidぐらいでしか使ってない、てかそもそもJavaを使う機会が少ないような業界の人です。
なんちゃってtry〜catchのためのsetjmp系はそれでもやっぱりアセンブラを使わないC言語の範疇内な訳であって、やっぱりC言語否定の理由にはならんとです。
唯一、OSを記述する際のタスクプリエンプトだけはC言語だけで記述できず悪魔のスタック操作とコンテキスト切り替えが必要なのでアセンブラが必須だとは思いますが。
0299デフォルトの名無しさん (ワッチョイ 2d5f-zd//)
垢版 |
2019/04/30(火) 18:21:31.59ID:hc3e5D+80
プログラミング素人です。
scanf関数について質問なのですが、
char str[10];
for(i=0;i<5;i++){
scanf(“%c”,str[i]);
}
として、「abcd」と入力された場合、
str[0]=‘a’
str[1]=‘b’
str[2]=‘c’
str[3]=‘d’
str[4]=‘¥’
str[5]=‘0’
となるのでしょうか?
str配列の0~3番目にa~dが格納されていることはprintfでわかりましたが、4以降は何が格納されているのか自分で調べる方法がわかりません…
0312デフォルトの名無しさん (JP 0H13-1PXK)
垢版 |
2019/05/01(水) 14:41:59.38ID:yF2N0E1tH
>>304
%c は空白文字は入らないのでは?
0316デフォルトの名無しさん (ワッチョイ 62a5-PJjo)
垢版 |
2019/05/02(木) 13:24:17.15ID:+EePt9KB0
初心者はただ値が入力できりゃ楽しいんじゃね

ついでにscanfはかんたんに間違いを引き起こすことが出来るから脆弱性の説明にも使える
このご時世、かんたんに間違いを体験させること自体が難しくなってる
セキュリティが高くなると間違えさせる行動へのコストもまた高くなる
0317デフォルトの名無しさん (アウアウウー Sabb-vI8p)
垢版 |
2019/05/02(木) 15:41:08.09ID:jQNzLmJja
昔のマイコン的なものだと暴走したりしてなお良い。
core dump してるようじゃまだまだ安全過ぎる。
0321デフォルトの名無しさん (トンモー MM93-qoXq)
垢版 |
2019/05/02(木) 21:21:11.50ID:TaSBDpemM
>>319
ヨコからスマンけど
そゅ意味じゃないのが
理解できないほどの馬鹿は
ここにくるべきではない
0325デフォルトの名無しさん (トンモー MM93-qoXq)
垢版 |
2019/05/02(木) 21:34:15.84ID:TaSBDpemM
馬鹿丸だし(笑)

論文ゼロの院生くずれ馬鹿ニート
という雰囲気プンプンだな(爆)
0326デフォルトの名無しさん (ワッチョイ f7dc-ahOC)
垢版 |
2019/05/02(木) 21:53:25.96ID:TlCaXbcx0
院生とかめっちゃ高評価じゃんw

俺には大学にコロコロコミックを持ってきて、全ての人間が敵に見えて毎日発狂してた同級生の江○君と被ってしまう。
頭はすこぶる良いんだけど、頭が弱い残念なアイツの雰囲気がプンプン
0328デフォルトの名無しさん (トンモー MM93-qoXq)
垢版 |
2019/05/02(木) 22:04:26.88ID:TaSBDpemM
院生の意味が理解できない馬鹿(笑)
0329デフォルトの名無しさん (トンモー MM93-qoXq)
垢版 |
2019/05/02(木) 22:05:27.60ID:TaSBDpemM
学歴など無意味
馬鹿は馬鹿(笑)
0334デフォルトの名無しさん (トンモー MM93-qoXq)
垢版 |
2019/05/03(金) 07:52:51.95ID:EnpL9vkxM
Cできるけどアセンブラできない、
ってのはCもできないってことだ。
0337デフォルトの名無しさん (ワッチョイ cb02-R0y6)
垢版 |
2019/05/03(金) 17:51:44.54ID:VHrwonhY0
出来る出来ないっていう話なら、基本Cできるんじゃないかな。
CPU固有のブルック転送命令とかそんなのを除いて。
(それすら別にできるけどね。)
1命令でできてたことがめんどくさくなるってものならあるかも。
0340 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/03(金) 18:51:30.00ID:ZD3cPA9Q0
>>335
一つ思い出しました、キャリーフラグを活用するアルゴリズムは、そのままでは C でかけずに大変ですね
ローテートとかシフトとか
0341デフォルトの名無しさん (ワッチョイ 4240-ahOC)
垢版 |
2019/05/03(金) 19:20:32.29ID:Qo5d3PXm0
>335
キャリーフラグが無くてオーバーフロー/アンダーフロー判定が面倒だとか、
ビットシフトはあってもローテーションが無いとか。
ジャンプ命令使うとパイプラインが初期化されるからなるべく使うなと聞いたのに
逆汗見たらジャンプしまくってるじゃないかとか。
8/16bit時代のアセンブラは1バイト、1ステート削って処理速度稼いでたんで
上記の差を補う処理が無駄に思えて・・・。
かといってインラインアセンブラ使うのはなんか違うと(インライン使うと最適化されないとも聞いてたし)。
それならアセンブラでCから呼べる関数書いた方がすっきりするとか。

20世紀時代のことだ。
0342デフォルトの名無しさん (ワッチョイ 422f-ahOC)
垢版 |
2019/05/03(金) 19:43:11.87ID:EWn4tN7a0
マシン語でコード書いてるときはオンレジスタ思考なのに
当時のCはデフォautoつまりオンメモリなので
ああ、やはりマシン語よりは速度が落ちる言語なんだな
コンパイラ言語とインタプリタ言語のような違いが
もう1つあるんだなって思っていた
0343デフォルトの名無しさん (ワッチョイ d701-LHRJ)
垢版 |
2019/05/03(金) 20:21:30.59ID:B4eLqFJ00
スパゲッティなものを書いてるならともかく、真っ当にサブルーチン化してたら必要悪としてレジスタ志向は早々に諦めてたわ。
局所的に最適化するならそれは別問題として解決してた。
0347 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/03(金) 21:19:31.21ID:0u/4Gvfl0
>>345
>アルゴリズムと言うより実装の話
いや、それは不思議な分類だと思います、DES/AES などはローテート・シフトがそのままアルゴリズムになるのでは?
0350デフォルトの名無しさん (ワッチョイ cb5f-zb9T)
垢版 |
2019/05/04(土) 04:19:37.51ID:qzgt3pmZ0
文字列入力を受け付けて、それをstrという変数に代入する…というプログラムを書きたいのですが、知りたいことがあって以下のような条件を課させていただきます。

・for文を使い、その中でscanf(“%c”,str[i])により1文字ずつ文字をstrの各配列に格納していくこと
・文字数は最大50文字までとし、たとえば「abcd」などのように4文字であった場合も、abcdと入力→Enterが押された時点で、その文字列をstrに代入して、その4文字を表示して完了とする
・if文を使ってそれを実現すること


#include<stdio.h>
int main(void){
int i,str[50];
for(i=0;i<50;i++){ //入力処理
scanf(“%c”,str[i]);
}
for(i=0;i<50;i++){ //出力
printf(“%c”,str[i]);
}
}

このコードだと、「abcd」と入力してEnterを押しただけでは、出力されません。(50文字入力されるまで入力受け付け状態から遷移しない)
どのように改良すればよいでしょうか?
0354デフォルトの名無しさん (ワッチョイ 177b-VjZg)
垢版 |
2019/05/04(土) 05:39:39.99ID:RAMEL17i0
>>350
「入力処理」のforループで、「50文字入力されたら」を判定してるけど、
もう一方の終了条件「Enterが押されたら」を判定してないからでしょ。
1文字受け取るごとに、Enter '\n' ならループを抜ける、をやらなきゃ。
というわけで >>315 に至る。

>>353 このスレッドの伝統かと。>>299 以下を参照のこと。
あちらはスルーしたのに、こちらでツッコむのは抵抗感がある、みたいな。
0355354 (ワッチョイ 177b-VjZg)
垢版 |
2019/05/04(土) 10:20:54.58ID:RAMEL17i0
誤: というわけで >>315 に至る。
正: というわけで >>351 に至る。

315 を確認したところ、まるっきり見当違いでもなかったね。
0356デフォルトの名無しさん (アウアウウー Sabb-H3I8)
垢版 |
2019/05/04(土) 10:47:02.91ID:lguQ1Ppja
>>354
>>299は見逃していたなあ。空目だな。
0357デフォルトの名無しさん (アウアウウー Sabb-vI8p)
垢版 |
2019/05/04(土) 11:41:09.49ID:yT0QTmUja
>>350
もし宿題が本当に scanf(“%c”,str[i]) と書いてある場合は先生が間違えてるので「 scanf(“%c”, &str[i]) ですよね?」とツッコミを入れてみると良い。

そうすると君はできる学生と思われて成績が上がるるか、または気に入らんやつと思われて成績が下がると思う。
0358デフォルトの名無しさん (トンモー MM93-qoXq)
垢版 |
2019/05/04(土) 13:40:22.89ID:tOD9kuurM
そういえば東大では今でも
C言語が必修なのか?

まじ時代遅れの馬鹿だと思ってたら、
Cしかできない在日の馬鹿教員が
いるのだとか
0360デフォルトの名無しさん (ワッチョイ 6752-ahOC)
垢版 |
2019/05/04(土) 14:16:41.02ID:vXlxEQ1E0
参照型とか出てくるのにそもそも参照がなにかも理解出来てないにわかオブジェクト指向が増えるよりよっぽどマシよ
なんの言語とは言わないけども
C言語なら理解しなければ先に進まないから
0362デフォルトの名無しさん (トンモー MM93-qoXq)
垢版 |
2019/05/04(土) 14:47:16.31ID:tOD9kuurM
>>361
トヨタ系の研究所には
Cの分かる研究員がもういないのです
研究には全く支障がないです

組込みやってる高卒やFランが
Cをやるべきでしょ?
0363 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/04(土) 14:55:00.73ID:7fnHNdb20
>>362
それは多分ありえない話でしょうね、なぜならば C は計算機言語の基本で、各種書籍ではアルゴリズムの記述に C を使うものが大半ですから
本も読めない人がトヨタの研究者とか、あなたの空想の話なのでは?
0367デフォルトの名無しさん (トンモー MM93-qoXq)
垢版 |
2019/05/04(土) 16:07:19.80ID:LvYM7SOrM
>>365
そんなのはFランの仕事でしょ?
0371デフォルトの名無しさん (アウアウウー Sabb-vI8p)
垢版 |
2019/05/04(土) 18:39:36.30ID:yT0QTmUja
pythonって参照ないの?
0373 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/04(土) 19:05:41.64ID:7fnHNdb20
>>372
なるほど、ではユーザー定義の型は自動的に参照扱い、すなわち Java みたいなかんじなんですね
であれば苦労すれば二分木を実装できますね、大変失礼いたしました
0374はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z)
垢版 |
2019/05/04(土) 19:18:51.61ID:21Of2ELD0
>>370
Python に限らず動的型の言語の多くは変数に値を入れるんじゃなくて、
オブジェクトと変数の間に束縛 (bind) を作ることで成り立ってる。
辿ることでオブジェクトを参照するんだ。 実質的にポインタだよ。 むしろポインタしかない。

(小さい値 (小さい数値とか文字とか) はアロケーションを抑制するためにそのまま
ワードに突っ込むような最適化をする言語 (処理系) もあるけども。)
0375 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/04(土) 20:22:17.94ID:7fnHNdb20
>>374
Java ならば boxing でヒープにとる値とスタックに取る値とをある程度(意識せずに)変換できますね(そういう C/C++ like な意識が皆無ではない、という意味)
ただし、二分木に関してはいいたいことがまだあって、「本物の」二分木は二重ポインタ(ポインタのポインタ)が必要なのではないか?と思っています
さすがに Java には二重ポインタはない、そんな用途の言語じゃない
Python や ruby にはあるのでしょうか?
0377 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/04(土) 21:01:18.06ID:7fnHNdb20
>>376
ノードを追加する関数add の引数を
add(&root, Object)
ってするでしょ?&root ってことは、struct *node のアドレス、すなわち struct node ** が必要なのではないかと
0384デフォルトの名無しさん (アウアウウー Sabb-vI8p)
垢版 |
2019/05/05(日) 00:20:41.66ID:nwgMKC8Ra
微妙にスレチのように思うので続きはJava初心者のスレでやった方が良いのではないか?

まあ人に聞かなくても Java を勉強して Java の API のソースを読めばそういうのをどうしているのかは何れわかると思うけどね。
0385デフォルトの名無しさん (ワッチョイ e22c-4xtZ)
垢版 |
2019/05/05(日) 00:21:53.66ID:tvdtPjB+0
Ruby での、Jaggy 配列は、

ary = [ ] # 配列の配列

ary.push [ "a" ]
ary.push [ 1, 2 ]

p ary #=> [["a"], [1, 2]]

C/C++ 以外のたいていの言語では、数字などのprimitive 以外は、すべて参照。
(primitiveは参照にするよりも、その場所へ値を埋め込んだ方が速い)

外側の配列は、内側の配列の参照を持っている。
内側の配列は、(primitive以外の)各要素の参照を持っている

primitive以外は、コピーしても参照がコピーされるだけで、値はコピーされない。
つまり、同一インスタンスを指す。
別のインスタンスは作られない

new されていなければ、インスタンスは作られない。
代入しただけでは、参照がコピーされるだけ

これを、shallow copy (浅いコピー)と呼ぶ(同一インスタンス)。
new して、別のインスタンスを作ることを、deep copy (深いコピー)と呼ぶ(別のインスタンス)
0390 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/05(日) 09:08:14.08ID:3EWrT4Pn0
>>389
無論使いさえすればいい、というわけではなく、この例では小さなシェルを実装しており、シェルのパイプ機能を実装するのに三重ポインタを使ったのです
0392 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/05(日) 09:47:47.39ID:3EWrT4Pn0
>>391
代入命令が増えるという意味ではなく、「同じ値」なのに代入してしまう、という作業が >>378「戻り値でポインタを返」す方式の書き方だと不可避です
0403 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/05(日) 11:25:51.36ID:3EWrT4Pn0
>>400
ちがいます
代入するのか代入しないのかは malloc() したかしなかったかにかかっています。
代入は malloc() したとききだけにすればよく それが >>393 の func2(&ptr, opt); の書き方
一方 >>393 ptr = func1(ptr, opt); は malloc() したかしないかにかかわらず代入を行います、これは無駄な代入を含みます
0405 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/05(日) 11:37:36.53ID:3EWrT4Pn0
>>404
着目点はそこにはありません。関数による記述で内部を隠蔽するのが目的ではありません
問題は、malloc() したときだけ代入し、malloc() しなかったときには代入しない、という記述を正確にかけるかどうか…@、にかかっており
>>393 ptr = func1(ptr, opt); は@を記述できる可能性が皆無、一方
>>393 func2(&ptr, opt); は@を記述できる可能性がある、というわけです
0407 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/05(日) 11:44:46.28ID:3EWrT4Pn0
>>406
非常に大きな二分木(ノートが1億個)があって、そのはるか先端で malloc() してそこで代入すればいいだけなのに、
その先端から root に戻ってくる途中の30箇所ほどで、軒並み全部のノードで「必要のない無駄な代入」をするのですか?

>それしか使えない場面でのみ使うべき

この二分木を実装する、というのがまさしく「それしか使えない場面」なのですよ
0410 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/05(日) 11:53:15.92ID:3EWrT4Pn0
>>408
>>393 func2(&ptr, opt); では
malloc() して null が返ってきたときは、例えば何もしない、ということはできますね

でも >>393 ptr = func1(ptr, opt);
は、malloc() しようがしまいが代入してしまいますね、これは「やる必要のない無駄な代入」が含まれることになり、好ましくないです
>>393 ptr = func1(ptr, opt); の記述法は二分木を最初に習うときに、この記述法で理解を促すという意味では有用であっても、
いつまでもこれで書いているようでは進歩していない、もっといえば怠惰である、と考えています
0411 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/05(日) 11:55:53.32ID:3EWrT4Pn0
>>409
しかし無駄な代入を放置してよいというわけではないでしょうね、削れるところは削るべきです
単純二分木よりさらに改良された平衡二分木(AVL木、赤黒木等)を紹介する書籍では、最初から >>393 func2(&ptr, opt); で記述されていますよ
0414 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/05(日) 12:05:45.99ID:3EWrT4Pn0
>>412
ちがいますね
問題は、malloc() したときだけ代入し、malloc() しなかったときには代入しない、という記述を正確にかけるかどうか…@、にかかっています。

>>413
>>407 に書いておきました、1億ノードの二分木にて各ノードが最適に配置されているとして、削ることのできる代入は malloc() 一回に対して 30 個の代入になります
>>393 ptr = func1(ptr, opt); では 1億ノードの二分木にノードを追加する際、30個の無駄な代入が発生します
代入のコストは大したことがない、にしても、アルゴリズムを正確に記述できないのは問題ですね
洗練された記述とはそういうものではないでしょうか
0417 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/05(日) 13:12:30.38ID:3EWrT4Pn0
>>415
malloc() が成功したか失敗したかは、今の話には関係ありません
今関係があるのは、
malloc() したときだけ代入し、malloc() しなかったときには代入しない、という記述を正確にかけるかどうか…@
です
0419 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/05(日) 13:51:49.48ID:3EWrT4Pn0
>>418
malloc() したときは代入しますよ、でも malloc() しないときは代入なんかせず、そのまま呼び出し元に返るだけです
それが>>393 ptr = func1(ptr, opt); 方式と絶対的に違うのです
0423 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/05(日) 14:11:38.90ID:3EWrT4Pn0
>>422
いいえ、実際に実装するならば、エラーを伝達する手段として返り値を準備することは大いにありえるでしょうね
void が必須ではありません
必要な代入なら使えばいい、でも
>>393 ptr = func1(ptr, opt);
方式は不必要な代入があり、単に二重ポインタを使用して記述すればこれは除去できるので、
>>393 ptr = func1(ptr, opt);
を書くのは問題だし、これを書く人は頭を使っていない、と判断します
0426 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/05(日) 15:03:58.07ID:3EWrT4Pn0
>>424
そのパターンでは、異常値 NULL をうっかりノードに登録してしまうと、そのノードより下が浮いてしまい危ないですね、ま、異常系をミスったままリリースしてしまうことも私はよくやりますけど
0428 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/05(日) 17:54:28.38ID:3EWrT4Pn0
>>427
言葉尻を捕らえて攻めたつもりになっているようですね
「すべての代入を消去できる」なんていってませんよね

>>393 ptr = func1(ptr, opt);

この代入は不要な代入を含むので、

>>393 ptr = func1(ptr, opt);

は不適当な書き方だ、とこれまで首尾一貫して述べているのです
0429デフォルトの名無しさん (ワッチョイ f701-EPtf)
垢版 |
2019/05/05(日) 18:13:23.13ID:bV6goPu10
423の文意は
「void が必須なわけではなく
 引数と同じ型のポインタを戻すことはせずに、別の目的の何か、たとえばエラーコードとして int を戻す
 なんてのはアリでしょ?」
ってことだと思うけど
0432 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/05(日) 19:00:00.98ID:3EWrT4Pn0
>>430
どんな代入もだめだとは主張していませんね…

>>393 ptr = func1(ptr, opt);
方式は不必要な代入があり、単に二重ポインタを使用して記述すればこれは除去できるので、
>>393 ptr = func1(ptr, opt);
の代入が駄目だとはいってきていますけれども
0434はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z)
垢版 |
2019/05/05(日) 19:13:46.27ID:TxpPZKKr0
あ、ごめん、ミスって文章を書く前に投稿してもうた。

>>407
あらためて確認するが、この代入を「無駄」としているのはアルゴリズムの表現の上では不要なことをしているという
意味の上での無駄であって、性能上の無駄という意味ではないんだね?
そして、アルゴリズムを正しく表現する上では (ときには二重・三重のも含めて) ポインタが必要だと。
0435 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/05(日) 20:16:09.59ID:3EWrT4Pn0
>>434
>性能上の無駄という意味ではないんだね?
性能の上で分析するとなると、間接参照にてデータをロード、ストアするコストと値をストアするコストを天秤にかける、ことになりますね
なるほど、その点を言いたくて、でも言いたくなくて、しつこく絡んでいたのですか…

私は二重ポインタでの表現の方がトータルでお得だ、とは思ってはいますが、これまで表に出ている私の発言は、あえてそこには踏み込まず(だって性能の話はうかつに断言できませんからね…)、
おっしゃるとおり「アルゴリズムの表現の上では不要なことをしている」に留まっています
0436はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z)
垢版 |
2019/05/05(日) 20:57:45.43ID:TxpPZKKr0
>>435
たとえば数学上の表記なら「A=1 であり B=1 のとき A=B は真である」と「1=1 は真である」には何も差が無い。
途中で名前を付けるのは人間に対する便宜であって、無駄な「操作」は存在しない。

代入が無駄たりうるのは C のパラダイムだからなので、
「C で表現するにはポインタが必要だし、代入では不適当だ」は事実であっても
「ポインタが無い言語では表現できない」というわけではないよ。

C の低級な世界でまともな意味論を表現しようとするのがそもそもの間違いだろう。
0437 ◆QZaw55cn4c (ワッチョイ 8247-R0y6)
垢版 |
2019/05/05(日) 21:02:18.49ID:3EWrT4Pn0
>>436
>「ポインタが無い言語では表現できない」というわけではないよ。
それは理解しています、なぜなら
Java での二分木の実装を検討したことがある(探せば2ch過去ログにあるかもしれません)
Java にはポインタはありませんが、実装できるかできないか、といえば「できる」の方に入りますね
0439デフォルトの名無しさん (ワッチョイ 2f05-S4IJ)
垢版 |
2019/05/05(日) 23:34:40.25ID:RXFRr1FQ0
C言語のプログラム内で確保していいメモリってユーザー空間の仮想メモリ上限いっぱいまで取っていいの?
複数の変数a, b, c, ・・・の値を表示するだけのプログラムを時系列に並べて考えてみるんだけど

0. 実行ファイルを起動する
1. 32bitプロセスが生成される ←たとえば32bit windowsだとユーザー空間とカーネル空間で計4GBの仮想メモリが確保される
2. int a; ←仮想メモリ(1で確保されたユーザー空間)上にaが確保される
int b; ←上に類似
int c; ←上に類似
・・・・・(複数の変数の宣言やprintf関数が続く)

こんな感じなんだろうけど
上記の2でユーザー空間いっぱいになるまで変数を宣言してもいいの?
0441デフォルトの名無しさん (ワッチョイ 2f05-S4IJ)
垢版 |
2019/05/05(日) 23:41:29.98ID:RXFRr1FQ0
簡潔に書くと
安全のためにはどこまでメモリを使っていいの?
そのメモリの大きさはユーザー空間の上限と同じなの?
という室問なのに長くなってしまた
0442デフォルトの名無しさん (ワッチョイ 2f05-S4IJ)
垢版 |
2019/05/05(日) 23:47:50.76ID:RXFRr1FQ0
>>440
ありがとう
ただ初心者なので効率性を目指すにはきつい部分が出てくる
そうなるとメモリの残量を監視する、つまり残量の値を取得する必要があるわけだけど
これは一般的にはwindowsのAPIを使うのが普通なの?
(そんなものがあるのかは知らない)
0443デフォルトの名無しさん (ワッチョイ 8252-M0pk)
垢版 |
2019/05/05(日) 23:52:54.47ID:RPhfdkos0
>>442
スタックとヒープという概念は知ってる?知らなければまずそれを調べてみて。
それと、初心者なら効率を求める前に正しくメモリ管理を扱えるようになる必要があるが、その時点で残量は気にする必要はないぞ。
0444デフォルトの名無しさん (ワッチョイ 2f05-S4IJ)
垢版 |
2019/05/05(日) 23:59:16.82ID:RXFRr1FQ0
FIFOだとかナントカ程度にしか。
「〜〜領域」という幾つかの用語がOSとかの環境が違っても
全く共通のものなのかよく分からないから正直スルーしてる
0445デフォルトの名無しさん (ワッチョイ e22c-4xtZ)
垢版 |
2019/05/06(月) 05:38:27.60ID:wr9bFPpT0
>>414
>1億ノードの二分木にノードを追加する際、30個の無駄な代入が発生します
2^10 = 約1,000 千
2^20 = 約1,000,000 百万
2^30 = 約1,000,000,000 十億

>>441
Java VM の初期値は、256MB とか。
それよりも大きいと強制終了されるが、起動時に、512MBに設定できる

たぶん、4GB の仮想メモリでも、ユーザー空間3GB・カーネル空間1GBぐらいだろ

それ以上のデータは、動画みたいにstream になる。
バッファサイズ、例えば、1MB を読んでは捨てて、次の1MB読んでは捨てて、の繰り返し

読み込んだデータを使ったら、すぐに捨てないといけない。
ユーザー空間に、空きを作らないといけない
0446デフォルトの名無しさん (ワッチョイ 8252-M0pk)
垢版 |
2019/05/06(月) 06:20:53.21ID:Geq8Gq1G0
>>445
いつものRubyバカだろ。いい加減な知識でC言語のメモリの話題に口を挟むのはやめろ。この板になれている者からすれば「またいつものか...」ですむが、初心者にとっては害悪でしかないから消えろ。
0449デフォルトの名無しさん (ワッチョイ 2f05-73UM)
垢版 |
2019/05/06(月) 10:14:49.95ID:Om5TJBQR0
>>447
うん調べてみるよ
ありがとう

>>448
そんな視点もあるのか
他のプロセスも考慮しないといけない
思ったよりも数段以上やっかいだな
0450デフォルトの名無しさん (ワッチョイ 2f05-73UM)
垢版 |
2019/05/06(月) 10:19:59.43ID:Om5TJBQR0
>読み込んだデータを使ったら、すぐに捨てないといけない

データをガンガン読み込んでいくようなプログラムだと「使ったらすぐ捨てる」のが鉄則か
0451デフォルトの名無しさん (ワッチョイ d701-LHRJ)
垢版 |
2019/05/06(月) 10:40:24.77ID:F7BEaxMm0
>>439
ユーザープロセスなのでカーネル空間はマッピングされないよ。プロセス管理のための領域はカーネル空間に多少は確保されるとは思うけど、それはユーザープロセス用ではないし。
ページサイズの関係で効率的に確保できるかどうかは別問題だけど仮想メモリ領域いっぱいまで取れるか否かと言えば取ることはできる。
実際にそんなことしたらスワップ発生しまくりでまともに動かないとは思うけど。
0454デフォルトの名無しさん (ワッチョイ 4321-QjK4)
垢版 |
2019/05/06(月) 21:20:46.06ID:lSipB+Y80
配列にある16進数アスキーを
整数型変数に数値として入れたいのですが、上手くいきません。
valの値をprintfで出力しても「0」になります。

rbuf[5]の中身は「0xDC」
rbuf[6]の中身は「0x18」でした。(printfで出力してみたところ。)


#include <stdio.h>
unsigned char sbuf[255] = {'\0'}; //送信バッファ
unsigned char rbuf[255] = {'\0'}; //受信バッファ
unsigned char work[10] = {'\0'}; //ワークバッファ
unsigned int val = 0; //値

work[0]=rbuf[5];
work[1]=rbuf[6];
work[2]='\0';
sscanf((char *)work, "%x", &val);

よろしくお願いします。
0455デフォルトの名無しさん (ワッチョイ f701-EPtf)
垢版 |
2019/05/06(月) 21:29:36.69ID:v87Zm/5a0
sscanf の %x は、文字列で記述された数字+アルファベットの列を 16進数として抜き出す
sscanf("10", "%x", &val); → val の値は 10進で16 となる

0xDC 0x18 の並びから どういう整数値にしたいんだろうか?
0456454 (ワッチョイ 4321-QjK4)
垢版 |
2019/05/06(月) 21:38:34.55ID:lSipB+Y80
>>455
回答ありがとうございます。
val=0xDC18
という感じで取り出したいです。
0458454 (ワッチョイ 4321-QjK4)
垢版 |
2019/05/06(月) 21:50:08.40ID:lSipB+Y80
>>457
ありがとうございます。そういうことか・・・
下記で上手くできました!

val= rbuf[5];
val = val << 8;
val |= rbuf[6];
0461デフォルトの名無しさん (アウアウウー Sabb-vI8p)
垢版 |
2019/05/06(月) 22:06:19.06ID:NYoOX9LAa
>>454
> rbuf[5]の中身は「0xDC」
> rbuf[6]の中身は「0x18」でした。(printfで出力してみたところ。)

だったらそれはASCIIではないよね。
0462デフォルトの名無しさん (アウアウウー Sabb-vI8p)
垢版 |
2019/05/06(月) 22:08:02.81ID:NYoOX9LAa
などと、ゆっくり書いていたら既に解決か・・・
0463デフォルトの名無しさん (ワッチョイ 4321-QjK4)
垢版 |
2019/05/06(月) 22:09:16.82ID:lSipB+Y80
>>460
>>461
ありがとうございます。
お陰様で解決できました。
勝手にASCII、文字列と勘違いしていたのがよくなかったです。
0472デフォルトの名無しさん (ワッチョイ 9f79-ScLU)
垢版 |
2019/05/09(木) 23:03:35.49ID:vEdVh+9n0
質問です
文字列の配列
char matrix[Y][X]を関数に引数として渡して、渡した先の関数でtxtファイルに出力したい。
YとXはその時々によって違う値でmatrixは文字列の配列だけど1行ごとに'\0'が入っていないとき、渡した先の関数でYとXをどうやれば参照できますか?
例えば
matrix = {{‘a’, ‘b’, ‘c’}, {‘d’, ‘e’, ‘f’}};
みたいな配列です
0477デフォルトの名無しさん (アウアウウー Sa1b-wdoq)
垢版 |
2019/05/10(金) 09:44:04.32ID:0Zlxa6bHa
そう。他の言語だと裏でこっそり渡すようになっていたりしてプログラムに書かなくても動くかも知れないが、Cはそこまでやってくれない。
0480デフォルトの名無しさん (ワッチョイ bf02-y0Vo)
垢版 |
2019/05/10(金) 23:50:49.39ID:svzEPJh90
え?読んでもわからなかったの?
0482はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf3e-gMth)
垢版 |
2019/05/11(土) 09:55:06.58ID:GtXmrqj00
>>481
リンクを示すのも、ググればわかるようなことにググれというのも対話だよ。
対話を終わらせてるのはお前だろ。

リンク先を見て意味がわからんかったならどうわからなかったか、
よりよい説明があると思うならそれを示してもいい。
望むことだけ欲しいというのは対話とは言えんよ。
0486デフォルトの名無しさん (ワッチョイ 9f2d-y0Vo)
垢版 |
2019/05/11(土) 19:10:51.09ID:HOBfdmGr0
Cの上位互換(?)として、C++がありますが。C++は覚えた方がいいですか?
もしくは、CとC++を両方覚えたら、Cは不要になり、C++でコードを書くようになりますか?
C++でできることはCでもできるように見えますので、ならCだけでいいようにも思えたり。
0488デフォルトの名無しさん (ワッチョイ 375f-PSXp)
垢版 |
2019/05/11(土) 19:21:03.92ID:2v2BzL6t0
>>486
言っておくが、python,C++,Java,javascript,C#,shellでできる事はC言語でも出来る
更に君が作ろうとしてるものや、やりたいことは、もう誰かが作ってる
ましてや大規模になると、googleとかamazonと戦う羽目にもなる
それが嫌ならプログラミングなんて辞めとけ
0491はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf3e-gMth)
垢版 |
2019/05/11(土) 21:28:03.11ID:GtXmrqj00
>>490
既に解説があると示すのも質問に対する回答として十分だし、それで不満な理由がまるでわからん。
それが対話でないと断言するのも意味がわからん。
結局のところどうして欲しいの?
0492デフォルトの名無しさん (アウアウウー Sa1b-wdoq)
垢版 |
2019/05/11(土) 22:15:36.12ID:YLmnNEXIa
きっと寂しいんだよ。
0494はちみつ餃子 ◆8X2XSCHEME (ワッチョイ bf3e-gMth)
垢版 |
2019/05/12(日) 10:19:15.38ID:l86zXz3/0
>>493
そう決めつけて続きを拒むなら「一方的な押し付けしか頭にない」「対話がない」というまさにそれでしかなくね?
意味がわからんから解説してくれっての。
わからんことを理解する必要があるから対話になるんだろ。
0496デフォルトの名無しさん (ワッチョイ 9f52-tfUF)
垢版 |
2019/05/12(日) 11:57:36.56ID:7nn+3/Jt0
>>495
意見を全否定って、そりゃ異なる意見があるのは当然だろう。異なる考えなら議論にならないなんて、議論する気が無いだけだろう。

ついでだが、俺もお前さんの意見には反対だ。自分の言葉で書くかはまったく重要ではないと思う。お手軽に書ける掲示板のレスは言葉足らずだったり不正確な表現なことも多々あるが、それよりきちんと纏まった情報をリンクされた方がありがたいことも多い。
0497デフォルトの名無しさん (ワッチョイ d7f6-y0Vo)
垢版 |
2019/05/12(日) 12:19:14.09ID:VeGHf8Lz0
>>496
意見が異なるのと全否定は違うぞ
自分はこう思うと述べるのと
おまえは間違っているというのの違いだ

よくいるんだよ、どっかからの受け売りを壊れたレコードみたいに繰り返すだけなやつとか
俺は自分の知見からは何も出てこないのかよと思うことがあるが
おまえはそれで満足なら勝手に満足してろよ

そこが俺とおまえの違いだな
0498デフォルトの名無しさん (ワッチョイ 9f79-ScLU)
垢版 |
2019/05/12(日) 15:34:15.26ID:SbCKIsfP0
質問です
テキストファイルから文字を1文字ずつ読み込んでchar型の2次元配列matrixに入れていきたい。
この時改行は配列に入れたくないときどうすれば良いですか?

うまくいかないコード
for (i=0;i<10;i++) {
for (j=0;j<10;j++) {
if (fgetc(fp) == ‘\n’) {
continue;
}
matrix[i][j] = fgetc(fp);
}
}


テキストファイルは行数と列数があらかじめ分かってるとして
例えば
AAAAAAAAAA
BBBBBBBBBB

のようなファイルです
0506デフォルトの名無しさん (ワッチョイ 577b-djxj)
垢版 |
2019/05/12(日) 17:35:10.27ID:x4ccFx6b0
>>498
「うまくいかない」症状を見れば、もう少し見当がつくんだけど…。
格納先の配列を char matrix[LINES][CHRS]; とか定義して、
printf("%s\n", matrix[n]); で表示してるの違うかな。

各行の文字列の末尾にあるべき '\0' が格納されてない、みたいな。
0507デフォルトの名無しさん (ワッチョイ ff63-gMth)
垢版 |
2019/05/12(日) 17:36:33.22ID:JjryTeWM0
2重ループやめても良いか?
 while (1) {
  int c = fgetc(fp);
  if (c == EOF) {
   break;
  }
  if (c == '\n') {
   continue;
  }
  matrix[i][j] = c;
  j++;
  if (j == 10) {
   i++; j = 0;
  }
 }
0512デフォルトの名無しさん (オッペケ Sr8b-lJiK)
垢版 |
2019/05/14(火) 06:41:01.67ID:7SLYc+Rqr
OSSで構造体を公開しようとおもってる

そのサイズをバージョンアップしても固定にしたいんだけどいいアイデアないかな?
struct foo {
int a;
double b; // ここをバージョンアップで追加
}

char[100] buffer;

上記を予め含めておいて、追加サイズ分だけ減らすってのがよくある手段だと思うけど、intや他の型が固定サイズの保証はないから、処理系をかんがえると使えない
パディングでサイズも変わっちゃうしね

C++ならテンプレートでいけるけど、OSSだから利用者が多いC言語で書いておく必要がある
構造体を公開しないで、ハンドラとセッタで扱えばいけるだろうけど、今回は構造体でいきたい
0513デフォルトの名無しさん (ワッチョイ 9ff9-vVMj)
垢版 |
2019/05/14(火) 08:01:00.18ID:YNmKUGxB0
「sizeof(int)が環境依存」を前提にするなら
バージョンアップ以前のint a;だけでもう既にサイズ固定じゃないじゃん
int32_tですら必ずある保証はないよ

「汎用な記述で全ての環境に対応したい」ってのが、土台無理な注文なのよ
低レベルなことやるなら、サポートする環境を列挙限定しなければならない

素直に「よくある手段」でやりなさいってことだ
0515デフォルトの名無しさん (オッペケ Sr8b-lJiK)
垢版 |
2019/05/14(火) 08:25:38.55ID:7SLYc+Rqr
>>513
たしかにint aですでに違うね
ただ今回考えてるのは、コンパイルせずに共有ライブラリを差し替えるって状況を想定してる
そのときにセグメンテーションフォールトがでないようにしたい
だから、すべての処理系で同じサイズにしたいってわけじゃなくて、同じ処理系の中ではバージョンにかかわらずサイズを保ちたいってことなんだよね
説明不足ですまん
0518デフォルトの名無しさん (ワッチョイ ff69-PnGR)
垢版 |
2019/05/14(火) 13:59:44.65ID:d9/Wmgv60
構造体の大きさが char[100] に収まってる範囲での話
>>512 のように末尾に用意したギャップを引き算していくにしても、引ききれなくなった段階で破綻するよね

※ 突破したことをチェックするには sizoef(union foo) と sizeof(char[100]) とを比較すんのかなぁ…
0523デフォルトの名無しさん (ワッチョイ bf54-vVMj)
垢版 |
2019/05/14(火) 21:12:50.85ID:8soz04JH0
>>512

不格好だけどこれでいけるよ
全部プリプロセッサで処理できて、構造体サイズは100バイト固定になる。
予想を超えてサイズを突き破った場合は別構造体作るしかないね。

#include <stddef.h>

struct inner_foo {
int a;
char buf[];
};

#define MAX_STRUCT_SIZE 100
#define BUF_SIZE (MAX_STRUCT_SIZE - offsetof(struct inner_foo, buf))

struct foo {
int a;
double b;
char buf[BUF_SIZE];
};
0524デフォルトの名無しさん (ワッチョイ 577b-djxj)
垢版 |
2019/05/15(水) 07:47:15.99ID:FPbZusNo0
>>523 ちょっと間違ってるみたい。
struct foo には struct inner_foo に double b; が追加されてるせいで
sizeof(struct foo) == MAX_STRUCT_SIZE にならない。
sizeof(struct foo) == MAX_STRUCT_SIZE + sizeof(double) になっちゃう。

inner_foo と foo とで char buf[] より前のメンバを一致させる必要がある。
0528デフォルトの名無しさん (アウアウウー Sa1b-wdoq)
垢版 |
2019/05/15(水) 09:32:21.44ID:k0yjAgrYa
やっぱ int32_t みたいな環境に関係なく同じビット数になるやつにしといた方が良いんじゃないかな。
0529デフォルトの名無しさん (ワッチョイ ff69-PnGR)
垢版 |
2019/05/15(水) 09:45:02.94ID:25auY+1H0
515の
>ただ今回考えてるのは、コンパイルせずに共有ライブラリを差し替えるって状況を想定してる
>そのときにセグメンテーションフォールトがでないようにしたい

構造体のパラメータを追加し共有ライブラリを差し替えつつ
呼び出し側のコンパイルは行わないって無理ないか?

旧ソースで追加されたパラメータ部分は不定値であって
その不定値をうけて共有ライブラリ内部が正しく動作できるとは思えないが…
0532デフォルトの名無しさん (オッペケ Sr8b-lJiK)
垢版 |
2019/05/15(水) 12:31:29.02ID:dMKqDPXvr
>>529
呼び出す側がバージョン情報をもっておいて、処理側で振り分けてアクセスしないようにすれば問題ないね

#define version 2

void func (const struct* foo) {
func_impl(foo, version);
}


void func_impl(const struct* foo, int version) {
if (version > 1) {
foo.b;
}
}
0533デフォルトの名無しさん (ワッチョイ ff69-PnGR)
垢版 |
2019/05/15(水) 12:43:05.74ID:25auY+1H0
>>532
そのバージョン情報の数字を埋め込むのに一番適度なのは実構造体のサイズって話に(>>525)

>>531 のような背景なら
ペイロードサイズは触りたくない ってのは納得できるな
バージョン違いの吸収法は別途必要だけど
0534デフォルトの名無しさん (アウアウウー Sa1b-wdoq)
垢版 |
2019/05/15(水) 12:53:24.07ID:k0yjAgrYa
構造体の中身を公開しないでポインタだけ使わせて読み書きする関数を別途用意するって方法もあると思う。オブジェクト指向の言語でのプロパティのようなものね。
内容のファイルへの読み書きやネットワークでのやり取りはそれようにデータをpack、unpackする処理を作ってそこにバージョン番号も埋め込む。
0535デフォルトの名無しさん (ワッチョイ 9ff9-vVMj)
垢版 |
2019/05/15(水) 12:59:51.65ID:Wbf0zcGJ0
exeがnew(malloc)するけど中をいじるのは全てdllの関数ってのはままある
dllだけ差し替えで済ましたい、サイズが変わらなければexeはビルドし直さなくていいのに…
ってことだろう

>512の
>intや他の型が固定サイズの保証はないから、処理系をかんがえると使えない
>パディングでサイズも変わっちゃうしね
は全く関係ない話だったということだ

素直に「よくある手段」でやればいい

>514,517のunionもいいと思うけど
foo.aでアクセスできないよね?foo.body.aとかしないと
0537デフォルトの名無しさん (オッペケ Sr8b-lJiK)
垢版 |
2019/05/15(水) 14:41:00.06ID:dMKqDPXvr
>>535
intが4バイトなんて保証はないから、char[] bufの大きさを決められないって話でしょ?
intメンバを追加したとして、bufのサイズはどれだけ減らせばいいのかわからないのが問題
4の環境が多いだろけど、2の環境だと2を減らさなきゃいけないわけで

dll差し替えで再ビルドしない場合、構造体サイズが変わると特に配列渡しの場合はセグメンテーションフォールトになる可能性が高くて危険
セーブデータみたいに構造体をそのままファイルに落とすとしても、サイズはずっと不変なのが扱いやすいね
0538デフォルトの名無しさん (アウアウウー Sa1b-NBbm)
垢版 |
2019/05/15(水) 14:56:07.34ID:e9I3VVqQa
数字付かないintのでかい方に合わせるなら、それこそunion使って明示的にオフセット決めるとか。
本当にそんなことしたいのか?という話は置いといて。
もちろんint32_tとかint_least32_t使う方がいいし、本当に位置合わせするならバイト位置指定して読み書きするし、そもそもサイズ固定せずにシリアライズ用のライブラリ使うのが正しいよ。
0543デフォルトの名無しさん (ワッチョイ 29ad-BnNU)
垢版 |
2019/05/16(木) 19:38:59.34ID:GXqxfUU20
文字配列列sを逆順に文字配列tに格納して出力したいのですが、
以下のコードでは実行してもt=[]と出力されてしまいます
#include <stdio.h>
#define MAXLINE 1000
main()

{
char s[MAXLINE],t[MAXLINE];
int c,i,I;

for(i=0; i<MAXLINE-1 && (c=getchar())!=EOF && c!='¥n'; ++i)
{
s[i]=c;
}
if(c=='¥n'){
s[i]=c;
++i;
}
s[i]='\0';

I=i;
for(i=i; 0<=i; i=i-1)
{
t[I-i]=s[i];
}

printf("t=[%s]",t);
}

どこがおかしいのでしょうか…
0544デフォルトの名無しさん (ワッチョイ 3f01-pg4x)
垢版 |
2019/05/16(木) 19:48:10.73ID:q0J7kB7g0
後のループの一発目は

s[i]='\0';
I=i;
/* ここのforを削って */
t[I-i]=s[i];

こういうことになるから

t[0] = s[i] ってことになって t[0] = '\0'; をやってることになる
上記のは
  1 2 3 4 \0 → \0 4 3 2 1 のコード
実装すべきなのは
  1 2 3 4 \0 → 4 3 2 1 \0 となるコード
0545デフォルトの名無しさん (アウアウウー Sa83-RNyv)
垢版 |
2019/05/16(木) 20:27:22.18ID:m1+/MMjMa
惜しいねえ。綺麗に逆に入ってはいるんだよな。
0551 ◆QZaw55cn4c (ワッチョイ ea47-8NB0)
垢版 |
2019/05/18(土) 22:07:47.63ID:Pqc0+ZP00
>>549
ODBC 経由ならできますが…昔、ハンドルのキャストをとちったミスを、その意味不明の動きから突き止めるのは大変でした
ODBC を直書きする情報はネットにほとんどありませんね
0562デフォルトの名無しさん (アウアウウー Sa83-RNyv)
垢版 |
2019/05/19(日) 17:49:51.40ID:V/GPYpFPa
この頃は間に何かライブラリ挟んでDB変わってもSQL文がほぼ同じままで行けるようなのが流行りなのでは?
0570デフォルトの名無しさん (オッペケ Sr88-2aw6)
垢版 |
2019/05/20(月) 12:44:26.31ID:PSRVLRmYr
コンピュータサイカヨウの基本は一通りやるんじゃない?
情報処理試験の基本レベルくらいのもの
初心者は実務にはそのままは使えないけど、中級以上のエンジニアならこのあたりの知識があると差がついてくるね
0571デフォルトの名無しさん (ワッチョイ 328c-TfzP)
垢版 |
2019/05/20(月) 14:12:04.87ID:0d3wAWyu0
業務のほとんどは手作業の自動化だから差は出ない。そしてみんなリストラされる。
0580デフォルトの名無しさん (ワッチョイ 9602-XAPB)
垢版 |
2019/05/21(火) 02:21:13.21ID:Y+BS98b80
>>574
FILE * 経由で出力する printf() 等は内部でバッファリングしていてバッファがいっぱいになったらまとめて出力する(出力先が端末の場合は行単位で出力する)。
そのバッファを自分で指定した領域を使わせるか、またはなしにできるのが setbuf()。更に自由に大きさやモードも指定したいなら setvbuf() を使う。

バッファリングに関して考慮しなくても良い入出力をする場合は read(), write() で行う。この場合は全くバッファリングされないので少ないバイト数の入出力が多いと遅くなる。
それと printf() のようなフォーマットを考慮した出力はないので必要なら自作する。
0581デフォルトの名無しさん (ワッチョイ 9602-XAPB)
垢版 |
2019/05/21(火) 02:26:07.71ID:Y+BS98b80
>>576
open()してwrite()で1バイトづつ書くのとまとめて書くのとではバイト数によっては大幅に違いが出ると思う。環境依存ではあるが。
0582デフォルトの名無しさん (ワッチョイ ae2c-uMtI)
垢版 |
2019/05/21(火) 03:47:59.45ID:jVHVO/YL0
>>581
大きなファイルの入出力を高速化したい時はsetbuf(fp,buf)
バッファリング無しにしてバッファをフラッシュするタイミングを順番に逐一実行させたい時はsetbuf(fp,NULL)
みたいな感じでええんかな?
0583デフォルトの名無しさん (ワッチョイ 9602-XAPB)
垢版 |
2019/05/21(火) 03:58:34.93ID:Y+BS98b80
>>582
setvbuf()で自分でバッファの大きさ決めてしまった方が良いかも。
0586デフォルトの名無しさん (ワッチョイ 462d-EL+e)
垢版 |
2019/05/21(火) 06:44:08.98ID:UPiNM42a0
>>584
20年前くらいの知識で、しかも完全に理解してるわけではないので、間違っていたらゴメンだけど。

変数について言えば、Java の final 変数は、値が未定義かどうか、という情報を内部的に持っていて。
もし、変数の値が未定義の場合は、1回だけ代入できたはず。例えば

final int i;
System.out.println("test");
i=4;
System.out.println(i);
i=5;
System.out.println(i);

の場合、1回目の代入(i=4)は許されるけど、2回目の代入(i=5)は怒られる。

それに対して、(C89の頃のだけど)Cのconst変数は・・・

const int i;
printf("test\n");
i=0;
printf("%d\n",i);

1回目の代入(i=0)であっても怒られる。

みたいな感じの違いはあったような。最近のCやJavaは知らないんだけどね。
あまり自信がないので、詳しい方のレスを待ちましょう。
0588デフォルトの名無しさん (オッペケ Sr88-2aw6)
垢版 |
2019/05/21(火) 07:08:29.24ID:6muVxYSDr
>>585
今どきのディスクならほぼ遅延書き込みしてるといってもいいね
バッファには二段階あって、
@プロセスが持ってるバッファ
AOSが持ってるバッファ

flush関係のライブラリ関数やシステムコールは@をAに吐き出す
Aを吐き出すにはLinuxだとfsyncもしくはfdatasync
0589デフォルトの名無しさん (アウアウウー Sa83-RNyv)
垢版 |
2019/05/21(火) 09:19:53.31ID:BVi2WQ22a
>>584
Cはポインタの指す先が const という指定ができるがJavaは配列の要素まで final にする指定ができなかったと思う。
つまり配列やクラスそのもののインスタンスへの参照は final にてきる。しかし参照される中身までは final にできず書き換え可能(クラスの場合はpublicのクラス変数とか、外部から書き換えられるようになっていれば書き換えられる)。

ま、ちょっと試してみな。
0590デフォルトの名無しさん (ワッチョイ f6d2-cXFR)
垢版 |
2019/05/21(火) 10:05:33.15ID:DLRGb2lZ0
LTOのオプション
を使ってコンパイルすれば
インライン関数をヘッ
ダーに書かなくても
勝手にインライン化できるものはインラ
イン化してくれる
という理解で
あってますか?
0591デフォルトの名無しさん (アウアウウー Sa83-RNyv)
垢版 |
2019/05/21(火) 10:21:18.62ID:BVi2WQ22a
>>590
それコンパイラ依存なのでは?
0595デフォルトの名無しさん (ササクッテロル Sp88-Qul6)
垢版 |
2019/05/21(火) 18:37:21.97ID:G/IUf+gXp
C言語のfprintfを用いるときに、前行の改行を消す方法をご存知ないですか?
エスケープシーケンスでバックスペースを試したのですか上手くいかなくて困っています。

状況としてはfor文を用いて改行を含んだ文字列を繰り返し出力させているんですが、最後の行だけ改行を無くし、続けて別の文を出力したいのです。
繰り返しの回数を変えて最後に改行なしの処理をいれればいいと思うのですが、簡単な方法があればと思い質問させていただきました。
よろしくお願いします。
0598デフォルトの名無しさん (ワッチョイ ee02-8NB0)
垢版 |
2019/05/21(火) 19:19:14.41ID:IJ+i04U80
こんな感じでいいのか?

#include <stdio.h>
int main(void) {
FILE* fp;
fp = fopen("Test.txt","w");
fprintf(fp,"hoge\n");
fseek(fp,-1,SEEK_CUR); /* 改行2byteなら-2 */
fprintf(fp,"fuga\n");
fclose(fp);
return 0;
}
0599デフォルトの名無しさん (ワッチョイ 462d-EL+e)
垢版 |
2019/05/21(火) 19:53:55.55ID:UPiNM42a0
質問者が知りたい情報とは違うので、スルー推奨かもですが。

もし自分が、同じことをやれ、と言われたら。
「改行を含んだ文字列」を、「改行」と「それ以外の文字列」の2つに分けて、別々に出力しようとするかなあ。
ループの回数を変える必要はなくて。イメージとしては

for() ※行単位のループ
{
if(最初の行でなければ) fprintf で「改行」を出力

fprintf で「それ以外の文字列」を出力
}
fprintf で「別の文を出力」
0602デフォルトの名無しさん (ワッチョイ ee02-8NB0)
垢版 |
2019/05/21(火) 20:07:13.38ID:IJ+i04U80
ファイルが標準出力等でvt100互換端末であれば。
#include <stdio.h>
#include <string.h>
int main(void) {
int i;
i=fprintf(stdout,"hogehogehogehoge\n");
if (0) fprintf(stdout,"\E[01Afuga%*c\n",i,' '); /* これか? */
else fprintf(stdout,"\E[01A\E[%02dCfuga\n",i-strlen("\n")); /* あるいはこれか? */
return 0;
}

cmdとかdos窓なら無理?
0603デフォルトの名無しさん (ササクッテロル Sp88-Qul6)
垢版 |
2019/05/21(火) 20:22:57.69ID:G/IUf+gXp
>>596-602
皆様回答ありがとうございます。
ファイルを扱っているので、fseekで戻す方法を試してみようと思います。
0605デフォルトの名無しさん (ワッチョイ aaf9-8NB0)
垢版 |
2019/05/21(火) 20:31:52.25ID:8vKfOnx40
ansi.sysを組み込めばVT100互換エスケープシーケンスが
という昔話…と思ったが、ググったらvistaまであったんだな驚き
Windows 10 Threshold 2(10.0.1058)ではコマンドプロンプトでANSI/VT100互換表示が可能に
というスラドの記事も出た
0606デフォルトの名無しさん (アウアウウー Sa83-RNyv)
垢版 |
2019/05/21(火) 20:52:46.26ID:BVi2WQ22a
最後に改行出すんじゃなくて最初に改行出すようにすれば良いだけでは?
一番最初の行だけは最初に出さなければ良いだけ。
バッファリングされて出力されないのが嫌なら行末でfflush()する。
0608デフォルトの名無しさん (ワッチョイ 9602-XAPB)
垢版 |
2019/05/21(火) 22:06:40.11ID:Y+BS98b80
>>607
おお。既にあった。
さっきスマホで見てて気付かなかった。
0609デフォルトの名無しさん (ワッチョイ 1e01-Qul6)
垢版 |
2019/05/21(火) 22:09:47.12ID:JtLDtEYt0
>>604-607
603です。>>600の意味をちゃんとわかってませんでしたが、>>606の方のレスでわかりました。
>>600の方が安全な気がするのでそちらを検討します。
0610デフォルトの名無しさん (ワッチョイ dfb9-9b2Z)
垢版 |
2019/05/24(金) 09:00:19.45ID:h3dkW7YJ0
C言語はクラスが無い。
それは実際どれくらい問題になりますか?

昔C使ってたけど、本格的な抽象的設計をやってたわけじゃなくて、
最近Java使っててそういうのをやりだしたけど、
今思い返してみるとC言語はクラスや継承や多態性が無いから
かなり厳しい言語なんじゃないかな、と思ったんです。

メジャーなカーネルがCで作られてるという事実に驚愕します。
クラス無しで大規模開発は不可能としか思えません。
それどころか、1アルゴリズムの実装でもクラスは有用だと思うんですが。

最近、NimとかRustのようなCを代替するかもしれない勢いのある言語があります。
そういう言語はかなり抽象的な設計が可能です。
そういうのと比べると、小さなデバイスドライバみたいなものはCでいいだろうけど、
大規模開発におけるCはかなり無理があるんじゃないかな?と

そうでもないものですか?
0613デフォルトの名無しさん (ワッチョイ dfb9-9b2Z)
垢版 |
2019/05/24(金) 10:43:06.36ID:h3dkW7YJ0
Linuxカーネルは2100万行を超えているそうなので
たぶん地球上でもっとも大規模な開発の1つです。
0614デフォルトの名無しさん (ワッチョイ bf8c-GX6Y)
垢版 |
2019/05/24(金) 11:21:47.36ID:0dR+L/D60
責任ある人は気がくるっているじゃない。
0615デフォルトの名無しさん (アウアウウー Saab-EYzY)
垢版 |
2019/05/24(金) 12:25:59.56ID:Cw+6mW4za
Cでもオブジェクト指向的に考えて作ることは可能。構造体へのポインタまたは情報を区別する番号などを渡してその中身に基づいて処理する関数作ればいいので。
ファイルアクセスとかは作りがそうなってるよね。
0620デフォルトの名無しさん (アウアウウー Saab-EYzY)
垢版 |
2019/05/24(金) 12:59:14.48ID:Cw+6mW4za
まあしかしC++は複雑怪奇な状態になったような感じがするのでなんか別の言語でオブジェクト指向やった方が良いような気がする。
0625 ◆QZaw55cn4c (ワッチョイ df47-SwLn)
垢版 |
2019/05/24(金) 20:26:08.87ID:0N6+tWvP0
>>615
>Cでもオブジェクト指向的に考えて作ること
あくまでも「オブジェクト指向『的』」であることに注意すること
C ではオブジェクト指向を実現できない(断言)
0626 ◆QZaw55cn4c (ワッチョイ df47-SwLn)
垢版 |
2019/05/24(金) 20:27:08.05ID:0N6+tWvP0
>>617
>C言語ではオブジェクト指向も関数型プログラミングもできる

C ではオブジェクト指向はできない(断言)
継承をCでどのように記述するのでしょうか?
0627 ◆QZaw55cn4c (ワッチョイ df47-SwLn)
垢版 |
2019/05/24(金) 20:27:59.68ID:0N6+tWvP0
>>622
>linux kernelなんておもくそオブジェクト指向的な構造だろ

あくまでも「オブジェクト指向『的』」であってオブジェクト指向そのものではありません(断言)
0628デフォルトの名無しさん (アウアウウー Saab-EYzY)
垢版 |
2019/05/24(金) 20:41:47.14ID:1FXcUtRQa
いやできなくはないよ。何せC++は元々はCへのコンバータだったしな。C++のソースを読んでC言語に変換して後のことはCコンパイラに任せてたんだよ。それが初期のC++。

もちろんCは言語そのものがオブジェクト指向をサポートしてないから人間がそれをやろうとするととても面倒な事になるけどな。
0629デフォルトの名無しさん (ワッチョイ e701-/OyN)
垢版 |
2019/05/24(金) 20:51:16.47ID:E0qJKDus0
そんなん言い始めたらアセンブラでもオブジェクト指向プログラミングできることになっちゃう。
言語としてOOPがサポートされてなきゃ認められないでしょ。
0630 ◆QZaw55cn4c (ワッチョイ df47-SwLn)
垢版 |
2019/05/24(金) 21:00:32.57ID:0N6+tWvP0
>>628
>C++のソースを読んでC言語に変換して後のことはCコンパイラに任せてたんだよ。それが初期のC++。
C++ から C へのトランスパイラが存在したからといって、C にてオブジェクト指向(的ではなくそのものずばり)なプログラミングができるわけではありません
C++ のコンパイラが存在するからといって機械語が OO でないのと同じです、まず、

C++ https://ideone.com/vAp2Sj

に対応する C のコードを示してください
0632デフォルトの名無しさん (ワッチョイ 67f6-dCWx)
垢版 |
2019/05/24(金) 21:12:51.85ID:ZwmHdTYl0
>>610
全く問題にならない
classというキーワードがなくても
コードを書く者の考え方次第でカプセル化や継承はできる
FILE構造体がその例だ
多態性がないというのは、おまえさんの認識不足で
関数ポインタでそんなものはすぐに実現できる
そういう認識不足があるからこそ
メジャーなカーネルをなぜ書けたかが理解できないのだ
0635 ◆QZaw55cn4c (ワッチョイ df47-SwLn)
垢版 |
2019/05/24(金) 21:45:54.65ID:0N6+tWvP0
>>632
>classというキーワードがなくても
>コードを書く者の考え方次第でカプセル化や継承はできる

C ではカプセル化はできても継承は不可能ですよ
0636 ◆QZaw55cn4c (ワッチョイ df47-SwLn)
垢版 |
2019/05/24(金) 21:46:59.73ID:0N6+tWvP0
>>633
>対応するCのコードを示せるやつがいたら、おまえどうする?
あなたができないことをそんなにアピールしなくてもいいと思いますよ
0641 ◆QZaw55cn4c (ワッチョイ df47-SwLn)
垢版 |
2019/05/24(金) 22:17:20.89ID:0N6+tWvP0
>>638
ではストロヴストルップやリップマンはどういっているのか、ここに引用していただけますか?
あらかじめいっておきますが、引用はできない、なぜならば、そんな内容をストロヴストルップもリップマンも書いていないのだから
0642デフォルトの名無しさん (ワッチョイ df01-LXA5)
垢版 |
2019/05/24(金) 22:18:09.05ID:TMKOHW7N0
>>625-627, >>629
オブジェクト指向と言う概念と実装の区別がついてないんだな
低能なプログラマーによくある行動w

例えばLinuxで言えばリダイレクトなんて言うのはもろオブジェクト指向な機能だよね
Applicatlon > xxx
ってやればxxxがファイルならApplicatlon が出力したデータをファイルに書き込むし、xxxが端末なら端末にデータを表示するし、xxxがプリンタならデータを印刷する
Applicatlonは出力先が何であるかを気にする必要はない
もちろんLinuxはC言語でこれを実現してるしより面倒だろうけど当然アセンブラで実装することも可能
0644 ◆QZaw55cn4c (ワッチョイ df47-SwLn)
垢版 |
2019/05/24(金) 22:21:27.40ID:0N6+tWvP0
>>640
>typedef struct C
>{
> A ThisA;
> B ThisB;
> int c;
>} C;

これは委譲であって継承ではありません。私は >>626 で「Cでは継承はできない」と主張しており、これを否定するために委譲は使えません
0647 ◆QZaw55cn4c (ワッチョイ df47-SwLn)
垢版 |
2019/05/24(金) 22:24:31.62ID:0N6+tWvP0
>>643
FILE は OO 的ではありますが、OO そのものではありません
OO というからには委譲とは別の継承を表現できねばなりませんが、
C では継承を表現できません
0655 ◆QZaw55cn4c (ワッチョイ df47-SwLn)
垢版 |
2019/05/24(金) 22:54:27.15ID:0N6+tWvP0
>>653
どうつじつまがあわないというのですか?説明ください
私は「OO ならば委譲と区別された継承を記述されなければならない」と主張しています
0658デフォルトの名無しさん (ワッチョイ c7c3-OWKl)
垢版 |
2019/05/24(金) 23:46:49.71ID:SCqWQYPI0
>>644
多重じゃない継承の場合Cでは1つめのメンバにベースクラスのインスタンスを書くというルールなだけ

それだけで呼び出し元のコードはほぼなにも考えずにベースクラスの機能を使うことができる
0659デフォルトの名無しさん (ワッチョイ bfba-GX6Y)
垢版 |
2019/05/24(金) 23:58:34.02ID:S5Q/uU3j0
>>655
CでもOOできるし、継承できるし、オーバーライドもできる。
20年位前の本に「ANSI C に準拠したコンパイラならできる」と紹介されている。

メモリを意識したコードを書けない人には理解できないけどね。
0660デフォルトの名無しさん (ワッチョイ dfb9-9b2Z)
垢版 |
2019/05/25(土) 00:01:58.97ID:7Hh+Cor80
C言語はABIが標準化されている、という文を見たんですが、
その標準仕様の名前は何ですか?

新しいプラットフォームがその標準仕様を満たせば
バイナリレベルあるいはソースレベルで移植性があるんでしょうか?
0662デフォルトの名無しさん (ワッチョイ c7c3-OWKl)
垢版 |
2019/05/25(土) 00:11:09.80ID:oops2jeN0
アーキテクチャ跨いでABIが統一できるわけないよね
引数の渡し方なんてアーキテクチャ変わったらそもそも使えるレジスタ変わるし

同一アーキテクチャの特定OS内ならバージョン変わってもABI互換ってのは良くあるけど
0668 ◆QZaw55cn4c (ワッチョイ df47-SwLn)
垢版 |
2019/05/25(土) 15:51:01.79ID:jppBZDTS0
>>658
>多重じゃない継承の場合Cでは1つめのメンバにベースクラスのインスタンスを書くというルールなだけ

C では構造体のメンバの順番をプログラムから指定することはできたのでしょうか?
C コンパイラはアラインメントを考慮して最適化をはかり構造体のメンバを、プログラマの記述から適宜入れ替えていもいいのでは?

となると一つめのメンバにベースクラスのインスタンスを書いても、コンパイラに入れ替えられてしまっては無意味なのでは?
0669 ◆QZaw55cn4c (ワッチョイ df47-SwLn)
垢版 |
2019/05/25(土) 15:52:11.46ID:jppBZDTS0
>>659
>CでもOOできるし、継承できるし、オーバーライドもできる。
できないとおもいますよ、できるというのなら >>630 を C で記述してみてください

>20年位前の本に「ANSI C に準拠したコンパイラならできる」と紹介されている。
出典を明記ください
0670 ◆QZaw55cn4c (ワッチョイ df47-SwLn)
垢版 |
2019/05/25(土) 15:53:43.84ID:jppBZDTS0
>>666
>てめえの怠慢を俺が尻拭いする筋合いはねえぜ
あなたは私の怠慢を主張するのと同様の筋で、私はあなたの欺瞞を主張します
出典元や引用を正確にできないのであれば、あなたは嘘をついていると判断されてもしかたがないと思います
0674 ◆QZaw55cn4c (ワッチョイ df47-SwLn)
垢版 |
2019/05/25(土) 17:02:40.54ID:jppBZDTS0
>>673
コメントありがとうございます。確かに >>668 には誤りが含まれていました

ISO/IEC 9899:1999
6.7.2.1.5
As discussed in 6.2.5, a structure is a type consisting of a sequence of members, whose
storage is allocated in an ordered sequence,

JIS X3010:2003
構造体は,メンバの列から成る型とし,メンバの記憶域は,並べられた順に割り付ける(6.2.5参照)。

しかし、この記述は構造体のパディングが構造体の先頭に詰められる場合を排除していないと考えます

よって、>>658
>多重じゃない継承の場合Cでは1つめのメンバにベースクラスのインスタンスを書く
>それだけで呼び出し元のコードはほぼなにも考えずにベースクラスの機能を使うことができる

構造体の先頭にパディングがあった場合は、この記述は正しくないのではないでしょうか。
0675 ◆QZaw55cn4c (ワッチョイ df47-SwLn)
垢版 |
2019/05/25(土) 17:37:11.41ID:jppBZDTS0
>>674
よくよく考えると、私の「この記述は構造体のパディングが構造体の先頭に詰められる場合を排除していないと考えます」もかなり疑わしい、
パディングというものは、一つのメンバがあって、それに対してもう一つのメンバを置くときにパディングを置くものであって、最初からパディングを置く必然性がないですね

struct S {
int a;
} b;
のとき
&b = &(b.a)
は保障されている、時間がたつにつれてそんな気がどんどんしてきました…

>>658 を認め、同時に単一継承であれば C で OO と継承を表現できることを認めます
0676 ◆QZaw55cn4c (ワッチョイ df47-SwLn)
垢版 |
2019/05/25(土) 18:11:59.97ID:jppBZDTS0
>>674
> a type consisting of a sequence of members, whose storage is allocated …
この is にも惑わされてしまいました
これは
a type consisting of a sequence of members, each of which is allocated about storage in an ordered sequence
とか
a type consisting of a sequence of members, each of which's storage is allocated in an ordered sequence
くらいに解釈するべきなんですね
検討する機会をいただきありがとうございました
0681デフォルトの名無しさん (ワッチョイ bfba-GX6Y)
垢版 |
2019/05/25(土) 23:25:49.27ID:KPhaQb+n0
>>669
C言語でオブジェクト指向を表現する (クラス、継承)
https://qiita.com/qiita_kuru/items/8f3441bce9b2f53d1d62
この辺でも読んどけ。

「何故できるか」まで言及したもっといい文献はあるがカスには教えない。
俺は「せざるを得ない」状況だったのでCでOOしたが、ネイティブでOOできるならそれに越したことはない。

あ、同じ板でハッシュが一致してるのでお前は蟻。
0685デフォルトの名無しさん (ワッチョイ df2c-o9SV)
垢版 |
2019/05/26(日) 12:29:05.12ID:lzKtO2WM0
でも冷静になって考えてみろ
単細胞時代から何億年と喧嘩してきた結果今の人間がいる訳だから喧嘩をやめてしまったらそれは果たして生物と言えるのか
逆に言えばAIが人知を超える時
人間は機械に滅ぼされ地球から人間はいなくなっているという事
つまり今何をすべきかと言うと人間は思考をやめアホになるべきである
そうアホの坂田こそ未来の救世主ネオなのである
0686 ◆QZaw55cn4c (ワッチョイ c798-SwLn)
垢版 |
2019/05/26(日) 15:17:23.15ID:CpBTYp0n0
>>681
そのご紹介のリンク先は、内容について、はっきりいって詰めが甘いです
すなわち、継承と委譲を区別できていません
そんな中途半端な理解で quita に掲載するとか、玉か石かどちらかといえば、石の部類でしょう、全然参考になりませんでした
そんな中途半端な内容の記事を掲載するあなたも同様と判断いたします
0687 ◆QZaw55cn4c (ワッチョイ c798-SwLn)
垢版 |
2019/05/26(日) 15:19:14.79ID:CpBTYp0n0
>>683
事実かどうかは、主観的か客観的か、に依存すると思いますが、
相対論においてはすべての事象について純客観的などありえない…@
ので、@より、あなたは主観を主張しているものと私は理解します
0688デフォルトの名無しさん (ワッチョイ df33-Fpyl)
垢版 |
2019/05/26(日) 15:46:43.76ID:aNhG7Lwu0
>>686
「継承」に必要な操作一式を委譲に基づいて提供できているなら継承できていると思うんだけど、
言語サポートを伴って暗黙的に機能しない限り「継承」と呼ぶべきではない、ということなの?
そこで明確に区別することにあんまり意義が見出せないんだけど、その定義どっか出典示せる?
0689 ◆QZaw55cn4c (ワッチョイ c798-SwLn)
垢版 |
2019/05/26(日) 15:52:14.70ID:CpBTYp0n0
>>688
委譲による実装で継承を実現できているのなら、それは継承(の一形態)である、…@ という主張ですね
@は私にも理解できますが、委譲はダイヤモンド継承を回避できない欠点があるのでは、と考えています
「ダイヤモンド継承」については C++ の書籍には大概載っているかと、具体的な書籍名は探しておきます
0691 ◆QZaw55cn4c (ワッチョイ c798-SwLn)
垢版 |
2019/05/26(日) 16:02:51.60ID:CpBTYp0n0
>>690
それは初耳です
Object Oriented に継承は憑き物だと思っていました、継承のない OO って存在するのですか?それは例えばなにですか?
0692デフォルトの名無しさん (ワッチョイ df33-Fpyl)
垢版 |
2019/05/26(日) 16:08:55.02ID:aNhG7Lwu0
>>689
ちょっと何言ってるかわからないな。
ダイアモンド継承の問題を「継承」で回避しているが委譲では回避できないであろう例を挙げてくれたら考える。

明確に区別しないことも理解できると言うなら「詰めが甘い」とか「中途半端」とか言ってたのは何なのか・・・。
0695 ◆QZaw55cn4c (ワッチョイ c798-SwLn)
垢版 |
2019/05/26(日) 16:40:12.48ID:CpBTYp0n0
>>692
クラス A, B, C, D について、
A のメンバ変数を a とする、また
B->A(B は A を派生する)
C->A
D->B, C (多重継承)
において、これを委譲で実装すると、B.A.a と C.A.a が同じであるべきにもかかわらず二重にインスタンスとして生成されてしまうので、
継承で実装した D.a を、委譲で実装した D.B.a と同一視するか、D.C.a と同一視するか、また継承における D.a を更新した場合に委譲では D.B.a と D.C.a の両方を更新するコードを生成しなければならないのか、
等あいまいな部分がでてくる、これがダイヤモンド継承問題です

継承で実装すれば、C++ ではこれを仮想継承といいますが D.a の実態を一つに限定することができますし、D.B.a, D.C.a の両方を保存することもできます、つまりモデリングにおいて選択肢を準備できる
しかし委譲で実装すると D.a の実態を一つに限定することが不可能です、つまり選択肢を準備できません

以上より委譲で継承のすべてを代行できないため、委譲と継承を区別する必要が生じると考えます
ただし、多重継承を認めないのであれば、委譲と継承は同一視しても差し支えないと考えます
0698 ◆QZaw55cn4c (ワッチョイ c798-SwLn)
垢版 |
2019/05/26(日) 17:08:49.07ID:CpBTYp0n0
>>692
>明確に区別しないことも理解できると言うなら「詰めが甘い」とか「中途半端」とか言ってたのは何なのか・・・。
「単一継承に限定するのならば委譲による継承の実装も可能である」という意味での>>689の「理解します」の文言だと解釈ください
ただし委譲で継承をすべて実現できないので、>>681 掲載のリンク先は「詰めが甘い」と判断せざるを得ない、そんなリンク先を紹介する >>681 も同様と判断するものです
0700デフォルトの名無しさん (ワッチョイ df33-Fpyl)
垢版 |
2019/05/26(日) 17:25:25.86ID:aNhG7Lwu0
>>695
C++が仮想継承・多重継承でやっていることをコードで書き下せば済む話。
アップキャストがnopで済むか、オフセットの足し算になるかなどの詳細に基づいて区別しろってことに
聞こえるんだけど、やっぱりそんな区別の意義が見えてこない。
0701デフォルトの名無しさん (ワッチョイ df01-LXA5)
垢版 |
2019/05/26(日) 17:39:21.34ID:kcdU4Ge60
もうそろそろ別スレ立ててやれや

> それは smalltalk 的な OO であって C++ の OO の概念とは多少食い違うと思います
とか言う様な奴を相手にしても永遠に終わらんと思うが…
0702 ◆QZaw55cn4c (ワッチョイ c798-SwLn)
垢版 |
2019/05/26(日) 17:50:19.72ID:CpBTYp0n0
>>700
>C++が仮想継承・多重継承でやっていることをコードで書き下せば済む話。
そこで実現されているのは私のいうところの継承であって、私のいうところの委譲ではありません
委譲ではダイヤモンド継承に対応できない(選択肢を提供できない)
したがって、委譲と継承とは区別するべきであり委譲で継承を実装するべきではない、という私の主観には一貫性があると思います
0704デフォルトの名無しさん (ワッチョイ df33-Fpyl)
垢版 |
2019/05/26(日) 18:07:56.35ID:aNhG7Lwu0
>>702
むちゃくちゃだなぁ。「私のいうところの」「継承」「委譲」の区別がどうにも掴めないし、
その区別の意義も示されなさそうだし、迷惑してる人もいるみたいだから、離脱させてもらうよ。
0705 ◆QZaw55cn4c (ワッチョイ c798-SwLn)
垢版 |
2019/05/26(日) 18:09:31.06ID:CpBTYp0n0
>>703
私がいつ「継承は要らない子」とかいいましたか?
あくまでも「継承を委譲で実装できない」とは言っていますが(これは部分的に意見を修正していますが)「継承不要論」とかは一切主張していないと考えていますよ
0710デフォルトの名無しさん (ワッチョイ 67f6-dCWx)
垢版 |
2019/05/26(日) 20:50:42.22ID:o+/j3IaP0
>>706
私のいうところのって、最初の論旨からずいぶん乖離しているな
カプセル化や継承ができるかどうかって話だっただろうがよ

いつから、おまえのお気に召すかどうかって話になったんだよ
0715デフォルトの名無しさん (ワッチョイ 87d2-Ni/X)
垢版 |
2019/05/27(月) 09:01:49.81ID:Nqk3VxBP0
stddef.hをインクルードして
#define __STDC_WANT_LIB_EXT1__ 1
を定義して
-std=c11をつけても
gccでrsize_tが使えないですけど
なぜですか?
windows版のGCCでは使えました
0717デフォルトの名無しさん (ワッチョイ 87d2-Ni/X)
垢版 |
2019/05/27(月) 09:34:14.79ID:Nqk3VxBP0
>>716
順番は試しましたが駄目でした
0719デフォルトの名無しさん (ワッチョイ bfba-9b2Z)
垢版 |
2019/05/27(月) 10:11:08.57ID:Zyn15i1D0
C#でポインタ使えばC、C++は無くても良いんじゃないですか?
0721デフォルトの名無しさん (ワッチョイ df79-buEI)
垢版 |
2019/05/27(月) 19:48:50.47ID:0mZL0xC90
C#のポインタはC/C++ほど使い勝手が良くない
C#でポインタを使ったところでパフォーマンスはC++の半分程度

まあトータルで見れば最優秀クラスの言語なのは間違いないけどね
C++みたいなスパゲティ言語ではないし
0722デフォルトの名無しさん (アウアウウー Saab-EYzY)
垢版 |
2019/05/27(月) 20:36:21.78ID:f4m/nmMua
まあ、だいたいの後から出た言語はC/C++の欠点を補おうとしているのでポインタがあっても安全なのが普通だな。
0726デフォルトの名無しさん (ワッチョイ dfb9-9b2Z)
垢版 |
2019/05/28(火) 09:09:59.25ID:HGTlDNNW0
数年前からこのプロジェクトがちょっと注目されてるけどどう思う?
RustはC++を置き換えてもCを置き換えないだろうと思うし、
ZigはCの置き換えとしては妥当なんじゃないかという気がする。
Cより高速、単純、堅牢らしい。
https://ziglang.org/
0727デフォルトの名無しさん (ワッチョイ dfb9-9b2Z)
垢版 |
2019/05/28(火) 09:29:30.01ID:HGTlDNNW0
Cより速いと主張
>Speaking of performance, Zig is faster than C.

単純な言語仕様
>Small, simple language

性能と堅牢性
>Performance and Safety: Choose Two

個人的にとても興味を持ってるんだが
0730デフォルトの名無しさん (ワッチョイ df01-1tV+)
垢版 |
2019/05/28(火) 19:02:59.10ID:Pzgny9jf0
https://www.datadeliver.net/receiver/file_box.do?fb=966f97555e424f19a29d0d866b4b3cf5&;rc=683943257e194056afc95195b542ba5d&lang=ja

キューを実装する?プログラムを書いたのだがコアダンプになってしまったため、どこが悪いのか調べるために1回だけenqueueをするように変えたら無限に10を生成するようになってしまった
どこが悪かったのか、どうして10が無限に生成されるのか、教えて欲しい

環境は学校の端末演習室でやったから詳しいことはわからんです
0732デフォルトの名無しさん (ワッチョイ dfa5-vAXu)
垢版 |
2019/05/28(火) 20:11:39.46ID:vL2LyOeQ0
「無限に10を生成するようになってしまった」「どうして10が無限に生成されるのか」
コレがポイントだな
無限に生成してるように見えるだけだよ

要するにprintが悪い
whileだと分かりづらいんだよ
forだとラク
「q->head = temp;」とか、自分で書いてて分からなかったんだろ
だからwhile文だとこのケースでは分かりにくくなる
forを試gうのが正解

void print(struct queuel *q){
struct cell *pt;

printf("[");
for( pt = q; pt != NULL; pt = pt->next ){
printf(" %d", pt->data);
}
printf(" ]\n");

}
0733デフォルトの名無しさん (アウアウウー Saab-EYzY)
垢版 |
2019/05/28(火) 21:09:24.77ID:Rd7hCJnFa
>>725
Pascalの方が先にできたんだっけ?

まあでも用途が大幅に違うよね。Pascalはコンピュータの学習用の高級言語でCはOS記述用でアセンブラ代わりに使う言語。
0736デフォルトの名無しさん (アウアウウー Saab-EYzY)
垢版 |
2019/05/28(火) 22:24:51.47ID:Rd7hCJnFa
>>735
まあそうだな。
Cは用途が違う上に古くて安全性が低い感じか。
0740デフォルトの名無しさん (ワッチョイ dfb9-9b2Z)
垢版 |
2019/05/29(水) 06:20:35.18ID:D5Uzvk1s0
OSのコードはどんな感じなの?
ポインタを使ったトリッキーな事をやってるの?

未だにLinuxでバッファオーバーフローの脆弱性出てるよね
0748デフォルトの名無しさん (アウアウウー Saab-EYzY)
垢版 |
2019/05/29(水) 21:00:57.32ID:FFsAnOexa
Cは標準ライブラリ考え直した方が良いかもね。
0749デフォルトの名無しさん (トンモー MM97-OIQ8)
垢版 |
2019/05/31(金) 08:23:23.52ID:JBiczG6TM
Cが最も好きだけど、
C十十のほうがライブラリが
便利なのあるから、
個人で趣味で作るものは最近は
CとC++混在で作ります。
わりと自由に混在できるので
とても助かってます。
こうゆの俺だけですかね?
0752デフォルトの名無しさん (アウアウウー Sa1f-Y/KN)
垢版 |
2019/05/31(金) 09:21:15.46ID:GTUdpXapa
С++

キリル文字
0753デフォルトの名無しさん (トンモー MM97-OIQ8)
垢版 |
2019/05/31(金) 18:42:40.60ID:JBiczG6TM
C十十つ
―ー
0756デフォルトの名無しさん (アウアウウー Sa1f-Y/KN)
垢版 |
2019/05/31(金) 19:45:27.77ID:/GnAMAD/a
⊂┼┼
0758デフォルトの名無しさん (アウアウウー Sa1f-Y/KN)
垢版 |
2019/05/31(金) 21:48:01.31ID:I0+j7s4/a
さあ?
その会社がどの程度その知識を必要としているかで変わるのでは?
0762デフォルトの名無しさん (スフッ Sd8a-92O4)
垢版 |
2019/06/01(土) 11:44:52.57ID:2YdNSpFdd
http://codepad.org/NUCaFYyE
雨が降る様子を自分の今持ってる知識だけで作ろうとしたんですが、表現が上手くできてない気がします

だれか改善案があれば助言お願いします
0764デフォルトの名無しさん (スフッ Sd8a-92O4)
垢版 |
2019/06/01(土) 18:56:55.84ID:2YdNSpFdd
>>763
抜けてました
プログラムの問題として、実行すると縦に雨粒が重なってしまうのが目立っていて、この原因がわからず質問しようと思いました。
0765デフォルトの名無しさん (ワッチョイ 8a52-gkx+)
垢版 |
2019/06/01(土) 19:26:44.16ID:w9UetZ9K0
>>764
それは使用する言語とは無関係に、雨らしく見せるアルゴリズムの問題ではないか?
ある処理をC言語で実現したいがどう書いていいか分からないとか、書いたものが想定通りにならないのはなぜかとかなら答えようがあるが。
0766デフォルトの名無しさん (スフッ Sd8a-92O4)
垢版 |
2019/06/01(土) 21:18:58.51ID:2YdNSpFdd
>>765
1番上の行で雨を発生させるとき何列目で発生させるかは乱数できめているはずなのに、何行か連続で同じ列に発生しているのがよく見られていて、それが何故なのかがわかりません。

このプログラムは改良中のもので、その前のプログラムは雨粒が全部同じ速さのやつを作っていてそれは問題なく(上の現象も起きず)動いていたので、乱数でなくプログラムの問題かなと思って質問しました
0767デフォルトの名無しさん (ワッチョイ 0b52-2ZOZ)
垢版 |
2019/06/01(土) 21:37:41.87ID:njUSTe0T0
>>766
乱数っていうのは偏るものだから、同じ列に連続して発生することが普通。
同じ列に発生しないような作為をする場合は乱数とは言わないと思う。
https://twitter.com/Newton_Science/status/1031788874836529152

あと、'o'が縦に連続するのに違和感があるのなら'|'などに置き換えれば良いと思う。
https://i.imgur.com/wR1mNu5.gif
みたいな感じで
適当に作っててチカチカしちゃってるからあまり参考にならないかもしれない
https://twitter.com/5chan_nel (5ch newer account)
0768デフォルトの名無しさん (スフッ Sd8a-92O4)
垢版 |
2019/06/01(土) 22:01:32.09ID:2YdNSpFdd
>>767
すごい!!!
一気に雨っぽく見えるようになりましたw

乱数の件大変勉強になりました
もっと改良するとしたら、そのツイートのように不自然に見えるランダムさをなくすため振るいにかけるような工夫もしてみようと思います。

あと、もしよければGIFのやつのソースコードを貼ってもらえないでしょうか。よろしくお願いします
0770デフォルトの名無しさん (ワッチョイ 0b52-2ZOZ)
垢版 |
2019/06/01(土) 22:10:20.53ID:njUSTe0T0
>>768
一応貼るけど自分はC言語あまり得意でない上に適当にササっと作ったのだからあんまり参考にはしないでほしい
https://ideone.com/FG3nNS

system("cls")で画面更新してるけどチカチカさせずに滑らかに動かしたいならpdcursesとか使ったほうが良いと思う
あとLinuxだったらclsでは動かない
0771デフォルトの名無しさん (スププ Sd8a-92O4)
垢版 |
2019/06/02(日) 08:12:25.21ID:Df5btDJSd
>>770
ありがとうございます!
初心者なので関数の使い方とか、あと自分がいかに無駄なコードを書いてたかとかがわかってとても参考になります

調べてみようと思います。ありがとうございました
0779デフォルトの名無しさん (アウアウウー Sa1f-Y/KN)
垢版 |
2019/06/03(月) 21:20:26.29ID:CuEu7mica
影があって見えない。

ていうか、試験中に撮影して書き込みか?
思い切ったカンニングだな。
0780772 (ワッチョイ cbf6-2ZOZ)
垢版 |
2019/06/03(月) 22:17:42.98ID:V6PZ+bAi0
(3)のとこ、この試験問題を作った教官がどういう教え方をしているのか聞かせてくれ
0784デフォルトの名無しさん (アウアウウー Sa1f-Y/KN)
垢版 |
2019/06/04(火) 10:12:17.26ID:prB+PlYza
ワッチョイからすると別のようだが
0786デフォルトの名無しさん (SG 0H37-NP7i)
垢版 |
2019/06/04(火) 11:04:10.57ID:eBRK1s1cH
【速報】金券五百円分とすかいらーく優侍券をすぐもらえる   
https://pbs.twimg.com/media/D8I_kMUUYAEOmcl.jpg 
     
@ スマホでたいむばんくを入手  
A 会員登録を済ませる     
B マイページへ移動する   
C 招待コード→招待コードを入力する [Rirz Tu](スペース抜き)     
   
今なら更に4日18時までの登録で2倍の600円の紹介金を入手    
クオカードとすかいらーく優待券を両方ゲットできます。  
    
数分で終えられるのでぜひお試し下さい。 
0795デフォルトの名無しさん (アウアウウー Sa1f-Y/KN)
垢版 |
2019/06/04(火) 20:19:32.69ID:RBIldFVda
しかし500円だの600円だのしょぼいな。
PayPayみたいにずっと二割引でたまに全額当たるぐらいやらなきゃ宣伝にならんだろう。
0798デフォルトの名無しさん (アウアウウー Sa1f-Y/KN)
垢版 |
2019/06/05(水) 10:04:09.95ID:Fd++qFdya
激しいステマ
0811デフォルトの名無しさん (ワッチョイ a101-0JeU)
垢版 |
2019/06/07(金) 22:23:25.13ID:e6zybBXY0
正常というのは1つの状態しかないが
異常には色々な種類があるのでそれを区別するためにコードとして返したい

というのと

2値しかない真偽をどう値に配分するか

というのを同列に並べるとパニック。 C言語では別のものとして割り切る


なぜC言語では偽を0に割り当てたのか?という問いの答えを求めているのならば…
俺は知らない
0813デフォルトの名無しさん (ワッチョイ cdab-BGv3)
垢版 |
2019/06/07(金) 22:30:40.09ID:51aJPRpO0
ソフト会社に長年いて開発者からこの質問は初
OSインストールできませんなんてすごく高度なんだなって思った

コマンドのテストでコマンドの戻り値ってあるんですがなんですか?
0820デフォルトの名無しさん (ワッチョイ 417b-sn8J)
垢版 |
2019/06/08(土) 11:21:36.15ID:5iouJYEP0
返り値0でエラーなしはUNIXのコマンド終了ステータス以来の慣習かな。
「正常終了」は状態が1種類しかないけど、失敗は「どう失敗したか」で
複数の状態があるから、正常で0、他の値はエラーコードってのは便利でしょ。

論理演算子の結果で true false の1と0は、論理学の数値表現を
プログラム言語にそのまま写しこんだからじゃないかと。

関数は一般にエラー状態を返り値で返す、と思っていれば
正常 == 返り値0 == false は違和感ないかと。
このルールから外れてるのは「失敗時にNULLを返す」タイプの関数で、
結構たくさん存在するのが困ったところだけど。
0821デフォルトの名無しさん (ワッチョイ c379-uQfi)
垢版 |
2019/06/08(土) 11:32:28.80ID:7CBKOF2N0
Cでは同一のもとして動かせてしまうが
そもそもエラーコードとboolを同一視してる時点で論外なんだが
0822デフォルトの名無しさん (ワッチョイ 77f2-to8s)
垢版 |
2019/06/08(土) 11:38:57.76ID:WG7jlf5q0
論理型を別に設けずに整数型で代用してしまおうというアイデアはBやCの言語仕様をコンパクトに
抑えるのに役立ったが、今となってはプリプロセッサマクロと同じくらいの悪しき遺産だなぁ。
0826デフォルトの名無しさん (ブーイモ MM5b-XTNn)
垢版 |
2019/06/08(土) 15:41:57.08ID:bm2ApAetM
正常時1で異常時0を返す関数が混ざってたり
正常時ポインタで異常時ヌルポ返す関数があったり
それらの関数の返り値を全部 if でチェックしててカオスだったことがあります
0828デフォルトの名無しさん (ワッチョイ 77f2-to8s)
垢版 |
2019/06/08(土) 16:38:04.87ID:WG7jlf5q0
ワインバーグの本にあったなあ。ドル紙幣はみんな同じ色、同じサイズで見分けがつきにくいけど、
それが常識だと思っている人は、一定の確率で間違えてしまうことも世界の法則で仕方のない
ことだと思っているとか。
0831デフォルトの名無しさん (ワッチョイ 9bd2-9700)
垢版 |
2019/06/08(土) 18:53:36.19ID:jXs/KV+s0
戻り地がboolのときはtrueが成功
intのときは0が成功なんだよ
0835デフォルトの名無しさん (アウアウウー Sa1d-I703)
垢版 |
2019/06/08(土) 21:28:56.66ID:gCLo3iIIa
>>830
それのせいでPrelではシステムコールと同名の関数の返り値がいまいち統一取れてなかったりして、結局マニュアル見ながら個別に覚えざるを得なかったりする。
Perlはだいたいは1が成功でundefが失敗なんだけどね。(undefはCでのNULLみたいなもの。未定義を意味する。定義されてて値が0の時とは違うが、書き方によっては同じように扱えることもある)。
0837デフォルトの名無しさん (ワッチョイ c38c-LJAA)
垢版 |
2019/06/09(日) 11:06:53.62ID:42ARNGRn0
インクルードをURLで引っ張ってこれたら面白いのに。
0839デフォルトの名無しさん (ワッチョイ ebb6-fbqF)
垢版 |
2019/06/09(日) 11:59:40.15ID:W83DJxDE0
コスパ最強の副業「動画編集」で稼ぐ方法【生ハム登場】
https://www.youtube.com/watch?v=0ogHVUKoa8k
【最強の副業】動画編集で稼ぎ続ける人の条件【未来予想】
https://www.youtube.com/watch?v=e-IA4ePHzOs
【おすすめ副業・在宅ワーク】「動画編集」は初心者でも時給1,500円狙えます。
https://www.youtube.com/watch?v=8gYAqdSsI98&;t=168s
【与沢翼】動画編集素人でも本気でやれば個人で月収1000万も夢ではないですよ。
実は動画ってすぐプロと同じクオリティで作れちゃうし月収20万はすぐですよ
https://www.youtube.com/watch?v=ws55W45OLbE
センスのいい映像を短時間で編集する方法
https://www.youtube.com/watch?v=k0TT4Tbf_Ec
0840デフォルトの名無しさん (ワッチョイ 5b02-EF/o)
垢版 |
2019/06/09(日) 14:38:56.62ID:zgQq0a060
>>837
/use/include ディレクトリをNFS マウントでもしとけ。
0841デフォルトの名無しさん (スプッッ Sddb-EU19)
垢版 |
2019/06/11(火) 14:18:29.61ID:suKt4vmPd
すみません、質問があります。

環境はlinuxです。
ある共有ライブラリlibA.soをロードするプログラムbがあります。
このプログラムbをlibA.so抜きでgccでビルドすることはできるでしょうか?
もちろん実行時にはlibA.soは用意します。
0842デフォルトの名無しさん (アウアウウー Sa1d-I703)
垢版 |
2019/06/11(火) 15:09:21.38ID:UmxJxqMia
>>841
リンクされる関数やグローバル変数が全て揃ってれば誤魔化し効くのではないかな。
0845デフォルトの名無しさん (アウアウウー Sa1d-I703)
垢版 |
2019/06/11(火) 20:38:50.54ID:UmxJxqMia
そ、そうか?
0850デフォルトの名無しさん (アウアウウー Sa1d-I703)
垢版 |
2019/06/12(水) 09:25:53.48ID:apqCeTcNa
DLL? Windowsだとそうなの?
0851デフォルトの名無しさん (ワッチョイ d769-0JeU)
垢版 |
2019/06/12(水) 10:40:58.95ID:QpFBULjO0
a) dll import キーワードつきのヘッダでコンパイル
 DLLを読み込みシンボル解決する .lib をリンク
 実行時には dll 読み込みをやってくれる (無いと文句言う)

b) 自前で DLL読み込んで GetProcAddress で関ポにセットして、
その関ポを呼び出すラップ関数を用意
  自前ロードしてるので、実行時に無い時別の処理の記述が可能になるん
0854デフォルトの名無しさん (ワッチョイ 03dc-9ye8)
垢版 |
2019/06/13(木) 19:07:04.64ID:mXxRrk+K0
現実世界にポインタと同じものを説明する概念がないから簡単な説明のしようがないんだよなぁ。住所録とか余計こんがらがるし。
素直に本を沢山読んでプログラムを組んで慣れるしか無い
0856デフォルトの名無しさん (ワッチョイ 677d-58Oz)
垢版 |
2019/06/13(木) 20:56:34.51ID:8abVSTNa0
アドレスは&つけてprintfした時に出てくるやつでしょ?
箱のラベルみたいなのだとかなんとか言われた気がする
メモリは単純に容量?

別関数で計算した値をmain関数に持ってくる時にポインタを使えばreturnがいらないだとかコピーじゃなくて直接数値を変えるから処理が楽だとか書いてあるけど結局普通に代入するのに比べて利点がよくわからない
0864蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 8b01-1i7F)
垢版 |
2019/06/13(木) 22:14:30.76ID:wtG0GGqp0
1ビットが0か1かの二通りを表せる情報量。
1バイトは0〜255までの256通り(2の8乗)を表せる情報量で8ビットに等しい。
1バイトを複数並べたのがメモリーで、各バイトの位置がアドレス。
0866蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ 8b01-1i7F)
垢版 |
2019/06/13(木) 22:22:12.70ID:wtG0GGqp0
アドレスに型情報を加えて、先頭アドレスを起点として配列のようにアクセス可能にしたものがポインタ。
しかし、配列は実体を要求するが、ポインタは実体を要求しない。ヌルポインタは、何も指し示さないポインタ。
0869デフォルトの名無しさん (ワッチョイ a37b-RuXw)
垢版 |
2019/06/14(金) 06:12:05.65ID:hJXFGwRg0
“メモリ”って言葉がフラッシュメモリのような、
ストレージデバイスのイメージになってるのも
説明を難しくしてる要因かもしれないね。

メモリは記憶単位ごとに数字で番地が振られていて…と言っても、
「メモリってディレクトリ構造中のファイルとして記憶するんじゃないの?」
みたいな感じに、互いの言葉の意味がチグハグで。
0875デフォルトの名無しさん (ワッチョイ 9712-LWbF)
垢版 |
2019/06/14(金) 09:02:07.63ID:vN7LRDhO0
>>856
ポインタ=君と感覚を共有してる全く同性能の影分身だ。
君の価値が100万なら、影分身は1円で作れる。

ポインタのメリットは会社が君を働かせたい時、君を直接雇うと100万円かかるが、影分身を雇うと1円で済むわけだ。
影分身が働いてる間、君は家でエロゲでもしてればいい。

気をつけないといけないのは、仕事中、影分身の腕が切断されたら、エロゲやってる君の腕も切断されるし
影分身が死んだら君も死ぬ。


これ以上わかりやすい説明はないと思うが、どうよ?w
0877デフォルトの名無しさん (アウアウウー Sac7-7DQ/)
垢版 |
2019/06/14(金) 10:03:42.87ID:+nXqXsIga
>>875
分身と言ってしまうとそっくりな実体がもう一つあるかのように思ってしまうのではないか?
やはり実体を指し示すものを連想させる何かにした方が良いのではないか?道標とか。
0878デフォルトの名無しさん (ワッチョイ 03dc-9ye8)
垢版 |
2019/06/14(金) 10:26:13.82ID:6se/aPBa0
このように、どうわかりやすく書こうとしてもどっかに不都合が生じるのがポインタの説明
素直にコンピュータの仕組みを勉強するしかないんや・・・
0882蟻人間 ◆T6xkBnTXz7B0 (スフッ Sdba-1i7F)
垢版 |
2019/06/14(金) 12:32:55.71ID:lQGpZUNAd
キャッシュは次回のアクセスを高速化するためにデータを一時的に保存しておくこと。
バッファはデータを受け止めるために、保存場所を確保するためのメモリー領域。
0886デフォルトの名無しさん (ワッチョイ 8b01-2qry)
垢版 |
2019/06/14(金) 17:45:59.79ID:zWOLB0k60
ポインタがよくわからないんだけど、普通にメモリアドレス==ポインタって認識なの?

int i;
int *p=&i;
の時に変数iのポインタであるpっていういい方は正しいですか
0890デフォルトの名無しさん (ワッチョイ 8b01-2qry)
垢版 |
2019/06/14(金) 18:23:47.92ID:zWOLB0k60
なるほど、なんとなくわかったありがとう。混乱の原因はポインタっていう言葉がいろんな使われ方してるからだった。
0891デフォルトの名無しさん (アウアウウー Sac7-6CEg)
垢版 |
2019/06/14(金) 18:25:31.19ID:Kaq8zorwa
こう書くとまた荒れそうだが、ポインターとはアドレスが入った変数である、というのは正しい。
NULLは0番地を特別扱いしてるだけだし、void *もあくまでアドレスだ。
0896デフォルトの名無しさん (アウアウウー Sac7-LNjH)
垢版 |
2019/06/14(金) 18:39:36.73ID:BA+tS0rQa
>>891
NULLの件はそれ逆だろう。
実際の0番地を特別扱いにしているのではなく、「どこも指さない特殊なアドレス」を表記するために整数0を使用しているだけで、0番地が特別な訳ではないはず。まあ実際にメモリ割り当てで0番地を割り当てることはしないだろうけど。
void*も、型を指定しないポインタを表すのに使っている型の指定であり、アドレスというのはおかしい。
0902デフォルトの名無しさん (ワッチョイ 0301-oJPG)
垢版 |
2019/06/14(金) 21:51:26.70ID:6z9b86iK0
double * には double * だけを許し char * や strucut foo * を渡したらアカンと
要求される型を厳しくチェックしようとすると

「ポインタだったら実体の型は何でもいい」 という指示を char * に含ますわけにはいかない
0904デフォルトの名無しさん (ワッチョイ 03dc-9ye8)
垢版 |
2019/06/14(金) 22:42:50.69ID:6se/aPBa0
汎用ポインタというかvoid型という概念そのものが嫌い。
全てを厳密にやれ。言語を作る時点でまず関数に戻り値を強制すべきだったんだ。
ポインタわからん軍の原因はvoid型とかいう曖昧なせいなのがあるせいなのも一理あろうて。
0906デフォルトの名無しさん (ワッチョイ 7602-byPh)
垢版 |
2019/06/15(土) 00:02:16.99ID:n7CfuAo60
Kotlin もよろしく
0907デフォルトの名無しさん (ワッチョイ 5b8f-X/yd)
垢版 |
2019/06/15(土) 01:25:34.80ID:RN+u9pJY0
windowsにおいて

setLocale(LC_ALL, "en_US.UTF-8");

が成功する環境と失敗する環境があるのですが何が原因かわかりません。。何かご存じの方いらっしゃらないでしょうか?
0908デフォルトの名無しさん (ワッチョイ 9a01-zlGV)
垢版 |
2019/06/15(土) 09:25:25.61ID:oZ4xCIwS0
>>904
お前の好き嫌いなんてどうでもいいし、よくわからん時点ならvoid*なんて無視しとけばいいだけ
この手の人は何故か全部を一気に理解しようとするけど今どきの言語仕様でそれやったら終わらんよ
0911デフォルトの名無しさん (ワッチョイ 1aa5-Rc2r)
垢版 |
2019/06/15(土) 10:23:13.60ID:T0BSudQv0
>>908 void君だろ

C言語なら俺に聞け 148
https://mevius.5ch.net/test/read.cgi/tech/1537347410/37
37 名前:デフォルトの名無しさん (ワッチョイ f94f-yqSl)[sage] 投稿日:2018/09/22(土) 01:42:06.64 ID:16ZpsTnK0
>>36
マジでIDE使え。
そして貼るときはlanguageをCにしとけ。シンタックスハイライトが変わるから。
で、どれが分からんの?

> enter
> find
> delete
> show_all
> delete_all

mainはこの際分からなくていい。
最初に理解しないといけないのは show_all だ。

ただし細かいことを言ってもキリがないが、

> void show_all(void)

なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?
さらに酷いのは show_all 内でグローバル変数 address を掴んでいること。
普通は void show_all(tag_address* ta) だよ。
そうじゃないと複数のリストがあったときに使い物にならないだろ。

マジな話、このソースのレベルの本なら捨てた方がいい。
俺は大学の教材がいいと思うぞ。
(読んでないが)リストならググったら東工大とか出てきた。
http://www.is.titech.ac.jp/compview/clang/chap11.html
0913デフォルトの名無しさん (ワッチョイ 5b8f-X/yd)
垢版 |
2019/06/15(土) 13:59:23.10ID:RN+u9pJY0
>>910
コメントありがとうございます。
8と10で成功する端末があることを確認しています。失敗する端末は今のところ10だけです。

そして

SetConsoleOutputCP(65001);

を使用することで失敗する端末でもUTF-8をコンソールに表示でき、一応目的は達成できました。

調べてみると、結局のところwindowsではsetlocaleで2バイト以上文字は設定できないとのことだったのですが、ではなぜ成功する端末があるのか……
0931デフォルトの名無しさん (アウアウウー Sac7-7DQ/)
垢版 |
2019/06/16(日) 15:14:33.98ID:+bML8jLFa
>>915
新しく作るプログラムでも引数なしならvoidにするよ。
まあこの頃Cで作ることそのものが減ったけどな。
0933デフォルトの名無しさん (ワッチョイ 1aa5-Rc2r)
垢版 |
2019/06/16(日) 15:51:28.54ID:eI7bdJXk0
>なんだこれ?引数 void って初めて見たぞ。文法的にありなのかこれ?
こんな汚物が上から目線で何かもの言ってるかと思うと反吐が出る
さっさと消えてほしい
0935デフォルトの名無しさん (ワッチョイ a37b-RuXw)
垢版 |
2019/06/16(日) 16:48:40.62ID:xMbXVdd30
DCL20-C. 引数を受け付けない関数の場合も必ず void を指定する
ttps://www.jpcert.or.jp/sc-rules/c-dcl20-c.html
を見ると(かなり読み解きにくいんだけど)…

プロトタイプ宣言では
int func(void); ... 引数0個
int func(); ... 関数呼び出しでの引数の整合をチェックしない

関数定義では
int func(void) {...} ... 引数0個
int func() {...} ... 引数0個

って具合に func() の解釈が一貫していない、
だから引数0個の関数は同じ形になるようにvoidをつけましょう、
という話に思える。
この辺が議論の混乱を生んでるんじゃないかな。

ついでに関数定義の int func() {...} の形式は廃止予定とも出てる。
プロトタイプの方は廃止予定ではない、ってことかな。
0936デフォルトの名無しさん (ワッチョイ f3f6-2qry)
垢版 |
2019/06/16(日) 17:08:16.47ID:jvyHVZd00
そこでjpcertを持ち出すのは興醒めだ
どっかの馬の骨が「こうすべき」と主張してるってだけな話は
現実のマシンの動きとそれ束縛しているiso/iec9899でどうなのかという話とは論点が違う
0937935 (ワッチョイ a37b-RuXw)
垢版 |
2019/06/16(日) 17:32:48.77ID:xMbXVdd30
>>936
JPCERTを引用したのは「プロトタイプ宣言と関数定義とで
引数部が空の関数 func() の引数の解釈が違う」って話を
根拠つきで引き出すためでな。 >>927-930 あたりの流れを受けて。
規格の文章が並べて載ってるので都合が良いのだ(読みにくいけど)。

実際のところ、JPCERTのルールっていうか提案には
俺も全面的に賛成してるわけじゃない。むしろ強く反発する部分もあったり。
0938デフォルトの名無しさん (ワッチョイ f3f6-2qry)
垢版 |
2019/06/16(日) 19:00:02.87ID:jvyHVZd00
必要ねえじゃん
iso/iec9899の条文を引用して
その箇所がどのように解釈できると
自分の言葉で言えばいいのを
虎の威を借る形でサボる怠慢を
読まされる側は付き合ってらんねー
0939デフォルトの名無しさん (アウアウウー Sac7-7DQ/)
垢版 |
2019/06/16(日) 19:52:17.11ID:5fyh92Dva
>>932
そうだね。関数ではないね。しかしCだと処理をまとめる方法が関数しかないから仕方がないね。
0940デフォルトの名無しさん (アウアウウー Sac7-7DQ/)
垢版 |
2019/06/16(日) 20:02:46.68ID:5fyh92Dva
まあしかし getchar() みたいにプログラムとは無関係な所から取ってきた値を返すとか、バッファやstatic変数で外部からアクセスできない変数の内容を返すみたいな処理は必要だから引数なしも必要だ。
グローバル変数やハードウエアの初期化処理だけまとめて書きたいなんて時にも使える。
0943デフォルトの名無しさん (ワッチョイ 9a79-YCmz)
垢版 |
2019/06/16(日) 20:40:48.32ID:Mp4zqsM90
プログラムの関数は数学の関数とは微妙に違うから仕方ない
仕方ないと思えない奴らが関数型言語を作った

兎に角Cでは本来の関数に制限するのは事実上不可能
0946デフォルトの名無しさん (アウアウウー Sac7-7DQ/)
垢版 |
2019/06/16(日) 21:19:48.09ID:paRCIAHRa
>>942
オブジェクト指向言語のクラスだとプロパティでゲッターやセッター作る事があるが、ゲッターは普通は引数なしだな。
で、そういう言語ではだいたいはメソッドの引数なしで ()にしとけばC言語での(void)と同じ意味になる。
0949デフォルトの名無しさん (ラクペッ MM73-WxcC)
垢版 |
2019/06/16(日) 23:14:47.03ID:2lhSAUjOM
ゲッターセッターはインスタンス変数を隠蔽化することでインスタンス間の結合強度を下げるのが目的
なんでもなんでもインスタンス内部の構造に直接アクセスするとOOPの意味がない
0960デフォルトの名無しさん (ワッチョイ 7602-byPh)
垢版 |
2019/06/17(月) 02:13:20.34ID:BSqpudUb0
文字列クラスで文字数返すやつなんかはゲッターの一種だが、ああいうのは必用だよな。
文字数指定する事が出来るようにする場合もセッター必用だよな。
0968デフォルトの名無しさん (アウアウウー Sac7-7DQ/)
垢版 |
2019/06/17(月) 12:37:41.39ID:WHxj8IY7a
>>966
え?でも値のセットや取得時に何か処理が必要なやつはゲッターやセッターではないの?
名前がそれっぽくなくて普通のメソッドだったとしても機能としてはそうなるよな。
0972デフォルトの名無しさん (アウアウウー Sac7-7DQ/)
垢版 |
2019/06/17(月) 13:33:44.73ID:WHxj8IY7a
>>969
例えばファイルデスクリプタのようなものもそのデスクリプタによって識別されるファイルに関する情報の読み書きをするオブジェクトと言えるが、それ使ってファイルのバイト数を取得するとかデータを読み書きするとか、普通にやるよね。
0974デフォルトの名無しさん (アウアウエー Sa52-H7EU)
垢版 |
2019/06/17(月) 14:24:17.06ID:6pEy3XEna
>>968
そのオブジェクトの中で密接にデータと関連する処理だったらゲッターは使わんでしょう。this->hogeを直接使うだけ。
あとたぶんあなたの場合はセッターゲッターの神髄を知らんと思う。単に構造体のメンバーにアクセスするだけのメソッドをイメージしてもらえれば。
0977デフォルトの名無しさん (ラクペッ MM73-WxcC)
垢版 |
2019/06/17(月) 14:40:56.45ID:lfEwbGXOM
同一インスタンス内なら余計なことしなくても直接アクセスできる
セッターゲッターは他のインスタンスの変数にアクセスするための手段
オブジェクト間のメッセージパッシングにセッターやゲッターを利用する
0978デフォルトの名無しさん (アウアウウー Sac7-7DQ/)
垢版 |
2019/06/17(月) 14:41:55.67ID:WHxj8IY7a
>>974
あー。それでもリードオンリーにしたい時に言語にその機能がないならゲッターだけ作るよね。
Kotlinの場合はvalで済んじゃってしかも自動でゲッター作られてるけど。

で、真髄って何?
0980デフォルトの名無しさん (アウアウウー Sac7-7DQ/)
垢版 |
2019/06/17(月) 15:49:21.53ID:WHxj8IY7a
>>979
上で書いた文字列クラスの場合の文字数とかファイルのバイト数とか、外部から読めないとまずいものがあると思うんだが。
0990デフォルトの名無しさん (アウアウウー Sac7-7DQ/)
垢版 |
2019/06/17(月) 18:24:49.71ID:3L1/L9kLa
>>981
うーん。C++のクラスで喩えられてもすがわからんなあ。C++この頃全然やってないし。
昔ちょっとC++Builder使ったことあるがDelphiの延長線上の使い方しかしなかったし。

とりあえずJavaで言うとそれは何にあたるんだ?
Kotlinでもいいぞ。
0991デフォルトの名無しさん (アウアウウー Sac7-7DQ/)
垢版 |
2019/06/17(月) 18:26:16.26ID:3L1/L9kLa
すが、じゃねえ、すぐだ。
スマホだと間違いが変になるな。
0994デフォルトの名無しさん (ワッチョイ 4e63-9ye8)
垢版 |
2019/06/17(月) 20:01:23.71ID:vIcnvKOP0
IDを非表示にする場合
!extend:none::1000:512

IDを表示し、強制コテハンは表示しない(5ch標準設定と同じ)
!extend:checked::1000:512

IDを表示し、IPアドレスを表示
!extend:checked:vvvv:1000:512

IDを表示し、強制コテハンを表示
(レスの名前欄に「ワッチョイ」「スプー」「ササクッテロ 」などのニックネームがつく)
!extend:checked:vvvvv:1000:512 ← 今はこれ

IDを表示し、IPアドレスと強制コテハンを表示
!extend:checked:vvvvvv:1000:512

RONIN使えばまた表示を消せるので、強制とは言いがたいが
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 76日 10時間 6分 21秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況