C言語なら俺に聞け 147

レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん
垢版 |
2018/08/16(木) 23:36:02.22ID:fOCSKLtw
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

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

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

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

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


C言語なら俺に聞け 146
https://mevius.5ch.net/test/read.cgi/tech/1525031257/
2018/09/09(日) 21:45:09.16ID:5vkdTLeD
>>863
AlphaとかM16Cとか古いCPUにはあった気がする。
最近はあんまり見ないね。
2018/09/09(日) 21:54:33.81ID:nMOWxsiw
ああ、SSEにpopcntがあるね
2018/09/09(日) 22:32:42.62ID:hCV1tk8e
ポックント
867デフォルトの名無しさん
垢版 |
2018/09/10(月) 02:37:34.95ID:hUyLWeb6
ビットを数える・探すアルゴリズム
http://www.nminoru.jp/~nminoru/programming/bitcount.html
2018/09/10(月) 10:36:25.17ID:o5mvkory
ビット数の数えあげが欲しくなるのってパリティチェックで末尾付加したりするとき?
2018/09/10(月) 10:44:53.73ID:cl7nWcjG
ソケットみたいにフラグをビット管理してるときとかもほしくなるかな
2018/09/10(月) 10:56:31.39ID:ddUFIgl6
符号とか暗号とかの世界ではしょっちゅう使うよ。
1の数で最適なアルゴリズムが変わるってケースもあるし、
暗号にサイドチャネル攻撃仕掛けるにはハミング距離とか重要。
2018/09/10(月) 11:27:01.59ID:o5mvkory
>>870 はなんとなく理解できるけど >>869 のほうは想像がつかないな
ビット管理されたフラグと ONしてるビット数による分岐や演算法が変わるのが直結しない感じ
2018/09/10(月) 11:51:19.73ID:kNISuHie
フラグは数えねえよな
性能重視でもなければビットフィールド使って読みやすくして欲しいわ
2018/09/10(月) 11:54:23.84ID:iqhXZjjt
バラで書くから読みにくいのであって
関数にしておけば外から見た仕様は変わらない
874デフォルトの名無しさん
垢版 |
2018/09/10(月) 12:16:32.03ID:/R6yufrK
普通の通信でエラー検出以外の目的でビット数を数える必要性がわからない。
そんな特定のCPU以外は必ず無駄な計算が必要になる方式をなぜ使う?
2018/09/10(月) 12:46:33.22ID:x2RTnFiS
>>874
エラー検出、訂正目的以外の通信のためにビットの数え上げするって誰かレスしてたっけ?
876デフォルトの名無しさん
垢版 |
2018/09/10(月) 15:09:59.53ID:rXvKnWV4
>>875
>>869はそうではないのか?ならば居ないな。
877デフォルトの名無しさん
垢版 |
2018/09/10(月) 19:25:38.98ID:YAHzQjjo
>>821
んーこの文章読むと、よく教科書的な本に書かれてる関数に対してexternを書きましょうってのは冗長で不要って話なのね。確かに実際の動きとは合うし勉強になりました。

>>822
書いてる意図を汲めてるのか自信ないけど、他のサイトにもリンカ依存とあって、この話が全ての環境に対して正しい話なのか・・・若干不安はある感じ?
878デフォルトの名無しさん
垢版 |
2018/09/10(月) 19:32:05.94ID:WVFJrP31
Common Lisp にビットを数える関数があるけどcでも同様のものがあったようなゔ
879デフォルトの名無しさん
垢版 |
2018/09/10(月) 20:00:47.59ID:pZnz0RBT
int a=0;

printf("%p" ,a);

printf("%p",&a);

同じアドレスが表示されると思っていたのですが、上下で違う数字が出力されました。
アドレスを表示するのはどちらが正しいのでしょうか?
よろしくお願いします。
2018/09/10(月) 20:06:35.73ID:NJC2soWX
下。
881デフォルトの名無しさん
垢版 |
2018/09/10(月) 20:07:47.31ID:WGo2tHWR
>>879
&a の方。

ていうか同じになるわけがない。片方は printf() に a の内容である 0 を渡しているんだから。
2018/09/10(月) 20:26:02.04ID:6MAzJtEj
%p は ポインタを要求しているが
ポインタのサイズと intのサイズが違ってたら 鼻から悪魔
883デフォルトの名無しさん
垢版 |
2018/09/10(月) 20:28:01.62ID:pZnz0RBT
>>880
>>881
>>882

指定子Pで&が付いてない方も変換されると思っていました。
ただの数値が表示されるだけなんですね。

int *a;
int b=0;

