1 名前:デフォルトの名無しさん mailto:sage [2018/02/19(月) 22:13:58.98 ID:9/te2eSJ0.net] C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C11 www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C99 www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ 前 C言語なら俺に聞け 144 https://mevius.5ch.net/test/read.cgi/tech/1514025223/ 次スレを立てる時は本文の1行目に以下を追加して下さい !extend:on:vvvvv:1000:512 VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
516 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 11:01:51.80 ID:OczprsBK0.net] >>496 シグナルは悪い文明! 粉砕する!
517 名前:デフォルトの名無しさん [2018/03/15(木) 12:00:46.26 .net] >>494 実用的にするなら非同期送受信でいろいろケアしたほうがいいけど 学習用とか数人で使うテストツールとかならいいんじゃね?
518 名前:デフォルトの名無しさん [2018/03/15(木) 12:19:33.36 ID:KGbgKLI3a.net] >>494 エラー処理が抜けてる。
519 名前:デフォルトの名無しさん [2018/03/15(木) 12:21:39.25 ID:KGbgKLI3a.net] >>496 そうそう。しかしその辺はOSや接続先によって違うかも。
520 名前:デフォルトの名無しさん [2018/03/15(木) 16:10:59.70 ID:CR6uT/FI0.net] >>494 これの受信側read()のコードを求むm(__)m
521 名前:デフォルトの名無しさん [2018/03/15(木) 16:16:36.38 ID:umqIWKjV0.net] 【守銭奴】 株・FX・トレーダー <キリストW再臨″> 史上初テレパシー演説 【救世主】 https://rosie.5ch.net/test/read.cgi/liveplus/1521080734/l50
522 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 17:42:18.79 ID:v5sVsR9k0.net] プロトコルなんか無しに来たものを読みきるだけの話なら allocsz = blocksz = 512 buff = malloc(allocsz); use = 0; for (;;) { w = read(FIFO, buff+use, allocsz-use); if (w == 0) { /* もう来ない */ break; } else if (w > 0) { use += w: if (use >= allocsz) { // 器が尽きた allocsz += blocksz; buff = realloc(buff, allocsz); // 手抜きで realloc } } else { /* エラーケアしてね */ } } buff に use バイトだけ収まってる
523 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 17:56:13.79 ID:lf1N2aO70.net] >buff = realloc(buff, allocsz) リークするからやめなよ。
524 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 18:05:35.40 ID:c+umNtGLp.net] ヒープなんか使わずに配列にして自己管理せい。
525 名前:デフォルトの名無しさん [2018/03/15(木) 18:12:47.89 ID:yyzFA25Ma.net] ヒープに配列用のメモリを確保しているわけで・・・
526 名前: mailto:sage [2018/03/15(木) 18:18:50.14 ID:xYxZI4zx0.net] >>505 ん?realloc() はリークするのか?
527 名前:片山博文MZ mailto:sage [2018/03/15(木) 18:24:18.46 ID:mTrAuuczd.net] >>508 割り当てに失敗したらリークするよ。
528 名前: mailto:sage [2018/03/15(木) 18:34:07.27 ID:xYxZI4zx0.net] >>509 確認した buff = realloc(buff, allocsz) という書き方は、たしかに realloc() に失敗すると buff が null で上書きされてしまうのでまずいね
529 名前:デフォルトの名無しさん mailto:sage [2018/03/15(木) 18:43:54.61 ID:T5+tR1ew0.net] 戻りを別の変数で受けて確認してから代入
530 名前:片山博文MZ mailto:sage [2018/03/15(木) 18:51:29.92 ID:mTrAuuczd.net] 前、ANSI準拠のreallocは、mallocとfreeの代わりになるって話をしたよな。 だから、最初のmallocは、NULLに対するreallocで置き換えできるんだよ。
531 名前:片山博文MZ mailto:sage [2018/03/15(木) 18:52:49.68 ID:mTrAuuczd.net] それから、この場合はintよりもsize_tを使った方がいい。
532 名前:デフォルトの名無しさん [2018/03/15(木) 20:39:48.98 ID:yyzFA25Ma.net] >>512 最初だけ、な。
533 名前:デフォルトの名無しさん [2018/03/15(木) 23:54:08.20 ID:NmT4VXxza.net] 素朴な疑問なんですが、Cでメンバ関数を関数ポインタで定義して、そのメンバ関数から引数なしにメンバ変数を参照
534 名前:することってできませんか? [] [ここ壊れてます]
535 名前:デフォルトの名無しさん [2018/03/16(金) 00:14:09.63 ID:LkWvbaD00.net] >>515 メンバ関数ってなんですか?
536 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 01:02:32.36 ID:w3tL3lE3M.net] >>516 C++でいうところのメンバ関数を構造体の関数ポインタのメンバで実装したいという意味だろ。読解しろ。 >>515 むり。C++で見かけ上引数がなくても内部で引数で渡してる。
537 名前: mailto:sage [2018/03/16(金) 01:37:32.81 ID:GsmhGHn70.net] >>515 https://mevius.5ch.net/test/read.cgi/tech/1434079972/39 メンバ関数 h() を返す メンバ関数 g() を定義 メンバ関数へのポインタ f を定義 メンバ関数へのポインタ f にメンバ関数 g() の返り値を代入 ここでメンバ関数へのポインタ f にはメンバ関数 h() が格納されている ->* 演算子を使用してメンバ関数へのポインタ f が指すメンバ関数 h() を実行、 h() ではメンバ変数 C::a を出力する
538 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 02:08:17.17 ID:w3tL3lE3M.net] >>518 スレタイ見ろ
539 名前:デフォルトの名無しさん [2018/03/16(金) 04:14:48.79 ID:3pmuZEr10.net] ポインタ構造体変数をポインタ変数で扱いたい時って &p(ポインタ変数構造体変数)-> member(メンバ名) みたいにわざわざ一回通常変数に直してからアドレスになおさないかんの?
540 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 05:57:40.20 ID:PrpOQ5WH0.net] (&p)->memberなんてまずやらん p.memberで同じことができる
541 名前:デフォルトの名無しさん [2018/03/16(金) 06:50:12.92 ID:3pmuZEr10.net] >>521 それやったらコンパイラにそんな構造体変数ないぞって言われた
542 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 08:05:49.18 ID:w3tL3lE3M.net] >>522 質問するときは変数の宣言も使う文脈も省略せずに書け
543 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 08:16:43.56 ID:6+mGA4RRM.net] >>522 &p->membar (&p)->membar
544 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 10:27:00.36 ID:DfshN/+jp.net] 型教えないと何やっても無理だろ。 あと。下手に型変換させると、奇数バイトからワード処理とかさせてしまい、石によっては例外処理が走るか暴走するよな。
545 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 11:29:31.94 ID:07ayGtU0a.net] cのコンパイラ作るのにアセンブラの知識は必要?
546 名前:デフォルトの名無しさん mailto:sage釣 [2018/03/16(金) 11:38:22.80 ID:ObjPIdw20.net] 今なら、LLVMがあるからコード生成はそちらに任せるという 選択肢があるね。
547 名前: mailto:sage [2018/03/16(金) 11:59:50.08 ID:GsmhGHn70.net] >>526 コンパイルというくらいだから、最後に機械語に落とし込むのにアセンブラの知識は必要になるのではないか?
548 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 12:01:10.57 ID:rupS10t30.net] C++ to C コンパイラとか 生成物が機械語で無いのもあるんじゃね? (昔そういうの欲しかった)
549 名前:デフォルトの名無しさん [2018/03/16(金) 12:19:28.27 ID:56A/2jiga.net] >>517 Cには無理なんですね ありがとうございます
550 名前: mailto:sage [2018/03/16(金) 12:33:16.00 ID:GsmhGHn70.net] >>530 >>515 でメンバ関数という言葉を使うのだから C++ を仮定している、というのならば C++ では >>518 で可能 C で可能かどうかを問題にしているのであれば、>>515 のメンバ関数という言葉が自己矛盾
551 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 12:43:32.01 ID:rupS10t30.net] C言語の範囲では 構造体のメンバ中に関数のポインタをもつまで C++言語のメンバ関数の機構(暗に this ポインタが渡ってくる) のを C言語でやりたけりゃ自前で引数に渡すしかない&その関数はポインタを引数で受けなきゃいけない
552 名前:デフォルトの名無しさん [2018/03/16(金) 12:47:14.28 ID:0ILmeguTa.net] >>529 C++の初期のコンパイラはそういうやつだった。つまり、Cへのコンバータだった。
553 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 13:59:12.95 ID:DfshN/+jp.net] ああ、各ファイルの先頭に構造体の領域宣言とか関数にいちいち構造体のポインタが追加されるんだよな。
554 名前:デフォルトの名無しさん [2018/03/16(金) 14:00:33.86 ID:ITdJ1YV3a.net] そういや昔々のX68000のBASICにもCへのコンバータがあったな。
555 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 14:26:36.05 ID:DfshN/+jp.net] 俺は、6502アセンブラコードをCに変えるコンバータ作ったけどな。
556 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 15:25:35.34 ID:relEB8IL0.net] アセンブリをprintfにパースするのって大変なのかな。
557 名前:デフォルトの名無しさん [2018/03/16(金) 15:57:57.02 ID:ScqC3AYEa.net] >>531 ではどういう言葉なら齟齬なく伝わりましたか?
558 名前:デフォルトの名無しさん [2018/03/16(金) 16:00:12.76 ID:HNnsk+Eya.net] >>538 「関数へのポインタ」では? それが構造体のメンバとしてあるわけだし。
559 名前: mailto:sage [2018/03/16(金) 16:12:40.83 ID:GsmhGHn70.net] >>538 コード断片で示すのもよい、誰かがコードを補完してくれるだろう
560 名前:デフォルトの名無しさん [2018/03/16(金) 16:25:31.83 ID:3ma6aQHvF.net] アスペとの会話ってつかれるよな
561 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 16:57:51.61 ID:PrpOQ5WH0.net] Cスレで「メンバ関数」だぜ? それをアスペとか、どんだけボキャ貧なんだよ
562 名前:デフォルトの名無しさん [2018/03/16(金) 16:59:08.32 ID:3ma6aQHvF.net] >> 542 おまえがアスペか
563 名前:デフォルトの名無しさん [2018/03/16(金) 20:29:17.66 ID:56A/2jiga.net] >>539 > Cでメンバ関数を関数ポインタで定義して 一応そのつもりで書いたんだけどなあ アスペ基準に合わせようとした俺が悪かったのか
564 名前: mailto:sage [2018/03/16(金) 21:09:53.74 ID:GsmhGHn70.net] >>544 ・関数ポインタとは別に「メンバ関数」というテクニカルタームが C++ にあった ・C/C++ の区別がついていない人の質問も、ここではよくみかける という背景があって小さな誤解が発生したまでのこと、気にするでない、苦しゅうないぞ
565 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 21:13:51.61 ID:nemrSVupM.net] >>526 どうやってコード生成部分を作るつもりなんだよ...
566 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 21:59:39.71 ID:PPQOkRTja.net] マシン語があれば充分のんじょのいこの
567 名前:デフォルトの名無しさん [2018/03/16(金) 22:33:58.96 .net] Cコンパイラがマシン語を出力しなきゃいけないって誰が決めたの?🙄
568 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 22:51:53.37 ID:SxfrRBUw0.net] ラノベ出力してくれるコンパイラってステキ
569 名前:デフォルトの名無しさん mailto:sage [2018/03/16(金) 22:53:03.55 ID:d0lIgzUw0.net] 誰も決めてないしマシン語じゃなくてアセンブラのソース出すコンパイラはいくらでもあるし
570 名前:デフォルトの名無しさん mailto:sage釣 [2018/03/16(金) 23:46:17.13 ID:ObjPIdw20.net] VHDL出してもいいよね〜
571 名前:デフォルトの名無しさん [2018/03/17(土) 00:28:10.69 .net] シェルスクリプトとまでは言わないからPerlスクリプトを出力して欲しい
572 名前:デフォルトの名無しさん mailto:sage [2018/03/17(土) 03:07:05.34 ID:ZFtG2t0c0.net] C++の非仮想関数 == Cの普通の関数 C++の仮想関数 == structの項(vtbl)の項
573 名前:デフォルトの名無しさん [2018/03/17(土) 04:35:29.26 ID:YYJgzE2Qa.net] >>553 違うね
574 名前:デフォルトの名無しさん mailto:sage釣 [2018/03/17(土) 07:17:45.03 ID:qzfhHg+K0.net] >>553 上の方の関数。普通の関数pointerで保持出来るの?
575 名前:デフォルトの名無しさん mailto:sage [2018/03/17(土) 07:35:06.72 ID:zYYcg2u/0.net] C++のextern "C"関数 == Cの関数 Cに普通じゃない関数ってあるんだっけ
576 名前:デフォルトの名無しさん [2018/03/17(土) 07:51:22.83 .net] >>555 そんなの当たり前じゃん まさかできないと思った?
577 名前:デフォルトの名無しさん mailto:sage釣 [2018/03/17(土) 08:58:53.90 ID:qzfhHg+K0.net] >>557 先生、非仮想なメンバー関数をcの構文では保持出来ません。 例をご教示願います
578 名前:デフォルトの名無しさん [2018/03/17(土) 09:00:39.42 .net] >>558 「上の方の関数」すなわち「Cの普通の関数」を 「普通の関数pointerで保持出来るの?」 →Cの普通の関数は、普通の関数ポインタで保持できます 質問文に忠実に答えただけだが、何か問題でも?
579 名前:デフォルトの名無しさん mailto:sage [2018/03/17(土) 13:08:05.54 ID:8xjJdoU40.net] Cにゃメンバーって言語レベルの概念は無いから、そういうのはコーディング時に人様がメンバーのつもりになる書き方を明示的にやらないとならないんだよな。
580 名前:デフォルトの名無しさん mailto:sage [2018/03/17(土) 13:47:23.11 ID:8tKqJ0BR0.net] namespace のことを脇においとけば 非仮想関数って FILE 構造体と その関数だべ
581 名前:デフォルトの名無しさん mailto:sage [2018/03/17(土) 13:51:13.91 ID:V9AqDEvW0.net] LLVMはまずパースレイヤーが中間言語出力して中間言語を解釈するレイヤーが各種コードに吐き分けるということができる。 3段階のコード最適化ができるはずだったが、ち
582 名前:ょっと迷走してる。 [] [ここ壊れてます]
583 名前:デフォルトの名無しさん mailto:sage [2018/03/17(土) 16:56:54.32 ID:x+XAbvy+0.net] >>557 struct A { void func() {} //C++の非仮想関数 }; void (*ptr)(); //普通の関数pointer ptr = &A::func; //まさかできると思った?
584 名前: mailto:sage [2018/03/17(土) 18:20:57.82 ID:qqOQsVrX0.net] >>555 できませんね https://ideone.com/5sW1lw
585 名前:片山博文MZ mailto:sage [2018/03/17(土) 18:25:10.24 ID:6umCop+Md.net] クラス内部の関数をstaticにすると、、、
586 名前:片山博文MZ mailto:sage [2018/03/17(土) 18:26:02.67 ID:6umCop+Md.net] 普通の関数みたいに参照できる。
587 名前:デフォルトの名無しさん mailto:sage [2018/03/17(土) 20:05:40.42 ID:x+XAbvy+0.net] ここはCスレということをお忘れなく
588 名前:デフォルトの名無しさん mailto:sage [2018/03/18(日) 08:12:11.88 ID:5MZOkfmV0.net] https://ideone.com/gSWZOR 上のコードを見てください。 sprintfを続けて使うと文字が一つも出力されません なぜですか?
589 名前:デフォルトの名無しさん [2018/03/18(日) 08:14:12.57 ID:5MZOkfmV0.net] ちょっと間違えました。 上の投稿は無視してください
590 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 22:30:20.44 ID:Pk5+CKOYa.net] ニキ 配列で array[i] と i[array] て同じナンスカ? 後者の違和感すげーあるんスけどこういう風に書くことのメリットってかどっちが普通なんでしょうか
591 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 22:33:57.97 ID:MsjTjvgF0.net] ポインターはINTに変換できる事もある。 んで、arrayはhogeっていうアドレス値を持ってる。 iはhageていう数字を持ってる。 生の数字でhoge+hage=i+arrayである。 まぁ、後者の書き方は普通しない。
592 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 22:34:54.75 ID:DQv7yGEy0.net] アセンブラではオフセット[レジスタ]が普通 どっちが普通なんてくだらねえことだ
593 名前:デフォルトの名無しさん mailto:sage釣 [2018/03/21(水) 22:36:13.14 ID:D2465Z9CM.net] offsetofマクロの実装を見て見なされ オフセット値の算出にポインタ使っているでしょ
594 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 00:04:45.10 ID:dLiR/Xt3M.net] a[b] は *(a+b) のシンタックスシュガー
595 名前: mailto:sage [2018/03/22(木) 00:19:52.50 ID:2FEQ/Wa30.net] >>435 そうともいえない 一見目的のない議論が、将来の偉材を今育てているのかもしれない
596 名前: mailto:sage [2018/03/22(木) 00:23:55.20 ID:2FEQ/Wa30.net] >>441 知らないのか? setjmp/longjmp は、かつては例外(exception) の標準的な実装方法だったんだよ OS に構造化例外機能がなかったときは sjlj が主流だったんだ
597 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 04:56:30.90 ID:0SzB6c710.net] >>576 お前のご託はどうでもいいから > 他の言語でライブラリレベルで実装してる例 をだしてみろよ
598 名前:デフォルトの名無しさん [2018/03/22(木) 09:40:57.08 ID:Q2/ylW7bF.net] BDS-Cとかあったな
599 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 10:22:59.95 ID:lT3wziJ7p.net] >>570 みたいなのは、キャストしないと使えねーだし。
600 名前:デフォルトの名無しさん [2018/03/22(木) 13:44:55.99 ID:suw09sJq0.net] >>579 え?使えるよ。単に *(i + array) になるだけだし。
601 名前: mailto:sage [2018/03/22(木) 13:56:04.06 ID:2FEQ/Wa30.net] >>577 mingw/gcc-3 あたりまでは SEH ではなく sjlj だったと記憶している ググってみるとちらほら出てくる
602 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 14:36:34.98 ID:tPQcb8ora.net] SEHって何かと思ったらMS独自のやつか
603 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 19:43:32.85 ID:qO2s+USWM.net] >>581 他の言語って書いてあるのに 話そらそうと必死だな w
604 名前: mailto:sage [2018/03/22(木) 20:58:32.18 ID:2FEQ/Wa30.net] >>583 C と C++ は違う言語だろう?(棒読み)
605 名前:デフォルトの名無しさん mailto:sage [2018/03/22(木) 21:06:38.53 ID:qO2s+USWM.net] >>584 そんなものまで持ち出さないと自我が壊れちゃうのか? w
606 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 19:49:48.79 ID:wXlHUBLAa.net] ニキやっぱFEぐらいのC過去問なら余裕の満点すか?
607 名前:デフォルトの名無しさん mailto:sage [2018/03/24(土) 22:33:50.23 ID:glVyz9hR0.net] >>573 >オフセット値の算出にポインタ使っているでしょ そうか? offsetofの結果は整定数式になる必要があるが、 ポインタ演算を使った式が整定数になる保証がないので別の手段を使っている場合がある。 [] [ここ壊れてます]
609 名前:デフォルトの名無しさん mailto:sage釣 [2018/03/24(土) 22:37:51.52 ID:M0MLze13M.net] >>587 具体的に
610 名前:デフォルトの名無しさん [2018/03/25(日) 00:05:52.92 ID:r2Id4T4+0.net] >>586 例えばどんなの?
611 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 07:25:18.09 ID:S7OmeNGW0.net] Visual Studio 2017 #define offsetof(s,m) ((size_t)&(((s*)0)->m)) gcc 7.2.0 #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER) clang 6.0.0 #define offsetof(t, d) __builtin_offsetof(t, d) borland 5.5.1 #define offsetof( s_name, m_name ) (_SIZE_T)&(((s_name _FAR *)0)->m_name)
612 名前:デフォルトの名無しさん mailto:sage釣 [2018/03/25(日) 15:04:40.75 ID:9t80sXyiM.net] >>587 >ポインタ演算を使った式が整定数になる保証がないので別の手段を ポインタ演算の結果が浮動小数点とか変数になる例早よう出しなされ
613 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 15:25:31.63 ID:wNhLkN4j0.net] メモリーの仕切り壁に落書きするポインタ 9と3/4番線ホームから出発する列車を指し示すポインタ あれば便利かも知れないが(何がだ)
614 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 17:42:21.62 ID:S7OmeNGW0.net] 鉄道に例えるならポイント(線路の分岐)を制御するデコーダに与える信号がCのポインタだ
615 名前:デフォルトの名無しさん [2018/03/25(日) 18:06:41.94 ID:qleen6XJF.net] それじゃ型が考慮されてない
616 名前:デフォルトの名無しさん mailto:sage [2018/03/25(日) 18:24:31.28 ID:EKcNWVxa0.net] >>591 その前に、まずはポインタ演算を使った結果が整定数になることが保証されている例を出してくれ。 当然規格は読んでいるよね。6.6p6より > An integer constant expression shall have integer type and shall only have operands > that are integer constants, enumeration constants, character constants, > sizeof expressions whose results are integer constants, and floating constants that are the > immediate operands of casts.