1 名前:デフォルトの名無しさん [2018/08/16(木) 23:36:02.22 ID:fOCSKLtw.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言語なら俺に聞け 146 https://mevius.5ch.net/test/read.cgi/tech/1525031257/
862 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 15:44:39.72 ID:DwszjCT1.net] 変数中の "1" のビット数を数える効率的方法ありますか? aが32ビットとして for (i = 0; i < 32; i++) { j = j + a & 1; a = a >> 1; } みたいに1ビットずつカウントするしかないでしょうか あるいは、8bitとかで区切ってテーブルを引いて加算とかでしょうか(16ビットや32ビットのテーブルは現実的でないので)
863 名前:デフォルトの名無しさん [2018/09/09(日) 15:50:52.78 ID:V1LakR3i.net] a=(a&0a55555555)+(a>>1 &0a55555555); a=(a&0a33333333)+(a>>2 &0a33333333); a=(a&0a0F0F0F0F)+(a>>4 &0a0F0F0F0F); a=(a&0a00FF00FF)+(a>>8 &0a00FF00FF); a=(a&0a0000FFFF)+(a>>16 &0a0000FFFF);
864 名前:デフォルトの名無しさん [2018/09/09(日) 15:53:41.89 ID:V1LakR3i.net] a = (a & 0x55555555) + (a >> 1 & 0x55555555); a = (a & 0x33333333) + (a >> 2 & 0x33333333); a = (a & 0x0F0F0F0F) + (a >> 4 & 0x0F0F0F0F); a = (a & 0x00FF00FF) + (a >> 8 & 0x00FF00FF); a = (a & 0x0000FFFF) + (a >> 16 & 0x0000FFFF);
865 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 16:07:17.49 ID:TAQT5wBe.net] 32ビットだしその書き方良くないと思います
866 名前:デフォルトの名無しさん [2018/09/09(日) 16:54:40.77 ID:V1LakR3i.net] https://ideone.com/FGqs1S なにも問題ない レスをコピペで普通に動く アホがいちいち車輪の再発明するよりとりあえず↓コレ使っとけば間違いない gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html Built-in Function: int __builtin_popcount (unsigned int x) Returns the number of 1-bits in x. Built-in Function: int __builtin_popcountl (unsigned long) Similar to __builtin_popcount, except the argument type is unsigned long. Built-in Function: int __builtin_parityll (unsigned long long) Similar to __builtin_parity, except the argument type is unsigned long long.
867 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 17:39:09.00 ID:/XE3HNn6.net] >>847 自作ツールで無茶苦茶 役に立ってしまった。 そうか、クソコードだったかw それはさておき今回の発端>>757 は、 メモリリークなんか気にしはじめたら 修正コストがどれくらいかかるか わからない、それだったら現状で 問題は表面化してないし、 そのままでいいじゃん、みたいな 状況だと思う。 Vargrindを導入して 手軽にメモリリークを チェックできれるようになれば、 上司にもとりあえず直しましょう という説得ができる チャンスもあるかも。
868 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 17:57:06.08 ID:2r/FT+Vi.net] >>850 うまいやり方だなぁ
869 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 17:57:22.00 ID:lGJ+2GvF.net] >>850 この式は初めて見ると訳の分からない呪文みたいだけど、 落ち着いて考えると分割統治の技法を並列処理してるんだよね。 これで1の立ってるビットの数が分かる理由を考えるのは良い教材かと。
870 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 18:06:01.01 ID:2r/FT+Vi.net] >>850 少なくとも最後の行だけは a = (a + (a >> 16)) & 0x0000FFFF; の方がよさそう。 正確には最大 32 にしかならないから & 0x0000001F でもよさそうだし、値の上限を考えながらだと途中の行ももう少し演算を減らせたりするかも?
871 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 18:06:59.52 ID:2r/FT+Vi.net] >>856 0x0000003F だったw
872 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 20:35:00.38 ID:2r/FT+Vi.net] >>850 a = (a & 0x55555555) + (a >> 1 & 0x55555555); a = (a & 0x33333333) + (a >> 2 & 0x33333333); a = (a + (a >> 4)) & 0x0F0F0F0F0F; a += a >> 8; a = (a + (a >> 16)) & 0x3F; でも同じ結果が得られた。 最適化無しだと 9% くらい速くなった。
873 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 20:36:22.47 ID:2r/FT+Vi.net] >>858 0F 多すぎw 0x0F0F0F0F ね
874 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:00:45.14 ID:4c2hO8gX.net] しね
875 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:13:17.93 ID:2r/FT+Vi.net] a = (a & 0x55555555) + (a >> 1 & 0x55555555); a = (a & 0x33333333) + (a >> 2 & 0x33333333); a = (a + (a >> 4)) & 0x0F0F0F0F; a = (a * 0x101 * 0x10001) >> 24; にしたら >>850 より 24% 速くなった(pentiumM linux)。 でも gcc の速度最適化を入れるとどれも変わらないね。
876 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:19:41.88 ID:4c2hO8gX.net] なに1人ではしゃいでんのこいつ。
877 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:28:41.02 ID:Vmegj8Hy.net] CPUにそういう命令なかったっけ? 使うところでは割と使いそうだけど
878 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:45:09.16 ID:5vkdTLeD.net] >>863 AlphaとかM16Cとか古いCPUにはあった気がする。 最近はあんまり見ないね。
879 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 21:54:33.81 ID:nMOWxsiw.net] ああ、SSEにpopcntがあるね
880 名前:デフォルトの名無しさん mailto:sage [2018/09/09(日) 22:32:42.62 ID:hCV1tk8e.net] ポックント
881 名前:デフォルトの名無しさん [2018/09/10(月) 02:37:34.95 ID:hUyLWeb6.net] ビットを数える・探すアルゴリズム www.nminoru.jp/~nminoru/programming/bitcount.html
882 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 10:36:25.17 ID:o5mvkory.net] ビット数の数えあげが欲しくなるのってパリティチェックで末尾付加したりするとき?
883 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 10:44:53.73 ID:cl7nWcjG.net] ソケットみたいにフラグをビット管理してるときとかもほしくなるかな
884 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 10:56:31.39 ID:ddUFIgl6.net] 符号とか暗号とかの世界ではしょっちゅう使うよ。 1の数で最適なアルゴリズムが変わるってケースもあるし、 暗号にサイドチャネル攻撃仕掛けるにはハミング距離とか重要。
885 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 11:27:01.59 ID:o5mvkory.net] >>870 はなんとなく理解できるけど >>869 のほうは想像がつかないな ビット管理されたフラグと ONしてるビット数による分岐や演算法が変わるのが直結しない感じ
886 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 11:51:19.73 ID:kNISuHie.net] フラグは数えねえよな 性能重視でもなければビットフィールド使って読みやすくして欲しいわ
887 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 11:54:23.84 ID:iqhXZjjt.net] バラで書くから読みにくいのであって 関数にしておけば外から見た仕様は変わらない
888 名前:デフォルトの名無しさん [2018/09/10(月) 12:16:32.03 ID:/R6yufrK.net] 普通の通信でエラー検出以外の目的でビット数を数える必要性がわからない。 そんな特定のCPU以外は必ず無駄な計算が必要になる方式をなぜ使う?
889 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 12:46:33.22 ID:x2RTnFiS.net] >>874 エラー検出、訂正目的以外の通信のためにビットの数え上げするって誰かレスしてたっけ?
890 名前:デフォルトの名無しさん [2018/09/10(月) 15:09:59.53 ID:rXvKnWV4.net] >>875 >>869 はそうではないのか?ならば居ないな。
891 名前:デフォルトの名無しさん [2018/09/10(月) 19:25:38.98 ID:YAHzQjjo.net] >>821 んーこの文章読むと、よく教科書的な本に書かれてる関数に対してexternを書きましょうってのは冗長で不要って話なのね。確かに実際の動きとは合うし勉強になりました。 >>822 書いてる意図を汲めてるのか自信ないけど、他のサイトにもリンカ依存とあって、この話が全ての環境に対して正しい話なのか・・・若干不安はある感じ?
892 名前:デフォルトの名無しさん [2018/09/10(月) 19:32:05.94 ID:WVFJrP31.net] Common Lisp にビットを数える関数があるけどcでも同様のものがあったようなゔ
893 名前:デフォルトの名無しさん [2018/09/10(月) 20:00:47.59 ID:pZnz0RBT.net] int a=0; printf("%p" ,a); printf("%p",&a); 同じアドレスが表示されると思っていたのですが、上下で違う数字が出力されました。 アドレスを表示するのはどちらが正しいのでしょうか? よろしくお願いします。
894 名前:さまよえる蟻人間 mailto:sage [2018/09/10(月) 20:06:35.73 ID:NJC2soWX.net] 下。
895 名前:デフォルトの名無しさん [2018/09/10(月) 20:07:47.31 ID:WGo2tHWR.net] >>879 &a の方。 ていうか同じになるわけがない。片方は printf() に a の内容である 0 を渡しているんだから。
896 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 20:26:02.04 ID:6MAzJtEj.net] %p は ポインタを要求しているが ポインタのサイズと intのサイズが違ってたら 鼻から悪魔
897 名前:デフォルトの名無しさん [2018/09/10(月) 20:28:01.62 ID:pZnz0RBT.net] >>880 >>881 >>882 指定子Pで&が付いてない方も変換されると思っていました。 ただの数値が表示されるだけなんですね。 int *a; int b=0; a=&b; printf("%p",a); この場合は&が付いてなくてもアドレスを渡してるのでokなんですね。 ありがとうございました。
898 名前:デフォルトの名無しさん [2018/09/10(月) 20:29:18.90 ID:WGo2tHWR.net] 天文学的な値が出るかも知れんね
899 名前:デフォルトの名無しさん [2018/09/10(月) 20:30:01.84 ID:WGo2tHWR.net] >>883 そうそう。そういうこと。
900 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 20:43:33.30 ID:l5sdNefZ.net] >>869 それはどっちかって言うとビットサーチだね 68020 とかの BFFFO 命令とか
901 名前:デフォルトの名無しさん [2018/09/10(月) 21:01:01.97 ID:XzQQxj6r.net] https://ideone.com/bsjclG また、低学歴知恵遅れのクルクルパーがウソ書いてるわ。。。 64bitのアドレス空間を持ってて、intのサイズが32bitならちゃんと動くワケがないからな
902 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:07:42.09 ID:XxqHEWUO.net] >>887 どの書き込みに対してのレス?
903 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:11:41.72 ID:7zqNUn7X.net] >>887 これまたチンケな知識でマウント取りに来たな w
904 名前:デフォルトの名無しさん [2018/09/10(月) 21:12:59.71 ID:XzQQxj6r.net] ID:WGo2tHWR ← コイツにきまってんだろ なあにが そうそう。そういうこと。 だ なにも知らないムクなヤツ相手に 低学歴知恵遅れの分際でテキトーなことばっかり書き込んでる
905 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:16:56.02 ID:XxqHEWUO.net] ん?これのこと? > printf() に a の内容である 0 を渡している
906 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:19:04.26 ID:6SoA/END.net] こんなにでかい釣り針だと 鯨が釣れるかも
907 名前:デフォルトの名無しさん [2018/09/10(月) 21:19:36.92 ID:XzQQxj6r.net] >>883 ← ムクな初心者 >>885 ← 低学歴知恵遅れ ID:WGo2tHWR 「そうそう。そういうこと。」 ← コレのコトだ 低学歴知恵遅れはレスもおえないの?
908 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:21:51.21 ID:XxqHEWUO.net] あれ? int *a; int b=0; a=&b; printf("%p",a); って別に正しくね?
909 名前:デフォルトの名無しさん [2018/09/10(月) 21:22:53.59 ID:XzQQxj6r.net] https://ideone.com/bsjclG この処理結果みても分からないなら オツムに相当な問題がある
910 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:25:52.44 ID:XxqHEWUO.net] ううむ、俺にはaは64ビット環境だと64ビット長に見えるのだが違うのか?
911 名前:デフォルトの名無しさん [2018/09/10(月) 21:27:36.20 ID:XzQQxj6r.net] で、処理結果みた? で、処理結果みた? で、処理結果みた?
912 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:29:43.88 ID:XxqHEWUO.net] おたくのサンプルは64ビットアドレスをintにキャストしちゃてるやん。そりゃ実行結果違うわ。
913 名前:デフォルトの名無しさん [2018/09/10(月) 21:31:35.87 ID:XzQQxj6r.net] https://ideone.com/PGwK6j キャストはずしたったぞ 当然、結果はかわらない やっぱりなこの板は低学歴知恵遅れしかいない この程度のこともわからずにいきってレスしてるワケだからな
914 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:31:51.59 ID:6MAzJtEj.net] たまたま 足りない分 0 を引っ張ってきてるけど(レジスタで渡ったから?) スタックに積んでるリターンアドレスの一部から足りないのを補ってると、もっとわけわかな数値に 未定儀の挙動を推測すすのもまたオツなもの か
915 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:32:51.
] [ここ壊れてます]
916 名前:39 ID:XxqHEWUO.net mailto: いやいや、883のaはポインタなんだってw なんでintに入れちゃうのw [] [ここ壊れてます]
917 名前:デフォルトの名無しさん [2018/09/10(月) 21:33:36.29 ID:XzQQxj6r.net] そんなことオレのしったことじゃないからな >>883 ← ムクな初心者 >>885 ← 低学歴知恵遅れ ID:WGo2tHWR 「そうそう。そういうこと。」 ← コレのコトだ 低学歴知恵遅れはレスもおえないの?
918 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:40:38.56 ID:lZ/O7dtJ.net] 半角クンていつも周りを見ずに自分の思い込みだけでレスしちゃって誤り訂正できないから、恥ずかしい(*/□\*) 直進しかできない目隠しされたイノシシみたい
919 名前:デフォルトの名無しさん [2018/09/10(月) 21:42:09.42 ID:XzQQxj6r.net] なにが間違いなわけ 指摘してみ 一切間違ったこと書いてないからな 低学歴知恵遅れはそもそも認知能力に問題がある
920 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:47:36.63 ID:XxqHEWUO.net] なぜ64ビットポインタをintに入れたの? 883ではそんなこと一切してないんだけど。 逆に >printf() に a の内容である 0 を渡している は整数リテラルがintなのに%pで受けてるので、64ビット環境なら4バイト分スタックのゴミを拾ってきそうだけど。
921 名前:デフォルトの名無しさん [2018/09/10(月) 21:48:46.40 ID:XzQQxj6r.net] はずかしくなって こっち側にこようとしても もう手遅れだからな
922 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:50:57.43 ID:XxqHEWUO.net] なんだ、結局はaがポインタだってことを見逃しただけかよw
923 名前:デフォルトの名無しさん mailto:sage [2018/09/10(月) 21:55:18.07 ID:cYYSBBs1.net] >>906 つ鏡
924 名前:デフォルトの名無しさん [2018/09/11(火) 00:11:24.08 ID:X6CualfE.net] >>887 >>883 はちゃんと動くよ。
925 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 06:35:01.60 ID:pvBPsgEg.net] >>909 半角野郎が数行のプログラムも理解できないくせに自分で改竄したコードが動かねぇって騒いでただけ。 半角野郎こそ低学歴知恵遅れクルクルパーで認知能力とオツムに相当な問題があるってことが証明されただけなので気にするな。 本人は顔真っ赤にして逃げたみたいだけど。
926 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 07:57:47.34 ID:2zsIBj+S.net] ポインタを受け取るべき%p変換指定子に、ポインタでない値を与えることの 危険性は >>882 ですでに指摘されてるのに、後乗りで書いた >>887 で こんだけ引っ張れるのは、ある意味で才能かもな。 汚い言葉遣いを我慢しながら拝聴するほど啓蒙的な内容でもないし。
927 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 08:11:06.15 ID:NBDkJ3+C.net] >>911 半角クンのレスは、5%の真実と15%の間違い・思い込みと80%の繰り言・罵詈雑言でできてるからね。まっとうに読む価値はない。
928 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 09:54:24.68 ID:oX9GyHv1.net] まれにいいこと言う 850とか
929 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 10:00:02.68 ID:R1B4IsqD.net] 釣り針が大きすぎて、クジラじゃないと釣れない
930 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 11:44:57.89 ID:zLtJmO+E.net] musl-libcのiconvコマンドの本体ってここを見ればいいよね? https://git.musl-libc.org/cgit/musl/tree/src/locale/iconv.c
931 名前:デフォルトの名無しさん [2018/09/11(火) 20:05:08.62 ID:YMBQMGAL.net] 処理系って何? cpuかコンパイラの事かなと思ってるんだけど。 間違ってる?
932 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 20:29:34.46 ID:5X7KAgIC.net] 処理系は、翻訳環境と、実行環境に大別される 翻訳環境とはコンパイラ等開発ツールを実行する環境 実行環境とはコンパイル結果のバイナリが稼働する環境、客先と言ってもよい
933 名前:デフォルトの名無しさん [2018/09/11(火) 20:36:50.64 ID:YMBQMGAL.net] >>917 バイナリが稼働する環境はcpuってことかな どうもお世話になりました
934 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 20:45:37.73 ID:5X7KAgIC.net] cpuだけじゃないメモリが実装されているアドレス i/oが実装されているアドレス osの挙動 など様々な要因が絡む
935 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 21:01:49.97 ID:LZbcaZ/B.net] CPUが同じであっても、 Windowsでは動かせてもmacOSでは動かないとか 同じWindowsでも、64bit環境では動いても32bit環境だと動かないとか
936 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 21:12:52.13 ID:ShO/owiX.net] 半角くん、いたの? lynx で見てるから何言ってるかわからない。
937 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 21:17:38.28 ID:pVzZZpUQ.net] ゴミPC早く捨てろ
938 名前:デフォルトの名無しさん mailto:sage [2018/09/11(火) 21:28:47.48 ID:zLtJmO+E.net] 処理系ってC99に関してはJISで定義されてたよね。
939 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 21:21:47.72 ID:1sKEH3Wo.net] 昔の教科書には C言語の原稿 ↓プリプロセッサ マクロ・ヘッダファイルが展開された原稿 ↓翻訳機 アセンブリ言語の原稿 ↓アセンブラ 機械語 ↓リンカ 実行可能ファイル っていう図がよく描かれてて,今でもWebを検索するとよく見掛けるんだけど,ほんとに今現在のコンパイラってこういうことやってんの? gccやclangって,もはやC言語の原稿からほぼほぼ直接に実行可能ファイルを生成してるんじゃない? さすがにプリプロセッサくらいはあるかもしれんが。
940 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 21:32:27.37 ID:CY4XgXEU.net] -vつけて起動してみ。 プリプロcppはcc1に統合された。 gccだと、cc1とかasとかcollect2とかが動いてるはず。 clangはデフォルトだとasなしかも。
941 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 21:54:33.53 ID:1sKEH3Wo.net] >>925 あざす やっぱり減ってはいるんだな。 結構ああいう図を見掛けるんで,なんか(ほんとにこんな段階踏んでんのか?)ってモヤモヤしてた。 素人考えだが,あんな風に幾つも重ねてビルドしてたら最適化しにくい気がするし。
942 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 22:33:23.35 ID:brIJUf4C.net] 処理としてはわかれてるよそりゃ
943 名前:デフォルトの名無しさん mailto:sage [2018/09/13(木) 23:18:13.03 ID:1sKEH3Wo.net] え そうなん と思って空のファイルをgcc -vで処理したら たしかにある程度進んでリンカの段階で エラーになったわ。
944 名前:デフォルトの名無しさん [2018/09/13(木) 23:28:49.69 ID:yqnwLH2V.net] bash-4.3$ gcc -v -o aho aho.c ←開始 /usr/lib/gcc/i586-slackware-linux/5.3.0/specs から spec を読み込んでいます COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/i586-slackware-linux/5.3.0/lto-wrapper ターゲット: i586-slackware-linux configure 設定: ../gcc-5.3.0/configure --prefix=/usr --libdir=/usr/lib --mandir =/usr/man --infodir=/usr/info --enable-shared --enable-bootstrap --enable-langu ages=ada,c,c++,fortran,go,java,lto,objc --enable-threads=posix --enable-checkin g=release --enable-objc-gc --with-system-zlib --with-python-dir=/lib/python2.7/ site-packages --enable-libstdcxx-dual-abi --with-default-libstdcxx-abi=gcc4-com patible --disable-libunwind-exceptions --enable-__cxa_atexit --enable-libssp -- enable-lto --disable-install-libiberty --with-gnu-ld --verbose --enable-java-ho me --with-java-home=/usr/lib/jvm/jre --with-jvm-root-dir=/usr/lib/jvm --with-jv m-jar-dir=/usr/lib/jvm/jvm-exports --with-arch-directory=i386 --with-antlr-jar= /root/slackware-current/source/d/gcc/antlr-runtime-3.4.jar --enable-java-awt=gt k --disable-gtktest --with-arch=i586 --target=i586-slackware-linux --build=i586 -slackware-linux --host=i586-slackware-linux スレッドモデル: posix gcc バージョン 5.3.0 (GCC) (-続く-)
945 名前:デフォルトの名無しさん [2018/09/13(木) 23:29:23.47 ID:yqnwLH2V.net] (-続き-) COLLECT_GCC_OPTIONS='-v' '-o' 'aho' '-mtune=pentium' '-march=i586' /usr/libexec/gcc/i586-slackware-linux/5.3.0/cc1 -quiet -v aho.c -quiet -dumpba se aho.c -mtune=pentium -march=i586 -auxbase aho -version -o /tmp/ccVi37md.s ← @プリプロセス GNU C11 (GCC) version 5.3.0 (i586-slackware-linux) compiled by GNU C version 5.3.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3 warning: GMP header version 6.1.0 differs from library version 6.1.2. GGC heuristics: --param ggc-min-expand=63 --param ggc-min-heapsize=62246 存在しないディレクトリ "/usr/lib/gcc/i586-slackware-linux/5.3.0/../../../../i58 6-slackware-linux/include" を無視します #include "..." の探索はここから始まります: #include <...> の探索はここから始まります: /usr/lib/gcc/i586-slackware-linux/5.3.0/include /usr/local/include /usr/lib/gcc/i586-slackware-linux/5.3.0/include-fixed /usr/include 探索リストの終わりです。 (-続く-)
946 名前:デフォルトの名無しさん [2018/09/13(木) 23:30:05.16 ID:yqnwLH2V.net] (-続き-) GNU C11 (GCC) version 5.3.0 (i586-slackware-linux) ← Aコンパイル compiled by GNU C version 5.3.0, GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3 MPC version 1.0.3 warning: GMP header version 6.1.0 differs from library version 6.1.2. GGC heuristics: --param ggc-min-expand=63 --param ggc-min-heapsize=62246 Compiler executable checksum: c5a3ffed702d1cd048214b2b66d4a98a (-続く-)
947 名前:デフォルトの名無しさん [2018/09/13(木) 23:30:29.37 ID:yqnwLH2V.net] (-続き-) COLLECT_GCC_OPTIONS='-v' '-o' 'aho' '-mtune=pentium' '-march=i586' /usr/lib/gcc/i586-slackware-linux/5.3.0/../../../../i586-slackware-linux/bin/a s -v --32 -o /tmp/ccMFr9O6.o /tmp/ccVi37md.s ← Bアセンブル GNU アセンブラ バージョン 2.26 (i586-slackware-linux)、BFD バージョン version 2 .26.20160125 を使用 (-続く-)
948 名前:デフォルトの名無しさん [2018/09/13(木) 23:31:04.04 ID:yqnwLH2V.net] (-続き-) COMPILER_PATH=/usr/libexec/gcc/i586-slackware-linux/5.3.0/:/usr/libexec/gcc/i58 6-slackware-linux/5.3.0/:/usr/libexec/gcc/i586-slackware-linux/:/usr/lib/gcc/i5 86-slackware-linux/5.3.0/:/usr/lib/gcc/i586-slackware-linux/:/usr/lib/gcc/i586- slackware-linux/5.3.0/../../../../i586-slackware-linux/bin/ LIBRARY_PATH=/usr/lib/gcc/i586-slackware-linux/5.3.0/:/usr/lib/gcc/i586-slackwa re-linux/5.3.0/../../../../i586-slackware-linux/lib/:/usr/lib/gcc/i586-slackwar e-linux/5.3.0/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-v' '-o' 'aho' '-mtune=pentium' '-march=i586' /usr/libexec/gcc/i586-slackware-linux/5.3.0/collect2 -plugin /usr/libexec/gcc/ i586-slackware-linux/5.3.0/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/i586-s lackware-linux/5.3.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccGuF6mf.res -pl ugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pas s-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o aho /usr/lib/ gcc/i586-slackware-linux/5.3.0/../../../crt1.o /usr/lib/gcc/i586-slackware-linu x/5.3.0/../../../crti.o /usr/lib/gcc/i586-slackware-linux/5.3.0/crtbegin.o -L/u sr/lib/gcc/i586-slackware-linux/5.3.0 -L/usr/lib/gcc/i586-slackware-linux/5.3.0 /../../../../i586-slackware-linux/lib -L/usr/lib/gcc/i586-slackware-linux/5.3.0 /../../.. /tmp/ccMFr9O6.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc -- as-needed -lgcc_s --no-as-needed /usr/lib/gcc/i586-slackware-linux/5.3.0/crtend .o /usr/lib/gcc/i586-slackware-linux/5.3.0/../../../crtn.o ← Cリンク
949 名前:デフォルトの名無しさん [2018/09/13(木) 23:34:54.24 ID:yqnwLH2V.net] 普通に別々のモジュールで独立して処理されてる @プリプロセス /usr/libexec/gcc/i586-slackware-linux/5.3.0/cc1 Aコンパイル /usr/bin/gcc Bアセンブル /usr/lib/gcc/i586-slackware-linux/5.3.0/../../../../i586-slackware-linux/bin/as Cリンク /usr/libexec/gcc/i586-slackware-linux/5.3.0/collect2
950 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 00:17:52.55 ID:lqNqtREE.net] >>934 /usr/bib/gccはちげーだろ
951 名前:デフォルトの名無しさん [2018/09/14(金) 00:51:20.40 ID:q3l06dS7.net] >>934 コンパイルは /usr/lib/x86_64-linux-gnu/6/cc1 だな。俺の場合
952 名前:デフォルトの名無しさん [2018/09/14(金) 00:58:32.39 ID:fXySkelb.net] bash-4.3$ gcc -v -E -o aho_.c aho.c ←開始 /usr/lib/gcc/i586-slackware-linux/5.3.0/specs から spec を読み込んでいます COLLECT_GCC=gcc ターゲット: i586-slackware-linux configure 設定: ../gcc-5.3.0/configure --prefix=/usr --libdir=/usr/lib --mandir =/usr/man --infodir=/usr/info --enable-shared --enable-bootstrap --enable-langu ages=ada,c,c++,fortran,go,java,lto,objc --enable-threads=posix --enable-checkin g=release --enable-objc-gc --with-system-zlib --with-python-dir=/lib/python2.7/ site-packages --enable-libstdcxx-dual-abi --with-default-libstdcxx-abi=gcc4-com patible --disable-libunwind-exceptions --enable-__cxa_atexit --enable-libssp -- enable-lto --disable-install-libiberty --with-gnu-ld --verbose --enable-java-ho me --with-java-home=/usr/lib/jvm/jre --with-jvm-root-dir=/usr/lib/jvm --with-jv m-jar-dir=/usr/lib/jvm/jvm-exports --with-arch-directory=i386 --with-antlr-jar= /root/slackware-current/source/d/gcc/antlr-runtime-3.4.jar --enable-java-awt=gt k --disable-gtktest --with-arch=i586 --target=i586-slackware-linux --build=i586 -slackware-linux --host=i586-slackware-linux スレッドモデル: posix (-続く-)
953 名前:デフォルトの名無しさん [2018/09/14(金) 00:59:43.97 ID:fXySkelb.net] (-続き-) gcc バージョン 5.3.0 (GCC) COLLECT_GCC_OPTIONS='-v' '-E' '-o' 'aho_.c' '-mtune=pentium' '-march=i586' /usr/libexec/gcc/i586-slackware-linux/5.3.0/cc1 -E -quiet -v aho.c -o aho_.c - mtune=pentium -march=i586 存在しないディレクトリ "/usr/lib/gcc/i586-slackware-linux/5.3.0/../../../../i58 6-slackware-linux/include" を無視します #include "..." の探索はここから始まります: #include <...> の探索はここから始まります: /usr/lib/gcc/i586-slackware-linux/5.3.0/include /usr/local/include /usr/lib/gcc/i586-slackware-linux/5.3.0/include-fixed /usr/include 探索リストの終わりです。 COMPILER_PATH=/usr/libexec/gcc/i586-slackware-linux/5.3.0/:/usr/libexec/gcc/i58 6-slackware-linux/5.3.0/:/usr/libexec/gcc/i586-slackware-linux/:/usr/lib/gcc/i5 86-slackware-linux/5.3.0/:/usr/lib/gcc/i586-slackware-linux/:/usr/lib/gcc/i586- slackware-linux/5.3.0/../../../../i586-slackware-linux/bin/ LIBRARY_PATH=/usr/lib/gcc/i586-slackware-linux/5.3.0/:/usr/lib/gcc/i586-slackwa re-linux/5.3.0/../../../../i586-slackware-linux/lib/:/usr/lib/gcc/i586-slackwar e-linux/5.3.0/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-v' '-E' '-o' 'aho_.c' '-mtune=pentium' '-march=i586' エラーなし
954 名前:デフォルトの名無しさん [2018/09/14(金) 01:02:16.51 ID:fXySkelb.net] プリプロセス前 bash-4.3$ cat aho.c #include <stdio.h> #define ahobaka "あほばか" #define AHOBAKA aho##baka #define LIT(str) #str #define PRINT(f,...) fprintf(stdout, f, __VA_ARGS__) #define SHINE PRINT("%s%s\n", AHOBAKA, LIT(a"b"c)) int main(void) { SHINE; return 0; } プリプロセス後 bash-4.3$ cat aho_.c (-略-) # 8 "aho.c" int main(void) { fprintf( # 9 "aho.c" 3 4 stdout # 9 "aho.c" , "%s%s\n", "あほばか", "a\"b\"c"); return 0; }
955 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 04:27:04.26 ID:q3l06dS7.net] pcc(1)とかで試すとわかりやすいとおもう。
956 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 05:58:00.88 ID:3Ef1q6jY.net] コンパイラが(プリプロセス済みの)ソースを処理する際、 直接にはアセンブリのソースに持っていかず、いったん中間言語に変換。 その中間言語の段階でも最適化を行ってから アセンブリに変換してアセンブル・リンク。 ……みたいな手順になってると聞いたことがある。 中間言語段階の中間ファイルを出力させることができるか知らんけど。 プリプロセッサ、コンパイラ、アセンブラ、リンカよりも 内部的な手順はむしろ増えてるのかも。
957 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 07:13:28.65 ID:RUHHwTRx.net] >>941 実行時コンパイラ https://ja.wikipedia.org/wiki/%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9
958 名前:デフォルトの名無しさん [2018/09/14(金) 08:36:29.54 ID:SYmkUqRw.net] JITとなんの関係が?
959 名前:デフォルトの名無しさん [2018/09/14(金) 08:49:57.91 ID:q3l06dS7.net] >>941 >>924 の図に倣うなら C言語の原稿 ↓プリプロセッサ マクロ・ヘッダファイルが展開された原稿 ↓翻訳機1 中間言語(最適化済み) ↓翻訳機2 アセンブリ言語の原稿 ↓アセンブラ 機械語 ↓リンカ 実行可能ファイル みたいなかんじかね。
960 名前:デフォルトの名無しさん [2018/09/14(金) 09:12:54.86 ID:d02sSTx1.net] 昔 LSIゲームってあったでしょ ああいうゲームをCで書いてパソコンで遊びたいんだけど 技術的な情報が不足してんだ 特に画面を動かす方法 そういうのどこで手に入るか分かる人いる? 教えてくださいヽ(^o^)丿
961 名前:デフォルトの名無しさん mailto:sage [2018/09/14(金) 09:49:18.88 ID:1qfFvEAu.net] cursesライブラリを使う
962 名前:デフォルトの名無しさん [2018/09/14(金) 10:39:42.96 ID:i1kWv4b4.net] CでGUIまでやりたいということか? うーん・・・