a=&b;

printf("%p",a);
この場合は&が付いてなくてもアドレスを渡してるのでokなんですね。

ありがとうございました。
884デフォルトの名無しさん
垢版 |
2018/09/10(月) 20:29:18.90ID:WGo2tHWR
天文学的な値が出るかも知れんね
885デフォルトの名無しさん
垢版 |
2018/09/10(月) 20:30:01.84ID:WGo2tHWR
>>883
そうそう。そういうこと。
2018/09/10(月) 20:43:33.30ID:l5sdNefZ
>>869
それはどっちかって言うとビットサーチだね
68020 とかの BFFFO 命令とか
887デフォルトの名無しさん
垢版 |
2018/09/10(月) 21:01:01.97ID:XzQQxj6r
https://ideone.com/bsjclG

また、低学歴知恵遅れのクルクルパーがウソ書いてるわ。。。
64bitのアドレス空間を持ってて、intのサイズが32bitならちゃんと動くワケがないからな
2018/09/10(月) 21:07:42.09ID:XxqHEWUO
>>887
どの書き込みに対してのレス?
2018/09/10(月) 21:11:41.72ID:7zqNUn7X
>>887
これまたチンケな知識でマウント取りに来たな w
890デフォルトの名無しさん
垢版 |
2018/09/10(月) 21:12:59.71ID:XzQQxj6r
ID:WGo2tHWR ← コイツにきまってんだろ

なあにが

 そうそう。そういうこと。



なにも知らないムクなヤツ相手に
低学歴知恵遅れの分際でテキトーなことばっかり書き込んでる
2018/09/10(月) 21:16:56.02ID:XxqHEWUO
ん?これのこと?
> printf() に a の内容である 0 を渡している
2018/09/10(月) 21:19:04.26ID:6SoA/END
こんなにでかい釣り針だと
鯨が釣れるかも
893デフォルトの名無しさん
垢版 |
2018/09/10(月) 21:19:36.92ID:XzQQxj6r
>>883 ← ムクな初心者
>>885 ← 低学歴知恵遅れ ID:WGo2tHWR 「そうそう。そういうこと。」 ← コレのコトだ

低学歴知恵遅れはレスもおえないの?
2018/09/10(月) 21:21:51.21ID:XxqHEWUO
あれ?
int *a;
int b=0;
a=&b;
printf("%p",a);
って別に正しくね?
895デフォルトの名無しさん
垢版 |
2018/09/10(月) 21:22:53.59ID:XzQQxj6r
https://ideone.com/bsjclG

この処理結果みても分からないなら
オツムに相当な問題がある
2018/09/10(月) 21:25:52.44ID:XxqHEWUO
ううむ、俺にはaは64ビット環境だと64ビット長に見えるのだが違うのか?
897デフォルトの名無しさん
垢版 |
2018/09/10(月) 21:27:36.20ID:XzQQxj6r
で、処理結果みた?
で、処理結果みた?
で、処理結果みた?
2018/09/10(月) 21:29:43.88ID:XxqHEWUO
おたくのサンプルは64ビットアドレスをintにキャストしちゃてるやん。そりゃ実行結果違うわ。
899デフォルトの名無しさん
垢版 |
2018/09/10(月) 21:31:35.87ID:XzQQxj6r
https://ideone.com/PGwK6j
キャストはずしたったぞ
当然、結果はかわらない

やっぱりなこの板は低学歴知恵遅れしかいない
この程度のこともわからずにいきってレスしてるワケだからな
2018/09/10(月) 21:31:51.59ID:6MAzJtEj
たまたま 足りない分 0 を引っ張ってきてるけど(レジスタで渡ったから?)
スタックに積んでるリターンアドレスの一部から足りないのを補ってると、もっとわけわかな数値に
未定儀の挙動を推測すすのもまたオツなもの か
2018/09/10(月) 21:32:51.39ID:XxqHEWUO
いやいや、883のaはポインタなんだってw
なんでintに入れちゃうのw
902デフォルトの名無しさん
垢版 |
2018/09/10(月) 21:33:36.29ID:XzQQxj6r
そんなことオレのしったことじゃないからな

 >>883 ← ムクな初心者
 >>885 ← 低学歴知恵遅れ ID:WGo2tHWR 「そうそう。そういうこと。」 ← コレのコトだ

低学歴知恵遅れはレスもおえないの?
2018/09/10(月) 21:40:38.56ID:lZ/O7dtJ
半角クンていつも周りを見ずに自分の思い込みだけでレスしちゃって誤り訂正できないから、恥ずかしい(*/□\*)

直進しかできない目隠しされたイノシシみたい
904デフォルトの名無しさん
垢版 |
2018/09/10(月) 21:42:09.42ID:XzQQxj6r
なにが間違いなわけ
指摘してみ

一切間違ったこと書いてないからな
低学歴知恵遅れはそもそも認知能力に問題がある
2018/09/10(月) 21:47:36.63ID:XxqHEWUO
なぜ64ビットポインタをintに入れたの?
883ではそんなこと一切してないんだけど。

逆に
>printf() に a の内容である 0 を渡している
は整数リテラルがintなのに%pで受けてるので、64ビット環境なら4バイト分スタックのゴミを拾ってきそうだけど。
906デフォルトの名無しさん
垢版 |
2018/09/10(月) 21:48:46.40ID:XzQQxj6r
はずかしくなって
こっち側にこようとしても
もう手遅れだからな
2018/09/10(月) 21:50:57.43ID:XxqHEWUO
なんだ、結局はaがポインタだってことを見逃しただけかよw
2018/09/10(月) 21:55:18.07ID:cYYSBBs1
>>906
つ鏡
909デフォルトの名無しさん
垢版 |
2018/09/11(火) 00:11:24.08ID:X6CualfE
>>887
>>883はちゃんと動くよ。
2018/09/11(火) 06:35:01.60ID:pvBPsgEg
>>909
半角野郎が数行のプログラムも理解できないくせに自分で改竄したコードが動かねぇって騒いでただけ。
半角野郎こそ低学歴知恵遅れクルクルパーで認知能力とオツムに相当な問題があるってことが証明されただけなので気にするな。
本人は顔真っ赤にして逃げたみたいだけど。
2018/09/11(火) 07:57:47.34ID:2zsIBj+S
ポインタを受け取るべき%p変換指定子に、ポインタでない値を与えることの
危険性は >>882 ですでに指摘されてるのに、後乗りで書いた >>887
こんだけ引っ張れるのは、ある意味で才能かもな。

汚い言葉遣いを我慢しながら拝聴するほど啓蒙的な内容でもないし。
2018/09/11(火) 08:11:06.15ID:NBDkJ3+C
>>911
半角クンのレスは、5%の真実と15%の間違い・思い込みと80%の繰り言・罵詈雑言でできてるからね。まっとうに読む価値はない。
2018/09/11(火) 09:54:24.68ID:oX9GyHv1
まれにいいこと言う
850とか
2018/09/11(火) 10:00:02.68ID:R1B4IsqD
釣り針が大きすぎて、クジラじゃないと釣れない
2018/09/11(火) 11:44:57.89ID:zLtJmO+E
musl-libcのiconvコマンドの本体ってここを見ればいいよね?
https://git.musl-libc.org/cgit/musl/tree/src/locale/iconv.c
916デフォルトの名無しさん
垢版 |
2018/09/11(火) 20:05:08.62ID:YMBQMGAL
処理系って何?
cpuかコンパイラの事かなと思ってるんだけど。
間違ってる?
2018/09/11(火) 20:29:34.46ID:5X7KAgIC
処理系は、翻訳環境と、実行環境に大別される
翻訳環境とはコンパイラ等開発ツールを実行する環境
実行環境とはコンパイル結果のバイナリが稼働する環境、客先と言ってもよい
918デフォルトの名無しさん
垢版 |
2018/09/11(火) 20:36:50.64ID:YMBQMGAL
>>917
バイナリが稼働する環境はcpuってことかな
どうもお世話になりました
2018/09/11(火) 20:45:37.73ID:5X7KAgIC
cpuだけじゃないメモリが実装されているアドレス
i/oが実装されているアドレス
osの挙動
など様々な要因が絡む
2018/09/11(火) 21:01:49.97ID:LZbcaZ/B
CPUが同じであっても、
Windowsでは動かせてもmacOSでは動かないとか
同じWindowsでも、64bit環境では動いても32bit環境だと動かないとか
2018/09/11(火) 21:12:52.13ID:ShO/owiX
半角くん、いたの?
lynx で見てるから何言ってるかわからない。
2018/09/11(火) 21:17:38.28ID:pVzZZpUQ
ゴミPC早く捨てろ
2018/09/11(火) 21:28:47.48ID:zLtJmO+E
処理系ってC99に関してはJISで定義されてたよね。
2018/09/13(木) 21:21:47.72ID:1sKEH3Wo
昔の教科書には
C言語の原稿
↓プリプロセッサ
マクロ・ヘッダファイルが展開された原稿
↓翻訳機
アセンブリ言語の原稿
↓アセンブラ
機械語
↓リンカ
実行可能ファイル

っていう図がよく描かれてて,今でもWebを検索するとよく見掛けるんだけど,ほんとに今現在のコンパイラってこういうことやってんの?
gccやclangって,もはやC言語の原稿からほぼほぼ直接に実行可能ファイルを生成してるんじゃない?
さすがにプリプロセッサくらいはあるかもしれんが。
2018/09/13(木) 21:32:27.37ID:CY4XgXEU
-vつけて起動してみ。
プリプロcppはcc1に統合された。
gccだと、cc1とかasとかcollect2とかが動いてるはず。
clangはデフォルトだとasなしかも。
2018/09/13(木) 21:54:33.53ID:1sKEH3Wo
>>925
あざす
やっぱり減ってはいるんだな。
結構ああいう図を見掛けるんで,なんか(ほんとにこんな段階踏んでんのか?)ってモヤモヤしてた。
素人考えだが,あんな風に幾つも重ねてビルドしてたら最適化しにくい気がするし。
2018/09/13(木) 22:33:23.35ID:brIJUf4C
処理としてはわかれてるよそりゃ
2018/09/13(木) 23:18:13.03ID:1sKEH3Wo
え そうなん
と思って空のファイルをgcc -vで処理したら
たしかにある程度進んでリンカの段階で エラーになったわ。
929デフォルトの名無しさん
垢版 |
2018/09/13(木) 23:28:49.69ID:yqnwLH2V
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)
(-続く-)
930デフォルトの名無しさん
垢版 |
2018/09/13(木) 23:29:23.47ID:yqnwLH2V
(-続き-)
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
探索リストの終わりです。
(-続く-)
931デフォルトの名無しさん
垢版 |
2018/09/13(木) 23:30:05.16ID:yqnwLH2V
(-続き-)
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
(-続く-)
932デフォルトの名無しさん
垢版 |
2018/09/13(木) 23:30:29.37ID:yqnwLH2V
(-続き-)
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 を使用
(-続く-)
933デフォルトの名無しさん
垢版 |
2018/09/13(木) 23:31:04.04ID:yqnwLH2V
(-続き-)
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リンク
934デフォルトの名無しさん
垢版 |
2018/09/13(木) 23:34:54.24ID:yqnwLH2V
普通に別々のモジュールで独立して処理されてる

@プリプロセス /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
2018/09/14(金) 00:17:52.55ID:lqNqtREE
>>934
/usr/bib/gccはちげーだろ
936デフォルトの名無しさん
垢版 |
2018/09/14(金) 00:51:20.40ID:q3l06dS7
>>934
コンパイルは
/usr/lib/x86_64-linux-gnu/6/cc1
だな。俺の場合
937デフォルトの名無しさん
垢版 |
2018/09/14(金) 00:58:32.39ID:fXySkelb
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
(-続く-)
938デフォルトの名無しさん
垢版 |
2018/09/14(金) 00:59:43.97ID:fXySkelb
(-続き-)
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'

エラーなし
939デフォルトの名無しさん
垢版 |
2018/09/14(金) 01:02:16.51ID:fXySkelb
プリプロセス前
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;
}
2018/09/14(金) 04:27:04.26ID:q3l06dS7
pcc(1)とかで試すとわかりやすいとおもう。
2018/09/14(金) 05:58:00.88ID:3Ef1q6jY
コンパイラが(プリプロセス済みの)ソースを処理する際、
直接にはアセンブリのソースに持っていかず、いったん中間言語に変換。
その中間言語の段階でも最適化を行ってから
アセンブリに変換してアセンブル・リンク。
……みたいな手順になってると聞いたことがある。
中間言語段階の中間ファイルを出力させることができるか知らんけど。

プリプロセッサ、コンパイラ、アセンブラ、リンカよりも
内部的な手順はむしろ増えてるのかも。
2018/09/14(金) 07:13:28.65ID:RUHHwTRx
>>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
943デフォルトの名無しさん
垢版 |
2018/09/14(金) 08:36:29.54ID:SYmkUqRw
JITとなんの関係が?
944デフォルトの名無しさん
垢版 |
2018/09/14(金) 08:49:57.91ID:q3l06dS7
>>941

>>924 の図に倣うなら

C言語の原稿
↓プリプロセッサ
マクロ・ヘッダファイルが展開された原稿
↓翻訳機1
中間言語(最適化済み)
↓翻訳機2
アセンブリ言語の原稿
↓アセンブラ
機械語
↓リンカ
実行可能ファイル

みたいなかんじかね。
945デフォルトの名無しさん
垢版 |
2018/09/14(金) 09:12:54.86ID:d02sSTx1
昔 LSIゲームってあったでしょ
ああいうゲームをCで書いてパソコンで遊びたいんだけど
技術的な情報が不足してんだ 特に画面を動かす方法
そういうのどこで手に入るか分かる人いる? 教えてくださいヽ(^o^)丿
2018/09/14(金) 09:49:18.88ID:1qfFvEAu
cursesライブラリを使う
947デフォルトの名無しさん
垢版 |
2018/09/14(金) 10:39:42.96ID:i1kWv4b4
CでGUIまでやりたいということか?
うーん・・・
2018/09/14(金) 12:08:50.95ID:9XnUq3uB
>>945
エスケープシーケンスで検索

とりあえず NetHack みたいので遊んでみたら
2018/09/14(金) 12:34:30.19ID:3Ef1q6jY
>>945 の言うLSIゲームってのが、
ドットマトリクスの汎用液晶パネルを使ったゲームじゃなくて、
ゲーム&ウォッチみたいな専用にデザインされた液晶のゲームだと
ちょいと変わってくるかもな。

大筋は同じだけど、少数のデカキャラ表示を点けたり消したり。
2018/09/14(金) 12:48:17.13ID:9XnUq3uB
イメージ伝えるためにLSIゲームと言うならドットマトリックスというよりゲームウォッチ式じゃないかな。
ただその趣旨は、簡易な操作と表示のゲームなんじゃないかと。
キャラクタ端末ゲームを知ればそっちに倒れるんじゃないかな?
2018/09/14(金) 12:53:46.05ID:/Lpq1ndz
>>945
画面表示はglut
2018/09/14(金) 13:39:29.18ID:GvbetZ+k
ゲームウォッチみたいなのってビットマップじゃないけど、表示する情報量どんくらいなんだろうね?
64bitくらい?
2018/09/14(金) 13:53:35.51ID:q3l06dS7
エスケープシーケンスの話が出たついでに質問なんだけど
コマンド名: エラーレベル: エラーメッセージ
↑こういう形式のエラーで、エラーレベルが赤や黄に色付けされてる場合があるんだけども
これってなにかライブラリがあるのかな。それとも各種アプリケーションが自力でやってんのかな。
2018/09/14(金) 14:03:35.51ID:xLMWwHO5
LSI-Cと聞いて飛んできました
懐かしい・・・
955デフォルトの名無しさん
垢版 |
2018/09/14(金) 15:19:32.14ID:d02sSTx1
>>949

そうそう ああいう感じでやれないかなと思ってる
別に3Dとかじゃないし そんなに高度な技術情報が必要とも思えないんだけどな
APIを勉強すればある程度分かるかな?
2018/09/14(金) 15:37:28.55ID:GvbetZ+k
色付けはほぼ自前なんじゃないかねえ。単に制御文字挟むたけだからね。

端末にお絵かきするならローグでも使った伝統あるcursesで。
2018/09/15(土) 10:21:05.36ID:iTkubaya
>>955
ttp://www.orchid.co.jp/computer/cgame/index.html
2018/09/15(土) 10:24:40.59ID:RjcPqpvv
>>952
ttps://www.nintendo.co.jp/n10/interview/game_and_watch/vol1/index2.html
>というのも、ゲーム&ウオッチで採用したチップは、電卓で使われているのと同じものだったんです。
>そもそも電卓のディスプレイのひとつの数字は7セグメントで表示されるようになっていまして・・・。
(略)
>72セグメントの表示が可能だったそのチップを使って『ボール』をつくったんです。
2018/09/15(土) 12:30:45.82ID:WJY+K2bP
>>958
面白いな
しかしゲームウォッチって、液晶上の配線の都合もあって配置がぐちゃぐちゃになってそうだから、ビットのON/OFFだけとは言え面倒そうだな
2018/09/15(土) 12:52:26.12ID:rgCMOp4r
コンピュータというほど抽象化もされてないんだろうね。
コントローラではあるけども。
2018/09/15(土) 12:53:38.17ID:iTkubaya
配線の都合で配置がぐちゃぐちゃ?
2018/09/15(土) 13:31:29.74ID:OUVvcRON
ゲームウオッチは知らんけど配線パターンの都合でビット配置が変則的になるとかはあるよ
2018/09/15(土) 18:43:35.47ID:8KftQgLD
蒸し返すようだが近代的な処理系でも,ビルドの各作業は分担して実行してると思っていいのね。

プリプロセッサで展開→中間言語に翻訳→アセンブリ言語に翻訳→機械語にアセンブラ→リンク
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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