GCCについて part3
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNGあまり勢いはないが地味に逝こう。
GNU本家のGCCページ
http://gcc.gnu.org/
前スレ
・GCCについて part2
http://pc2.2ch.net/test/read.cgi/tech/1046179115/
・GCCについて(過去ログ倉庫)
http://pc2.2ch.net/tech/kako/1007/10077/1007731543.html
関連スレ
・cygwin + mingwn + gcc 相談室
http://pc2.2ch.net/test/read.cgi/tech/1058134693/
・gcjって使ってる人います?
http://pc2.2ch.net/test/read.cgi/tech/1046627795/
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005982
NGNG0006nokai
NGNG君たちのような頭の悪すぎる人たちはここへ来なさい
0007デフォルトの名無しさん
NGNGhttp://gcc.gnu.org/bugzilla/show_bug.cgi?id=12435
これって、「バグ」ですよね?
だってせっかく型にアラインメント指定したのに、
配列に入れたらインスタンスのアライメントが保証されないとか困るっしょ。
その型のポインタ受け取る関数に配列の要素渡してあぼーんとか泣くっしょ。
0008デフォルトの名無しさん
NGNG先頭要素だけアラインメント指定を遵守して、ポインタ演算はアラインメント指定を
無視してくれてる模様。
0010デフォルトの名無しさん
NGNGttp://japan.linux.com/desktop/03/12/29/1419225.shtml
3.4以降から採用の新しいC++パーサとPCHの話題が載ってる。
0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1072883528/
海外でよく使われていうる掲示板スクリプト
専用のオフラインリーダー作って下さい。
必要な条件はID、PASSを管理できること、
OpenJaneみたいな三面型の見た目。
簡単にローカライズできるように言語ファイルを採用
0013デフォルトの名無しさん
NGNGgcc-3.3.1なのですが、ソースをコンパイルするとき-I./includeを付けると、
ソース中でインクルードしているpthread.hの内部で未定義エラーが
でます。実際に-I./includeが必要であってもなくても、付けるだけでエラーが
出ます。もちろん、付けなければコンパイルは通ります。
エラーの原因はデフォルトの検索パスが無視されているため起こるようなの
ですが、これを回避する方法はないでしょうか。
#問題の簡略化のため、このディレクトリは使用しないでいますが、本当は
#必要なヘッダファイルがあるので使いたいのです。
$ gcc test.c -I./include -c
In file included from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.1/include/pthread.h:664,
from test.c:6:
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.1/include/bits/sigthread.h:41: error: 構文解析エラー before '*' token
0014デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1071613279/
0015デフォルトの名無しさん
NGNGincludeのディレクトリがbinの中にあるの?
0016デフォルトの名無しさん
NGNG> エラーの原因はデフォルトの検索パスが無視されているため
../include にシステム標準のヘッダファイルと重複する名前のファイルが
置いてないか? あるいはファイル名は違っても、インクルードガードが
一致しているとか。
001713
NGNGちなみに、TL8WSなので、元からあるgcc-2.96でも同じ現象が出ます。
>>16 レスサンクス。重複するファイルはありません。
ただ気付いたことといえば、crypt()なんかを使う場合、__USE_XOPENとか
unistd.hをインクルードする直前にdefineしなければ、undefされてしまう
ような、面倒くさい事象があるのには気付きました。(-Wallとか-Wシリーズ
のオプションを幾つも付けた場合に警告されるので分かる)
元々はこっちにポストしてました。
http://pc2.2ch.net/test/read.cgi/tech/1072212403/658-659
0018デフォルトの名無しさん
NGNGとりあえず gcc -v して結果貼り付け。
0020デフォルトの名無しさん
NGNGちゃうちゃう。
% gcc test.c -I./include -c -v
ここまでつけて。そうすると include パスとかずらずら出てくるはずだから。
002113
NGNGあー失礼しました。テストしたいのですが出先からのアクセスですので
レスは長く後になります。(TT
ヒントをありがとうございます。チェックしてみます。
0022デフォルトの名無しさん
NGNGレス先間違えまくっているあたり注意力に問題がありそうだけど。
0023デフォルトの名無しさん
NGNGstruct {
char c;
achar a;
} b;
printf("sizeof(achar):%u\n",sizeof(achar));
printf("&b: %p\n", &b);
printf("&b.a: %p\n", &b.a);
__aligned__は指定された型/変数が割り付けられるときに、
その先頭のalignmentを指定するだけ。
achar自体はあくまでもchar。
じゃなきゃ通常のchar*を受け取る関数が全く使えなくなる。
00247
NGNG現状での挙動は分かってます。
でも、現状の挙動では>>7で書いたような問題が防げません。
aligned指定でsizeofも変わりうる挙動をしていれば、>>7の問題も、解決しますし、
配列の先頭だけにalignmentを指定したければ、配列に対して指定すればよい話です。
ですが、alignedの挙動を変更すると、char*にachar*を渡しているような
現状動いているコードが壊れてしまいます。
sizeofも変わりうるaligned指定を別名で作り、
sizeofが変わってしまった場合はポインタが互換しないようにする、
というのは、どうでしょうか?
ちなみに、bugzilla の id=12435 は Andrew Pinski によって 12/28 に
「バグじゃない」ってことで終了されてしまっています。
0025デフォルトの名無しさん
NGNG> aligned指定でsizeofも変わりうる挙動をしていれば、>>7の問題も、解決しますし、
> 配列の先頭だけにalignmentを指定したければ、配列に対して指定すればよい話です。
本当に、それで他の部分に影響でないの?
個人的には配列にたたき込みたいなら構造体にして、padding 自分で詰めれば良いと思うが。
00267
NGNG> 本当に、それで他の部分に影響でないの?
「それ」とは、
「aligned指定でsizeofも変わりうる挙動」をすることですか?
「配列の先頭だけにalignmentを指定したければ、配列に対して指定」することですか?
> 個人的には配列にたたき込みたいなら構造体にして、padding 自分で詰めれば良いと思うが。
アラインメントを指定したいときに、aligned属性があるのなら、
それを使って行うのが自然だと思います。
正しくpaddingを詰めるためには、必要な情報もどうにかしてひねり出さないといけないですし、
構造体にしてしまって、意味薄いフィールド名を考えるのも使うのも面倒です。
0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNG> 「それ」とは、
どっちでも良いけど。
アライメントの問題を解決したが、他の部分で既存のコードが動かなくなるような致命的な
問題が出たら意味ないわけで。現状の gcc の設計と矛盾しないなら、パッチ作って送れば
対応してくれると思うぞ。
0030ヽ(´ー`)ノ
NGNG納得できないのなら ML や Pinski 氏に質問してみたら?それか >>29 が言うように
パッチ書いてみるかだな。
00317
NGNG今あるalignedの挙動を変えてしまうと不味いのはわかったのですが、
アライメント指定に伴ってsizeofも変わること自体が「相当不味い」のでしょうか?
挙動が変わるので、新しい別の属性キーワードを作る必要があるとおもいます。
そしてその属性をつけた型および値を指すポインタは
オリジナルの型と互換しない(int*とchar*の関係になる)ようにする必要がありそうです。
この方針で問題なければ、パッチを書いてみよう
・・・かなぁ、と思います。
ほかにも不味いところが残っていれば指摘して欲しいです。
0032デフォルトの名無しさん
NGNGまずすぎるというか、
それじゃ結局別の型を作るだけだろ?
>>25のいうようにalignof使って構造体作れ。
0033デフォルトの名無しさん
NGNG00347
NGNG> それじゃ結局別の型を作るだけだろ?
そうです。いま欲しがってる属性を xxx_aligned とすると、
typedef int more_aligned_int __attribute__ ((xxx_aligned (8)));
この宣言でmore_aligned_int型の値はすべて8バイト境界に割り当てられます。
void f( more_aligned_int* p );
この宣言で、f()は8バイトアラインが保証されている整数型へのポインタを受け取ります。
無理なキャストをはさまない限り、
この関数に不正なアライメントの値を渡すコードはコンパイルできなくなります。
現状のalignedの挙動では、上記のような宣言をしても、
f()の定義側で引数pが正しくアラインされていることを期待できません。
今回の件を知らなければ、こんな関数を作って不可解なバグに悩まされていたかもしれません。
ドキュメントに"force the compiler to insure (as far as it can) that ..."とあったので、
やっぱりバグではなく、こういう仕様のようです。
パッチ書くより、「この"as far as it can"をもっと具体的に書いとけ」と突っ込むのが良いように思います。
0035デフォルトの名無しさん
NGNG0036デフォルトの名無しさん
NGNGtypedef は型に「別名」をつけるだけで、型を作成するものじゃないが。typedef したものが
別の型ってことになると、C/C++ の従来の typedef と意味が違ってしまうから、影響でか
すぎだと思うぞ。
矛盾しない形で gcc のソースコード改修できるのなら、パッチを作る事は止めないが。
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNGtypedef int const cint;
typedef int volatile vint;
typedef int iarray[2];
こんなのと同じ感じじゃないの?
0039デフォルトの名無しさん
NGNGp++はどんなうごきすんねん
00407
NGNG(more_aligned_int*)((char*)p + sizeof(more_aligned_int))
得られたポインタはmore_aligned_intのアラインメント要求を満たす。
sizeof(more_aligned_int)は、sizeof(int)以上で最小の8の倍数になる。
more_aligned_int*からint*への変換はエラーにしないといけない。
0041デフォルトの名無しさん
NGNG構造体&paddingでなぜ不満? 却下である!
0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNG> パッチ書くより、「この"as far as it can"をもっと具体的に書いとけ」と突っ込むのが良いように思います。
だったら今すぐそうすればいいだろが、誰も止めないぞ。
オープンソースである以上、必要だと思った人間が手を動かす。
今までもこれからもそうやって成り立っていくんだよ。
文句は言わないけど自分は手を動かさないってんじゃ話にならんわ。
独り言なら日記にでも書きたまえ。
0044デフォルトの名無しさん
NGNG迷惑だから。
0045デフォルトの名無しさん
NGNG> 今回の件を知らなければ、こんな関数を作って不可解なバグに悩まされていたかもしれません。
それはGCCのせいじゃなくて、そんなおかしな設計したお前に責任がある。
0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNGその仕様はくつがえらないし、もちろんバグではない。
問題視して欲しければ、GCCの仕様のままで通常使用したときに、致命的な
問題が発生することを示すか、他の仕様と論理的不整合が存在することを
示す必要がある。
それができなければ、ローカルパッチを作って、思う存分使えばいい。
0048デフォルトの名無しさん
NGNGGCCにPL/Iのフロントエンドをつけてる人が。
……今更使う人いるのかなぁ
0049デフォルトの名無しさん
NGNG大昔バイトで使って以来書く事もなかたので。
0050デフォルトの名無しさん
NGNGFortranもいい。 なんていうか、そそるものがあるんだよ
0051デフォルトの名無しさん
NGNG魅力が全然分からん。
小一時間愛を語ってはくれんかね?
0052デフォルトの名無しさん
NGNG0053デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNG使い手にナイスミドルのおじさまが多い。
0055デフォルトの名無しさん
NGNGgoto みいにどこにでも飛べるわけじゃなく、ループから抜けると言う意図がはっきり伝わる。(=読みやすい)
C/C++ にも欲しいよ。
0056デフォルトの名無しさん
NGNG005755
NGNGでも、「ラベル名を工夫すれば」と言う労力がかかるし、それができない奴もたくさんいるから。
(今見たら、>>55 日本語変だな。goto みいに → goto みたいに)
0058デフォルトの名無しさん
NGNGL1,L2,・・・・,Lnとつけている俺のことか?
0059デフォルトの名無しさん
NGNGアセンブラかよ !!
0060デフォルトの名無しさん
NGNGそんなあなたにPerl
だいたい>>52程度でPL/Iへの愛を騙(ry
0061デフォルトの名無しさん
NGNGbreak でも、それなりの名前つけないとダメだろう。
0062デフォルトの名無しさん
NGNGポインタ使えば?
0063デフォルトの名無しさん
NGNG名前指定ループ多段ブレイク があれば何でもいいわけじゃないぞ。
>>61
どんな名前でも、「ループを抜ける」と言う意図は伝わるぞ。
どんなループなのかわからんと言うのはまた別の話だし。
>>62
ハァ ?
具体的に書いてみてくれ。
0064デフォルトの名無しさん
NGNG邪悪な提案を1つ。
#define break_loop goto
0065デフォルトの名無しさん
NGNG>more_aligned_int*からint*への変換はエラーにしないといけない。
C的には Warning で。
一時変数(ただの配列だけど)に aligned アトリビュート効かなくて
面倒な思いをした事は何度かあるけど、
>(more_aligned_int*)((char*)p + sizeof(more_aligned_int))
>得られたポインタはmore_aligned_intのアラインメント要求を満たす。
>sizeof(more_aligned_int)は、sizeof(int)以上で最小の8の倍数になる。
それなら当然一時変数も対応?ちょっとしたパッチじゃ済まんよ。
0066デフォルトの名無しさん
NGNG今日どうしたんだろう…
0067デフォルトの名無しさん
NGNG行き先ラベルの定義はどうやるんだ ?
C/C++ のマクロはここら辺が作りにくい。
昔さわった汎用機の PL/I のマクロは、substr() なんかの文字列操作は当たり前、FOR, WHILE 等の制御構文に加えて手続き/関数定義までできた。
ほとんどフルセットのインタープリタだったよ。
(使い出すと面白くて病みつきになるけど、はっきり言って や ・ り ・ す ・ ぎ。)
0068デフォルトの名無しさん
NGNGC++はtemplateやらinlineやらというマクロ構文のおかげでわりとましになったが、
もともとの育ちの悪さからくる使い勝手の悪さはついて回る。
cppとtemplateとかが連携していないから、デバッグ版のnew/deleteを作ろうと
すると行番号などを渡すのが難しかったりとかするし。
まあそこまでは望まないにしても、どうしてm4くらいにしなかったのかねえ。
条件分岐とか任意個の引数それぞれについて展開文を生成するくらいはやって欲しいと
時々思う。
0069デフォルトの名無しさん
NGNG> まあそこまでは望まないにしても、どうしてm4くらいにしなかったのかねえ。
そりゃあ UNIX V6 書いた時代に m4 なかったからだよ。
0070デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNGweb crawl していて発見。
gcc のフロントエンド書いてる人なんているのかしらん。
0072デフォルトの名無しさん
NGNGWide Stadio
0073デフォルトの名無しさん
NGNGGNU VHDLがGCCのフロントエンドとして書かれていたと思った.フランスの教育機関の中の人.
0074デフォルトの名無しさん
NGNG$ cvs -d :ext:[email protected]:/cvsroot/gcc co -P gcc
ってしてみたんですが、
> savannah.gnu.org:接続がタイムアウトしました
rsh.exe: can't establish connection
cvs [checkout aborted]: end of file from server (consult above messages if any)
と表示されて取ってこれませんでした。
ここ2日ほど試してるんですけど、同じメッセージが出ます。
何が悪いんでしょうか?
0075デフォルトの名無しさん
NGNGhttp://savannah.gnu.org/ 見るポ。
0076デフォルトの名無しさん
NGNGありがとうございます。
$ CVS_RSH='ssh' cvs -d :ext:[email protected]:/cvsroot/gcc co -P gcc
これでいけました。
0077デフォルトの名無しさん
NGNGbugzillaに情報があるかどうか調べるにはどうしたらいいのでしょうか?
0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNG先にプロトタイプ宣言が無いことを警告するものです。
呼び出し側でエラーになるのとは別です。
0080デフォルトの名無しさん
NGNGRedHatやSuSEが金出して雇ってるのかな。
0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNGGCCの開発者の多くはRedHatだよな。
ああいう会社は大事にしないといけない。
オプソ注はガキだから、独占商売してる!
とかうるさいけど。だったらお前がGCC作れ、と。
0083デフォルトの名無しさん
NGNGどっちも金出してる。
勤め人が片手間でこなせる作業量じゃないし。
>>82
Cygnusから流れただけやん。
金にならんからクビって事がないことを願おう。
0084デフォルトの名無しさん
NGNGでもRedHat Linuxやってる連中と旧Cygnusの連中の間には溝がある
ような気がしないでもない。何年か前、リリース版じゃないgcc 2.96を
RHに載せて出荷しちまったとかでgccチームが抗議文出してたしな。
0085デフォルトの名無しさん
NGNG$ makeinfo -Igcc/doc -Igcc/doc/include --html -ogcc/doc/HTML/internal gcc/doc/gccint.texi
としてみました。
でも以下のようなメッセージが表示されて、index.htmlが生成されません。
GCC/gcc/doc/HTML/internal/index.html: TOC should be here, but it was not found
GCC/gcc/doc/HTML/internal/index.html: TOC should be here, but it was not found
makeinfo: Removing output file `GCC/gcc/doc/HTML/internal/index.html' due to errors; use --force to preserve.
texiのことは良く分からないですが、テキストエディタでgccint.texiのなかを覗いてみたところ、
メニューっぽいものは書いてあるようです。
index.htmlをきちんと(--force使わずに)生成するには、どうしたらいいんでしょうか?
0086デフォルトの名無しさん
NGNGgcc-3.3.2/gcc/docディレクトリに移動して、
$ makeinfo -Iinclude --html gccint.texi
だけで問題無くできたけど、ちなみに
makeinfo (GNU texinfo) 4.6です。
0087デフォルトの名無しさん
NGNGレスありがとうございます。
こちらの環境はcygwinで、makeinfoのバージョンは(GNU texinfo) 4.2でした。
バージョンの古さが原因の問題なのかもしれません。
で、望むものはgccのサイトに置いてあるのに気付いたので、
そちらを使わせてもらうことで解決しました。
0088デフォルトの名無しさん
NGNG0089デフォルトの名無しさん
NGNG作るような話はあるんでしょうか?3.5以降になるのかもしれませんが。
0090デフォルトの名無しさん
NGNGどうしたらいい?
0091デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNGなんですかそれは?
0094デフォルトの名無しさん
NGNGg++ -MM $(SRCS) >> Makefile.tmp
mv -f Makefile.tmp Makefile
0095ヽ(´ー`)ノ
NGNGMakefile.dep: $(SRCS)
g++ -MM $(SRCS) > Makefile.dep
# dependencies
.include Makefile.dep
構文これであってたっけ?(;´Д`)>
最近は専ら automake/autoconf だから自分で Makefile 書かなくなったな。
0096デフォルトの名無しさん
NGNG> Makefile.dep: $(SRCS)
> g++ -MM $(SRCS) > Makefile.dep
追記じゃなければ -MMF Makefile.dep でもいい。
> .include Makefile.dep
BSD make?
たしかBSD makeは.dependってのを自動的にincludeしてくれると聞いたような
気がするので、こうするとGNU makeとBSD makeでは共通にできる。
# Makefile
.depend: $(SRCS)
g++ -MMF $@ $(SRCS)
# GNUmakefile
include Makefile
include .depend
0097ヽ(´ー`)ノ
NGNG10ヘー(・∀・)⊇
> BSD make?
あぁ、先頭に . がいるのは BSD make だったか。
間違えますた、スマソ。
0098デフォルトの名無しさん
NGNGここなんかどよ。(gcc -Mの項)
0099
NGNGgcc -laaa main.o /usr/lib/libbbb.a →リンク成功
/usr/lib/ には libaaa.a も libbbb.a もあるし、
libaaa.a は正常にリンクされているのに。
なぜでしょうか?
0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNG0102デフォルトの名無しさん
NGNGいじょ
0103デフォルトの名無しさん
NGNG0104デフォルトの名無しさん
NGNGg++拡張でtypedef templateが付いたら教えてねん。
0105デフォルトの名無しさん
NGNG体感できるほどPCHで劇的に変わるんでしょうか。
0106デフォルトの名無しさん
NGNG3.4は普通に使えるから、自分で試してレポートよろしこ
FTP://ftp.iij.ad.jp/pub/gcc/snapshots/3.4-20040218/gcc-3.4-20040218.tar.bz2
0107デフォルトの名無しさん
NGNG>>103
そもそもリリースのアナウンスって流れたっけ ?
ftp mirror に行きわたるのを待ってると言ったっきりのような.
0109デフォルトの名無しさん
NGNG> そもそもリリースのアナウンスって流れたっけ ?
まだだけど。でも ttp://gcc.gnu.org/releases.html では
とっくに出たことになってるんだよなぁ・・・。
ftp.gnu.org にないから気づかなかったけど、ミラーによってはもうあるぽ。
# 普通ミラーに行き渡るのに一週間もかからないよなぁ・・・。
0110105
NGNGgcc version 3.4.0 20040218 (prerelease)
なg++です。比較の対象にしたのは、3.3.1です。
結果としては、コンパイルの速度はあまり変わらなかったけど、
吐かれたバイナリの実行速度が結構速くなってました。
ってこれじゃPCHと関係ないですよね。
俺がやり方間違えたかな…参考にならないレポートですんません。
0111デフォルトの名無しさん
NGNG設定ファイルとか、オプションとか必要ないん?
0112デフォルトの名無しさん
NGNG0113デフォルトの名無しさん
NGNG0114デフォルトの名無しさん
NGNG最適化が上がったけどコンパイル時間が増えなかった。
と考えると効果あり?
0115デフォルトの名無しさん
NGNG0116デフォルトの名無しさん
NGNGサブディレクトリを$(SRCS)に含んでいるとうまくいかないのですが何か方法ありますか?
SRCS := ${SRCS} misc.cpp
SRCS := ${SRCS} foo.cpp
SRCS := ${SRCS} subdir/window.cpp
てな状態の時の出力が
misc.cpp: misc.h
foo.cpp: foo.h
window.cpp: subdir/window.h # subdir/window.cpp : subdir/window.h になって欲しいのに!!
のようになってしまうのでつ。
0117デフォルトの名無しさん
NGNG-oオプションで指定しない限り,コンパイルしたオブジェクトファイルは
カレントディレクトリに作られるので
window.o: subdir/window.cpp subdir.window.h
となって当然だと思う。
infoを見ると、-MT target というオプションをつけると変更できるようなので、
どうしてもというなら、${SRCS}についてループを回せばできるんじゃないかな。
0118116
NGNG>生成ルールのターゲットになるのは *.cppじゃなくて *.o だろ?
いっけね、うっかりしてましたです。
>infoを見ると、-MT target というオプションをつけると変更できるようなので、
>どうしてもというなら、${SRCS}についてループを回せばできるんじゃないかな。
-MT はうまくいきましたです。ありがとうございます。
ループを回すっていうのは↓みたいな感じでしょうか?GNUのmake専用になっちゃうんすかね?
もう少し賢いやり方あったら教えてもらえると嬉しいです。
depend:
$(RM) Makefile.dep
$(foreach src, $(SRCS), g++ -MM -MT $(src:.cpp=.o) $(src) >> Makefile.dep;)
0119デフォルトの名無しさん
NGNGfor s in $(SRCS); do g++ -MM -MT `echo $$s | sed 's/\.cpp$$/.o/'` $$s; done > Makefile.dep
でいいんじゃないの? (非GNU make依存)
0120デフォルトの名無しさん
NGNG0121デフォルトの名無しさん
NGNGgcc/ssa-*をさっそく調べないと。
0122デフォルトの名無しさん
NGNGVCの
#pragma comment (lib, "***.lib")
に相当するものはGCCにあるのでしょうか?
0123デフォルトの名無しさん
NGNG試したのがしばらく前なので、状況変わってるかも知れんが。俺が試したとき
には、ヘッダファイルを事前にコンパイルしておく必要があった。
% gcc foo.h
これで #include "foo.h" しているファイルをコンパイルすると、勝手に
プリコンパイル済みヘッダが使われた。
あと VC の stdafx.h のように「よく使うヘッダファイルを全部 #include する
だけのヘッダ」を用意して、そいつをプリコンパイルしておくと良いみたい。
多数のヘッダを個別にプリコンパイルしても、あまり速くならなかったよ。
0124デフォルトの名無しさん
NGNG速くならなかった。
Cで巨大ファイルインクルードしてないと意味ないんじゃないか?
またはC++で巨大汎用テンプレートをインクルードするけどほとんど
インスタンス化しない場合とか。
致命的なのはmakeファイル作り替えないといけない点。
0125デフォルトの名無しさん
NGNGつまり boost::* 用ってことでFA?
0126デフォルトの名無しさん
NGNG英語は全っ然読んでないんだけど、
http://gcc.gnu.org/projects/tree-ssa/#ssa
から察するに「もう一段かませてもっと最適化」って事? 何が新しいの?
0127デフォルトの名無しさん
NGNG部分冗長性の検出とか定数伝搬がより賢くなる可能性があるんでしょ。
言語に依存しないレベルで、かつ、RTLや生成コードよりもう少し抽象度の高いところで。
0128デフォルトの名無しさん
NGNG俺も知りたい
便利なんだよな
0129デフォルトの名無しさん
NGNG>XXXX.c:77: `setjmp' undeclared (first use in this function)
>XXXX.c:77: (Each undeclared identifier is reported only once
>XXXX.c:77: for each function it appears in.)
で、結局
setjmp.h
>#definesetjmp(x)_setjmp(x)
これが原因かよ
おいおい関数マクロたのむよ
mingwだけど。
0130デフォルトの名無しさん
NGNG#include <setjmp.h> 忘れただけだろ ?
0131デフォルトの名無しさん
NGNGちーがーうー
setjmpが関数マクロだったから、
setjmpの名前だけ書くと未定義エラーになるわけ。
関数マクロは後ろの括弧が必須なの。
mingwのinclude/setjmp.h見りゃわかる。
0132デフォルトの名無しさん
NGNG0133デフォルトの名無しさん
NGNG#ifdef __GNUC___
add_func(_setjmp);
add_func(_longjmp);
#else //その他
add_func(setjmp);
add_func(longjmp);
#endif
みたいにした。
んで、これには続きがあって、よく見たら対になるlongjmpは
関数マクロじゃない。
これに気づかずになんでだろーなんでだろーと
延々コンパイルを繰り返したさ。
#ifdef __GNUC___
add_func(_setjmp);
add_func(longjmp);
#else //その他
add_func(setjmp);
add_func(longjmp);
#endif
結局これが正解。
馬鹿野郎。
0134132
NGNGアホなのは129だけに決定
http://www.bohyoh.com/CandCPP/C/Library/setjmp.html
0135デフォルトの名無しさん
NGNGスクリプト言語の実装で必要なんだよアホ
0136デフォルトの名無しさん
NGNGはあ?どこに「マクロ」なんて書いてあるんだよアホ!
0137デフォルトの名無しさん
NGNG>setjmpマクロ
アホはおれだけかよ!
悪かったな>>132
0138デフォルトの名無しさん
NGNGというと相当広範囲な最適化が望めるって事ですね。そりゃ、スバラシイ。
(でも処理系専門外な自分は多分その素晴らしさの一割も理解できてない…)
0139デフォルトの名無しさん
NGNGざけんな!>mingw
0141デフォルトの名無しさん
NGNG俺も知らなかった…K&RにもC99にもそう書いてあるわ。
あとマクロと決まってるのはva_*くらい?
std{in,out,err}が「マクロ」なのは、glibcのhackで有名、かな。
# Linuxな人は今すぐ grep stdin /usr/include/stdio.h
0142デフォルトの名無しさん
NGNGほとんど全てのregisterを保存しないといけないわけだから。
関数で実装するとstackのrewindして(から)保存しないといけないからね。
C99でもgetcなんかもマクロなんじゃないの?
0143132
NGNGva_argは型名を受けるから関数として実装するのは不可能だもんな。
0144デフォルトの名無しさん
NGNGそんなことないよ
mingwはmsvcrt.dll借用してるよ
0145デフォルトの名無しさん
NGNGWindowsは1CPU, 1プラットフォームでしょ。
0146デフォルトの名無しさん
NGNG145のことだが。
0147デフォルトの名無しさん
NGNGgetc・putc共に、C99でも「マクロ『かも』しれない」です。
これはC89から変わってないですよね。
# C99持ってない方、C99相当のJISがPDFで手に入ります。
# ttp://www.jisc.go.jp/ →JIS検索→JIS X3010 でどうぞ。
0148デフォルトの名無しさん
NGNG別に関数で普通に実装できますがなにか ?
例えば、FreeBSD 4.8R/i386 + GCC 2.95 は関数で実装されてるよ。
0149デフォルトの名無しさん
NGNG手元のi386なglibc-2.2.4でも、cygwinで使ってるnewlib-1.12.0でも、
setjmp()は関数です。もちろんソースは「.S」。
# マクロじゃなきゃ規格非準拠だ! って怒られたら、
# glibcのstdinみたく「Make them happy.」にすればいいって事なんだろう
0150デフォルトの名無しさん
NGNG#include <stdio.h>
/* #define GLOBAL */
#ifdef GLOBAL
const int DragonKiller=15000,AngelRobe=3000,DragonShield=3500;
struct _item{ char *name; int price;
}ItemList[]={
{"ドラゴンキラー", DragonKiller},
{"天使のローブ", AngelRobe},
{"ドラゴンシールド",DragonShield},
};
#endif
int main(void)
{
#ifndef GLOBAL
const int DragonKiller=15000,AngelRobe=3000,DragonShield=3500;
struct _item{ char *name; int price;
}ItemList[]={
{"ドラゴンキラー", DragonKiller},
{"天使のローブ", AngelRobe},
{"ドラゴンシールド",DragonShield},
};
#endif
return 0;
}
GCC 3.3.1 で、GLOBAL無効だとOKなんだけど、
GLOBAL有効だとコンパイルエラーになるんだ。なんで?
0151デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNG0153デフォルトの名無しさん
NGNGローカル変数は初期化時点で決まっている値ならOK。
0154デフォルトの名無しさん
NGNG0155デフォルトの名無しさん
NGNGそんなケースが前あった。
0156150
NGNG例えば ボーランドのbcc32とかだとローカルだろうがグローバルだろーが
"不正な初期化"となるのです
0157デフォルトの名無しさん
NGNGボーランドのはC99に準拠してなんでしょ。
http://gcc.gnu.org/onlinedocs/gcc-3.3.3/gcc/Initializers.html#Initializers
0158デフォルトの名無しさん
NGNG0159150
NGNG0160105
NGNG110で一度レポートしたのですが、冷静に色々やってみるとPCHが有効になっていなかったみたいです。
GCC(3.4.0 20040218 (prerelease))は/usr/local/以下にインストールしました。
自分がコンパイルを試したソースでは
#include <iostream>
#include <string>
...
などとなっていたので、/usr/local/include/c++/3.4.0の中で
g++ -x c++-header -c iostream
g++ -x c++-header -c string
...
とやって*.gchを作りました。その後でコンパイルをしたのですが、
g++ -H (...) 2>usedheaders
とやっても、usedheadersの中に*.gchが出てきません。infoが正しければ、「...!」と出てくるはずなんですが…。
何が足りないんでしょうか。
0161デフォルトの名無しさん
NGNGlibfoo.so や libfoo.a があったとして、その中から特定のシンボルだけ
削除したい場合ってどうすればいいですか?ソースはありません。
0162デフォルトの名無しさん
NGNGやり方は知らないけど、なんでそんなことするの?
0163デフォルトの名無しさん
NGNGツールってある?
0164デフォルトの名無しさん
NGNGreadelfのことか?
http://itpro.nikkeibp.co.jp/linux/faq/200205-3.shtml
0165デフォルトの名無しさん
NGNG.aはar使えばいいじゃん。ar知らずにどうやって.a作ったのさ。
.soは知らん。
0166デフォルトの名無しさん
NGNGobjdump -xじゃ不満かい?
0167デフォルトの名無しさん
NGNGどのディレクトリにあるのでしょうか?
0168デフォルトの名無しさん
NGNGそれは普通言語処理系じゃなくてOSが持つ。
0169167
NGNG説明不足ですみません。
Cのprintf, scanfなどのANSI標準ライブラリ関数のソースのことです。
gccのソースコードから抜き出したいと考えてたのですが…
0170デフォルトの名無しさん
NGNGglibcの中にあるの。
0171167
NGNGCの勉強をしていて、あるライブラリ関数がどのように実装されているのか
興味があって、探し求めていたんです。
どうもありがとうございました。
0172デフォルトの名無しさん
NGNG0173デフォルトの名無しさん
NGNGどのバージョンでコンパイルしたか埋め込める#define とか 関数ってあるの?
int main(){
printf("thist complile by%s",#GCC_COMPILE_VERSION);
}
という風にしたいんだけど
0174デフォルトの名無しさん
NGNG__GNUC__ と __GNUC_MINOR__ で何とかならないか。
0175デフォルトの名無しさん
NGNG(メジャー)バージョン番号がその値になっていることが多い。
gccなら
__GNUC__ と __GNUC_MINOR__ (それぞれ整数)。
__VERSION__ もある (こちらは文字列)。
0177デフォルトの名無しさん
NGNG0178デフォルトの名無しさん
NGNGgcc -vも覚えれ
0179デフォルトの名無しさん
NGNG0180デフォルトの名無しさん
NGNGinfoはだめか?
info以上の情報があるなら俺も知りたい。
0181デフォルトの名無しさん
NGNG2chってこんなに低レベルだったの?
# って嘆いてみるテスト
0182デフォルトの名無しさん
NGNG0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNGといってもこんな所でクダ巻いてる奴なんて小学校の頃から触ってるか
低レベルすぎる質問は無料コンパイラとして初心者の入門用にと
宣伝されてるから仕方ないと思われ
0185デフォルトの名無しさん
NGNG0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNG0188デフォルトの名無しさん
NGNG./configure --prefix=/usr/local
make bootstrap
make install
確かこんな感じ。インストール先ディレクトリは./configureに--prefixオプションで指定する。
0189デフォルトの名無しさん
NGNG0190187
NGNG分からないんです。
参考になるページか何か知っていませんか?
自分でも調べたけどわかんなくて、、、、
0191デフォルトの名無しさん
NGNG'初心者'は免罪符でもなんでもない
とりあえずOS環境を書けよ
まあ答えは出てるけどさ
0192デフォルトの名無しさん
NGNG本家:http://gcc.gnu.org/
インストール:http://gcc.gnu.org/install/
翻訳:http://www.excite.co.jp/world/url/body/?trans_type=enja-ATL&body=http://gcc.gnu.org/install/
0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNGすいません。
今度から気をつけます。
>>192
ありがとうございます。
>>193
釣りではありません。
0195デフォルトの名無しさん
NGNGMinGWを使おう
http://pc2.2ch.net/test/read.cgi/tech/1042611308/
0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNG段階的にすすめてみてはどうだろう。
0198デフォルトの名無しさん
NGNGgccってどうやって使うんですか?
0199デフォルトの名無しさん
NGNGキャノンってどうやって使うんですか?
0200デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNG奇数・偶数の区別はない。
0205デフォルトの名無しさん
NGNGじゃあ3.3以上ならいいの?
0206デフォルトの名無しさん
NGNG了解。
>>205
そういうジンクスがあるってだけで、
実際その通りってわけじゃないよ。
0207デフォルトの名無しさん
NGNG最初バグかと思った。void *じゃないと警告が出るのね。
0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNG>void *じゃないと警告が出るのね。
理由は何?
0210デフォルトの名無しさん
NGNGなんだろう?
可変個引数ゆえにtype *がvoid *に変換されずにそのまま渡されるからかな?
そこまで文句をつけるかー!?って思うけど(だからこそpedanticなのかな)
3.3.2や3.3.3では出るけど、2.95.3では出ないね。
0211デフォルトの名無しさん
NGNG| 8
| p The argument shall be a pointer to void. The value of the pointer is
| converted to a sequence of printing characters, in an implementation-defined
| manner.
と、void へのポインタって書いてあって、かつ、
>可変個引数ゆえにtype *がvoid *に変換されずにそのまま渡されるからかな?
かと思われ。
0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNG0214ヽ(´ー`)ノ ◆.ogCuANUcE
NGNGだなぁ。みんな、-Wall だけなの?
0215デフォルトの名無しさん
NGNGMitchellタソ、ブチ切れぎみですが・・・
GCCの開発は、いろいろ踏まえなくてはならないことが
多すぎてなかなか大変だとは思いますががんがってください。
応援しております。
0216デフォルトの名無しさん
NGNG向こうで言ったれよ
0217デフォルトの名無しさん
NGNG0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNG0220デフォルトの名無しさん
NGNG単発質問から始まったGCC(GNU Compiler Collection)について語るスレ。
あまり勢いはないが地味に逝こう。
GNU本家のGCCページ
http://gcc.gnu.org/
前スレ
・GCCについて part2
http://pc5.2ch.net/test/read.cgi/tech/1046179115/
・GCCについて(過去ログ倉庫)
http://pc5.2ch.net/tech/kako/1007/10077/1007731543.html
関連スレ
・cygwin + mingwn + gcc 相談室
http://pc5.2ch.net/test/read.cgi/tech/1058134693/
・gcjって使ってる人います?
http://pc5.2ch.net/test/read.cgi/tech/1046627795/
0221デフォルトの名無しさん
NGNG祝・GCC 3.0リリース
http://pc3.2ch.net/test/read.cgi/unix/992942337/
0222デフォルトの名無しさん
NGNGくそー、俺の二時間を返せ。
0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNG自分でビルドすればいいじゃん。
0225デフォルトの名無しさん
NGNGハァ?
0226デフォルトの名無しさん
NGNGhttp://gcc.gnu.org/gcc-3.4/index.html
使えてるよ。
0228デフォルトの名無しさん
NGNGcpp-precompってやつ。
0229デフォルトの名無しさん
NGNGコンパイルするときにどのようなオプションをつければいいんですか?
0230デフォルトの名無しさん
NGNG0231デフォルトの名無しさん
NGNG0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNGtest.cc:1: sorry, unimplemented: had to relocate PCH
というメッセージが出ました。ホントに実装されてないんですか?
それとも私が何かおかしなことをしているんでしょうか。
実行した手順は以下のとおりです。
1.インストール
ftp.dti.ad.jp から
gcc-core-3.4.0-20040416.tar.gz と gcc-g++-3.4.0-20040416.tar.gz
をコピー
3つのディレクトリ /srcdir /builddir /usr/local/xp
を作成して上記2つの .tar.gz ファイルを/srcdirに展開
cd /builddir
/srcdir/gcc-3.4.0-20040416/configure --prefix=/usr/local/xp --enable-language=c++
make bootstrap
make install
/usr/local/xp/bin にパスを通す
2.使ってみる
/usr/local/xp/bin/g++ test.hh
/usr/local/xp/bin/g++ test.cc
---- test.hhの中身 ----
#include <iostream>
---- test.ccの中身 ----
#include "test.hh"
int main() { std::cout << "hoge" << std::endl; return 0; }
0235デフォルトの名無しさん
NGNGftp;//ftp.gnu.org/gnu/gcc/gcc-3.4.0/
0236デフォルトの名無しさん
NGNGChangeLog
ttp://gcc.gnu.org/gcc-3.4/changes.html
0237236
NGNG変更点一覧だ。
0238デフォルトの名無しさん
NGNG出てないけど、前もそうだったし、まぁいいかな、と。
0239デフォルトの名無しさん
NGNG0240デフォルトの名無しさん
NGNGしでも3.3.3よりC++のコンパイルが速くなった気がするなぁ。パーザを書き変
えた効果がこんな所にも出てるのかな。
0241デフォルトの名無しさん
NGNG> Versions of GNU Emacs up to (and including) 21.3 will not work correctly when using this optimization;
> you can use -fno-zero-initialized-in-bss to disable it.
うれしいな〜
0242デフォルトの名無しさん
NGNGある程度ミラーされるまでアナウンスしない方針だったような。
今週中には出ると思うが。
0243デフォルトの名無しさん
NGNG2行目以降も引用して「うれしいな〜」と言っているところを見ると…アンチEmacs? (w
0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNG0246234
NGNGcygwin未対応なのかな
0247デフォルトの名無しさん
NGNGUnix上でC#使ってみたいんだけど・・・
0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNGそれ以前にウチのCygwinでコンパイル通んないんすけど・・・。
0251デフォルトの名無しさん
NGNGそうなの?
0252デフォルトの名無しさん
NGNG* The C, C++, and Objective-C compilers can now handle source files
written in any character encoding supported by the host C library. The
default input character set is taken from the current locale, and may be
overridden with the -finput-charset command line option. In the future
we will add support for inline encoding markers.
MinGWのランタイムとかCygwinって日本語ロケールはサポートしてるのかな?
0253デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNG0255デフォルトの名無しさん
NGNGとりあえず cygwin について。
ttp://www.okisoft.co.jp/esc/cygwin-5.html#5.3
とりあえずだめぽ?
0256Richard Stallman
NGNGJune 2-4th, 2004, Ottawa Congress Centre, Ottawa, Canada
ttp://www.gccsummit.org/2004/
みんな逝くのだ!
0257デフォルトの名無しさん
NGNGチョトだけ遠いな
0258デフォルトの名無しさん
NGNG0259デフォルトの名無しさん
NGNG0260デフォルトの名無しさん
NGNGttp://gcc.gnu.org/gcc-3.4/c99status.html
0261デフォルトの名無しさん
NGNG0262デフォルトの名無しさん
NGNG0263デフォルトの名無しさん
NGNG0264デフォルトの名無しさん
NGNGISO以外の形式はコンパイルできないのですか?
0265デフォルトの名無しさん
NGNGISO以外の形式とはなんだ。
誰かの脳内にある俺様C++をGCCの中の人がわかるわけないだろ。
0266デフォルトの名無しさん
NGNG例えば
cout << "文章" << x << "文章2" << endl;
(xは変数)
でコンパイルすると「stray '\33' in program」「文字の終端を欠いています」
と出てコンパイルできません。
cout << "文章" << x;
cout << "文章2" << endl;
とするとうまくいくのですが
0267デフォルトの名無しさん
NGNG#include <iostream>
using namespace std;
int main() { int x = 10; cout << "文章" << x << "文章2" << endl; }
% g++ foo.cc
% ./a.out
文章10文章2
うまくいくけど?
0268デフォルトの名無しさん
NGNGSJISか?
0269デフォルトの名無しさん
NGNG文字コードの問題だったようです。
エディタを変えたら無事コンパイルできました。
0270いやーん
NGNG> cout << "文章" << x << "文章2" << endl;
> (xは変数)
これがISO C++に適合したプログラム断片じゃないと思ったわけだ…
0271GCCer
NGNG-fpreprocessed
0272デフォルトの名無しさん
NGNG全ては方法的懐疑に基づく訳ですな
0273デフォルトの名無しさん
NGNG0274デフォルトの名無しさん
NGNGgcc -###
0275デフォルトの名無しさん
NGNG0276デフォルトの名無しさん
NGNG内部で\がすべて2バイトコードに変換されてしまいます。
libiconvのsjis->utf-8がよろしくないようで
0277デフォルトの名無しさん
NGNGどこに書けばいいのかわからないので,ここに書かせてください.
(もし,適切な場所があれば誘導をお願いします.)
MacOSXのg++(3.1 20020420)で(gccではなく)isnanを使いたいのですが,うまくいきません.
#include <cmath>
int main () {double d (NAN); std::isnan (d); return 0;}
なるコードをg++ test.cppすると,
`isnan' undeclared in namespace `std'
とエラーがでてしまいます.
stdを取っても同じエラーが出ます.
ヘッダをチラッと読んでみると,__isnanみたいな関数が途中あったので,
こちらを呼ぶと,とりあえずはビルドできるんですが,
これは正常な使い方とは思えません.
どうやって使ったらよいものかご存知の方いらっしゃいますでしょうか?
0278デフォルトの名無しさん
NGNG解決方法ではないんだが、
ISO/IEC 9899:1999 (C99規格) の§7.12.3.4 によると、isnanはマクロとなっているね。だからとりあえずstd::は不要だ。
0279デフォルトの名無しさん
NGNG長らくバックスラッシュを \ で代用していたことの弊害が本格的に出てきたヨカーン。
スレ違いだけど、本質的な解決策ないよね。gcc 的にはアドホックな解決でいいんだろうけど。
0280277
NGNG> 解決方法ではないんだが、
> ISO/IEC 9899:1999 (C99規格) の§7.12.3.4 によると、isnanはマクロとなっているね。だからとりあえずstd::は不要だ。
レスありがとうございます.
std::取っちゃうと,
`isnan' undeclared (first use this function)
とのエラーがでちゃうんですよ.
ちなみにgccで(#include math.h>して)は,コンパイルは正常に行えます.
(ただし,別件になりますが,リンカで,
ld: Undefined symbols:
___gxx_personality_v0
のように出てしまいます.-lmはしてみたんですけど,
こちらは何をリンクすればいいんでしょうか?)
0281デフォルトの名無しさん
NGNG0282ヽ(´ー`)ノ ◆.ogCuANUcE
NGNG#include <cmath>
int main () {double d (NAN); isnan (d); return 0;}
0284277
NGNGtest1.cpp: In function `int main()':
test1.cpp:2: `isnan' undeclared (first use this function)
test1.cpp:2: (Each undeclared identifier is reported only once for each
function it appears in.)
0285デフォルトの名無しさん
NGNGそれってエディタが全角に変換してない。
0286デフォルトの名無しさん
NGNGgcc3.3.1はうまくいった
$ g++ test.cpp
$
0288デフォルトの名無しさん
NGNGんな話じゃない。Shift-JISはISO646IRVではなくてJIS X 0201(のLeftHalf)を仮定してるって話だよ。
ゲラゲラ
0289デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNG>それってエディタが全角に変換してない。
iconvのソース(shift_jisx0213.h)より
/* Plain ISO646-JP character. */
if (c == 0x5c)
*pwc = (ucs4_t) 0x00a5;
else if (c == 0x7e)
*pwc = (ucs4_t) 0x203e;
else
*pwc = (ucs4_t) c;
>>288
euc-jpだと\(0x5c)を元に戻してくれるみたい。なぜ?
0293デフォルトの名無しさん
NGNG$ gcc isnan.cpp -o isnan
isnan.cpp: In function `int main()':
isnan.cpp:2: error: `isnan' undeclared (first use this function)
isnan.cpp:2: error: (Each undeclared identifier is reported only once for each
function it appears in.)
$ gcc -v
Reading specs from /usr/libexec/gcc/darwin/ppc/3.3/specs
Thread model: posix
gcc version 3.3 20030304 (Apple Computer, Inc. build 1495)
0294デフォルトの名無しさん
NGNG> euc-jpだと\(0x5c)を元に戻してくれるみたい。なぜ?
EUC-JPは、規格上は0x5cがバックスラッシュ(ISO646IRV)なんだよ。実際にどう表示されるかは
実装の問題で。
0296デフォルトの名無しさん
NGNG0297デフォルトの名無しさん
NGNG288に書いてあるままなんだがな・・・・
問題は、
>gcc -finput-charset=sjis -fexec-charset=sjis testsjis.c -o testsjis
>内部で\がすべて2バイトコードに変換されてしまいます。
>libiconvのsjis->utf-8がよろしくないようで
これがlibiconvのバグでもなんでもなくて、Shift-JISというエンコーディングの
仕様に従った動作だという点だな。
279もそう言っている。
0298デフォルトの名無しさん
NGNGShift_JIS の 0x5c は \ なんだけど、C / C++ のソース中ではバックスラッシュと同じ働きをするという
日本ローカルな慣例が i18n と馴染まないということが問題なのでは(←ローカルだから当然か・・・)?
0299デフォルトの名無しさん
NGNG0300デフォルトの名無しさん
NGNG> 要するに'¥'と'\'が同居できないって事?
EUC-JP, Shift-JIS, ISO-2022-JPで日本語を書く限りは同居できない。
直接UTF-8で書けば同居できる。
0301ヽ(´ー`)ノ ◆.ogCuANUcE
NGNGこれか?
http://www.vallis.org/blogspace/osxtricks
> There is a bug in /usr/include/gcc/darwin/3.1/g++-v3/cmath that will
> undo the definition of isnan. To fix it, comment out the line #undef isnan.
> Update: in Panther, the file to change is /usr/include/gcc/darwin/3.3/c++/cmath.
他人が使うモノだと書き換えるわけにいかんだろうから、mymath.hpp でも作って
そっちで isnan() マクロを定義する必要がありそうだね。
0302デフォルトの名無しさん
NGNG>直接UTF-8で書けば同居できる。
問題は解決しました。
0303デフォルトの名無しさん
NGNGウム。
0304デフォルトの名無しさん
NGNGコンバージョンをしないなら問題ないはずだが。
0305デフォルトの名無しさん
NGNG0306デフォルトの名無しさん
NGNG毛唐はなんでもUTF-8に正規化したがるものさ。
0307デフォルトの名無しさん
NGNG日本では歴史的に EUC と SJIS 間での変換の際 0x00〜0x7f はそのままに
してきたし、UTF への変換でもそうなったところで誰も困らないのに、
GNU libiconv では規格バカが譲歩してくれない。
sjis ではなく cp932 を使えばとりあえず回避できるけどね。
0308デフォルトの名無しさん
NGNGhttp://www.perldoc.com/perl5.8.0/lib/Encode/JP.html#BUGS
こんな感じで不要な変換を行わないことになってる。
0309277
NGNG> http://www.vallis.org/blogspace/osxtricks
> > There is a bug in /usr/include/gcc/darwin/3.1/g++-v3/cmath that will
> > undo the definition of isnan. To fix it, comment out the line #undef isnan.
> > Update: in Panther, the file to change is /usr/include/gcc/darwin/3.3/c++/cmath.
ああ,これっすね.
> 他人が使うモノだと書き換えるわけにいかんだろうから、mymath.hpp でも作って
> そっちで isnan() マクロを定義する必要がありそうだね。
/usr/include/architecture/ppc/math.hから,
#define isnan( x ) ( ( sizeof ( x ) == sizeof(double) ) ? \
__isnand ( x ) : \
( sizeof ( x ) == sizeof( float) ) ? \
__isnanf ( x ) : \
__isnan ( x ) )
これ使うことにします.
0310デフォルトの名無しさん
NGNG"sjis->utf-8"の場合のlibiconvの処理を変更して(゚д゚)ウマー
ではだめ?
0311デフォルトの名無しさん
NGNGいやしかし gcc 的にはどうであれ、世間的には圧倒的に \ は円記号として使われてるわけで・・・
UTF-8 にしたらバックスラッシュで表示されますた、ではまずいような。
0312デフォルトの名無しさん
NGNG0313デフォルトの名無しさん
NGNG\オレニクレ
0314デフォルトの名無しさん
NGNGmain() { printf("表示??/n"); }
% gcc -trigraphs -finput-charset=sjis -fexec-charset=sjis sjis.c
% ./a.out
表示
0315デフォルトの名無しさん
NGNGmain() { printf("表示??/n"); }
% gcc -trigraphs -finput-charset=sjis -fexec-charset=sjis sjis.c
% ./a.out
表示
0316デフォルトの名無しさん
NGNGバックスラッシュ: \
0317デフォルトの名無しさん
NGNG0319デフォルトの名無しさん
NGNG> GNU libiconv では規格バカが譲歩してくれない。
>>311
> いやしかし gcc 的にはどうであれ、
> 世間的には圧倒的に \ は円記号として使われてるわけで・・・
そうではないぞ。>>288>>294>>297の言う通り。
これだけじゃ理解できない人は、
http://euc.jp/i18n/ucsnote.ja.htmlの
"6. ASCIIとJIS X 0201ローマ文字"を読むといい。
プログラムを書いている時でさえ、
YEN SIGN → REVERSE SOLIDUSと固定的に変換するとまずいのだ。(嗚呼神様)
ある時はYEN SIGN, ある時はREVERSE SOLIDUS。
それがShift_JISの0x5cの今までの使われ方。
規格ではYEN SIGNなのに。
納得のいかない話であるがこれが真実。
杓子定規に行くと>>314が正解。(ぐすん)
0320デフォルトの名無しさん
NGNGそれはUnicode.orgのmappingを利用しているからだと思います。
ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT
http://www.asahi-net.or.jp/~ez3k-msym/charsets/jis2ucs.htm
iconvがこのmappingを固定的に使ってくれると、使い分けられていいですね。
本来>>319に書いたようにYEN SIGNのままでいて欲しいところもあるわけですが…
0321デフォルトの名無しさん
NGNG規格は規格として、現実的には
Windows: CP932 の 0x00〜0x7f を u+0000〜u+007f にマップ
Java: CP932 だけでなく Shift_JIS も 0x00〜0x7f を u+0000〜u+007f にマップ
Perl: Shift_JIS の 0x00〜0x7f を u+0000〜u+007f にマップ
と、ASCII のように変換する動作がデファクトスタンダードになっている。
http://mail.nl.linux.org/linux-utf8/2002-05/msg00076.html
からのスレも参照。
0322デフォルトの名無しさん
NGNGパス等として使われる場合には ASCII のバックスラッシュと同じ」って扱いにしてるんだよね。
C / C++ その他昔ながらの応用ではみんなそうか。
今後どうなるべきなの?
UTF-8 対応のエディタ使って、0x5C はバックスラッシュで入力(表示もバックスラッシュ)、
円マークはえーとコード分からないけど Unicode の円マークで入力(表示も円マーク)となるべき?
素直に EUC 使って\は2バイトで書くほうがいいような気が・・・
0323デフォルトの名無しさん
NGNGっていうか文字コード関連のスレのほうがよいと思われ。
【UTF8】文字コード変換【SJIS】
http://pc5.2ch.net/test/read.cgi/tech/1063177450/l50
0324デフォルトの名無しさん
NGNG234のソースを使用
3.3.1
$ time g++ test.cc
real 0m8.416s
user 0m1.211s
sys 0m1.201s
3.4.0
$ time /usr/local/xp/bin/g++ test.hh
real 0m2.160s
user 0m1.702s
sys 0m0.470s
$ time /usr/local/xp/bin/g++ test.cc
real 0m1.593s
user 0m1.011s
sys 0m0.560s
0325デフォルトの名無しさん
NGNGpch(・∀・)イイ!!
0326デフォルトの名無しさん
NGNGうーむ、やはり速くなってるな
0328デフォルトの名無しさん
NGNGcygwinではggc-common.cの中のmmapでoffset指定があるところが問題
ggc-common.cの中では
#undef HAVE_MMAP_FILE
する。
なぜか、mmapが使えなくてもいい様にコーディングしてあるのに
その中の処理が全くないので処理を追加する。
追加する場所はhooks.cの中の
hook_void_void ここで適当な大きさのメモリを確保 実行時に2回呼ばれるので注意
hook_voidp_size_t_null 確保したメモリのアドレスを返す
hook_bool_voidp_size_t_false 確保したメモリのアドレスと同じかと大きさを確認する。
ggc-common.cのneeds_readの判定後の処理がおかしいので
if (needs_read)
{
if (fseek (f, mmi.offset, SEEK_SET) != 0
/*|| fread (&mmi, mmi.size, 1, f) != 1*/)
fatal_error ("can't read PCH file: %m");
fread(addr,mmi.size,1,f);
}
上のように書き換える。
以上
0330234
NGNGhooks.cは>>331のようにしてみましたが
g++: 内部エラー: Segmentation fault (プログラム cc1plus)
完全なバグレポートを送ってください。
と言われてしまいました。
ひたすら fprintf() をはさんで調べたところ、
どうやら ggc-page.c の clear_marks() の内側のループの
size_t num_objects = OBJECTS_IN_PAGE(p);
でこけているようです。
どこが間違っているんでしょうか?
0331234
NGNG#define BUFFSIZE_FOR_PCH_ON_CYGWIN (1<<24)
void
hook_void_void (void)
{
if (buffer_used_for_PCH_on_cygwin == NULL)
buffer_used_for_PCH_on_cygwin = xmalloc(sizeof(BUFFSIZE_FOR_PCH_ON_CYGWIN));
}
void *
hook_voidp_size_t_null (size_t a ATTRIBUTE_UNUSED)
{
return buffer_used_for_PCH_on_cygwin;
}
bool
hook_bool_voidp_size_t_false (void * a ATTRIBUTE_UNUSED, size_t b ATTRIBUTE_UNUSED)
{
if (buffer_used_for_PCH_on_cygwin != a && a != NULL) {
fprintf(stderr, "OTL\nbuf: %p\na: %p\n", buffer_used_for_PCH_on_cygwin, a);
exit(1);
}
if (BUFFSIZE_FOR_PCH_ON_CYGWIN <= b) {
fprintf(stderr, "orz\nb: %d\n", b);
exit(1);
}
return true;
}
#undef BUFFSIZE_FOR_PCH_ON_CYGWIN
0332デフォルトの名無しさん
NGNGggc-common.cで
#undef HAVE_MMAP_FILE
を入れてる場所がよくないような?
includeがすべて終わった後にundefしてみて
0333234
NGNGそうしてるんですけどダメです。#undefする場所をいろいろ試してみたんですが、
#include "config.h"
#include "system.h"
...
#include "hosthooks.h"
// ******** ここに入れたり ********
#ifdef HAVE_SYS_RESOURCE_H
# include <sys/resource.h>
#endif
// ******** ここに入れたり ********
#ifdef HAVE_MMAP_FILE
# include <sys/mman.h>
# ifdef HAVE_MINCORE
/* This is on Solaris. */
# include <sys/types.h>
# endif
#endif
...
#ifdef ENABLE_VALGRIND_CHECKING
...
#endif
// ******** ここに入れたり ********
やはり状況は変わらずです。只今ほんのり自棄になってconfigureの
#define HAVE_MMAP_FILE 1
を消して configure → make bootstrap 中です。
0334デフォルトの名無しさん
NGNGhooks.cの追加した処理があってることと
#undef HAVE_MMAP_FILE
が有効になっていれば
if (needs_read)
{
if (fseek (f, mmi.offset, SEEK_SET) != 0
/*|| fread (&mmi, mmi.size, 1, f) != 1*/) <−−−コメントするのを忘れるとOUT
fatal_error ("can't read PCH file: %m");
fread(addr,mmi.size,1,f); <−−−ここを通過するはず
}
0336デフォルトの名無しさん
NGNGgccをmakeし直したらヘッダーファイルを再度PCHしないとだめだよ。
hook_void_voidで確保したアドレスが違うとエラーになる可能性がある。
0337デフォルトの名無しさん
NGNGオプションは何ですか?
0339デフォルトの名無しさん
NGNGattributeで可能だったような気がする。info読め。
0340デフォルトの名無しさん
NGNGstruct foo {
chara;
shortb;
intc;
} __attribute__((__packed__))
0341デフォルトの名無しさん
NGNGタンクスでつ
0342デフォルトの名無しさん
NGNG$ /usr/local/xp/bin/g++ -v
Reading specs from /usr/local/xp/lib/gcc/i686-pc-cygwin/3.4.0/specs
Configured with: ../gcc-3.4.0/configure --enable-languages=c,c++ --enable-libgcj
--enable-threads=posix --with-system-zlib --enable-nls --without-included-gette
xt --enable-interpreter --enable-sjlj-exceptions --disable-version-specific-runt
ime-libs --enable-shared --host=i686-pc-cygwin --target=i686-pc-cygwin --prefix=
/usr/local/xp
Thread model: posix
gcc version 3.4.0
0344234
NGNG0345デフォルトの名無しさん
NGNGttp://up.atnifty.com/upload/file/20040430035201_.zip
gccのソースをオリジナルに戻して、やってみて
これで駄目なら、あきらめましょう。
0347234
NGNGできました!
ほぼ丸一日お付き合いいただきありがとうございます。
でもなんで自分でいじったのはダメだったんだろう...
分かり次第報告させていただきます。(ウザイですか?)
0348デフォルトの名無しさん
NGNG0349234
NGNG報告はたぶん明日以降になると思います。
(きっとすごく単純なとこではまってたんだろうなぁ)
0350234
NGNGhook_void_void()の領域を確保するところ↓(>>331 から抜粋)で、
>#define BUFFSIZE_FOR_PCH_ON_CYGWIN (1<<24)
...
>if (buffer_used_for_PCH_on_cygwin == NULL)
> buffer_used_for_PCH_on_cygwin = xmalloc(sizeof(BUFFSIZE_FOR_PCH_ON_CYGWIN));
xmalloc(BUFFSIZE_FOR_PCH_ON_CYGWIN)
としてたつもりが
xmalloc(sizeof(BUFFSIZE_FOR_PCH_ON_CYGWIN)) // ** なぜかsizeof使ってた
としていたために充分な領域が確保されてませんでした。
"malloc()といえばsizeof"っていう癖がついてたんでしょうね、きっと。
激しくアフォでごめんなさい。
0351デフォルトの名無しさん
NGNG0352デフォルトの名無しさん
NGNG噛むと美味しいおつゆがピュッ
0353デフォルトの名無しさん
NGNG0354デフォルトの名無しさん
NGNG0355353
NGNGマニュアル類には-finlineについて記述がないんですが、指定しても
エラーにならんのですよね。
0356デフォルトの名無しさん
NGNG0357デフォルトの名無しさん
NGNGサンスコ!
0358デフォルトの名無しさん
NGNG0359デフォルトの名無しさん
NGNG日本語書くときに促音を省略してしまうキミもね。
0360デフォルトの名無しさん
NGNG日本語を書くときに助詞を省略してしまうキミもね。
0361デフォルトの名無しさん
NGNGそれを言うだけでageてるキミもね。
0362デフォルトの名無しさん
NGNG0363デフォルトの名無しさん
NGNG0364デフォルトの名無しさん
NGNG0365デフォルトの名無しさん
NGNG0366デフォルトの名無しさん
NGNG0367デフォルトの名無しさん
NGNG0368デフォルトの名無しさん
NGNG0369デフォルトの名無しさん
NGNGttp://people.redhat.com/graydon/g++-report/
0370デフォルトの名無しさん
NGNGよくわかんない、詳細希望
0371デフォルトの名無しさん
NGNGttp://gcc.gnu.org/projects/tree-ssa/
0372デフォルトの名無しさん
NGNGありがと、わかったようなわからないような感じです。
0374デフォルトの名無しさん
NGNG0375デフォルトの名無しさん
NGNG0376デフォルトの名無しさん
NGNG0377デフォルトの名無しさん
NGNG0378デフォルトの名無しさん
NGNGhttp://www.is.titech.ac.jp/~sassa/lab/papers-written/02M37130.pdf
とか?(関係あるのかないのかよくわからんのだけどw
0379デフォルトの名無しさん
NGNGreturn f.i_;
だけのコードなら、gcc-3.4 で
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
subl $16, %esp
movl $1, %eax
leave
ret
にはなるね。%esp の操作が無意味だが…
掛け算入ったやつはダメダメ。
0380デフォルトの名無しさん
NGNGサンクスコ
> 掛け算入ったやつはダメダメ。
gcc-3.3以前よりもっと駄目??
0381デフォルトの名無しさん
NGNGソフトだから当然と言えば当然。
でも、それがどの程度、普段書くコードの速度低下をもたらすかだけどね・・・
C++で数値計算やってる俺の場合、
インテルコンパイラが第一。わずかに劣ってgcc。めちゃくちゃ遅いVC7.1
ってところ。iccと同じオプションなのにVCは遅くて仕方がないんだけど
なんか使い方間違ってるんかな?
まぁWinなんてたまにしか使わないからgccだけでいいんだけどね。
0382デフォルトの名無しさん
NGNG自分の目的にあった適切なオプションを選択しろよ!
0383デフォルトの名無しさん
NGNG-ffast-mathつけるとgcc3.0 ≧ VC++6.0
てなことがあった(もちろん最適化ありで)。
VC++6.0の浮動小数点は-ffast-math相当じゃないかと疑っている。
面倒くさいから試してないけど。
0384デフォルトの名無しさん
NGNG自分が試した範囲だと、gcc-3.4.0 だとオプションをどーやっても真面
目に掛け算するコードを吐いてました。
もちろん、一般的に gcc-3.4 のほうが最適化がダメ、ということでは
ないですけどね。gcc-3.3.x で __attribute__((always_inline)) を付
けないと展開されなかった関数オブジェクトが gcc-3.4.0 では指定な
しでも展開してくれるようになって、自分は嬉しい。
0385デフォルトの名無しさん
NGNGデフォルトで最適な状態はありえないと考えればいいのでは。
0386デフォルトの名無しさん
NGNGマジでそう思うのは俺だけ?
0387デフォルトの名無しさん
NGNGIntel も Microsoft もコンパイラは無償配布してますよ?
0389デフォルトの名無しさん
NGNGhttp://www.xlsoft.com/jp/products/intel/prices.html
0390デフォルトの名無しさん
NGNGそこを考慮して、改めて>>391さんどうぞ。
0391デフォルトの名無しさん
NGNG0392デフォルトの名無しさん
NGNGでは改めて>>392さんどうぞ。
0393デフォルトの名無しさん
NGNG↑←
0394デフォルトの名無しさん
NGNG確か。
0395デフォルトの名無しさん
NGNG件の最適化についてはgcc3.4でも改善されていないということでFA?
0396デフォルトの名無しさん
NGNG非商用限定だけどね
0397デフォルトの名無しさん
NGNG0398デフォルトの名無しさん
NGNG0399デフォルトの名無しさん
NGNG0400デフォルトの名無しさん
NGNG> このスレではgccマンセーのようですが、
> 件の最適化についてはgcc3.4でも改善されていないということでFA?
gcc3.4のほうが悪化しているでFA.
0401デフォルトの名無しさん
NGNGコンソール画面からインストーラ起動するとログアウトする。
atermから起動するとaterm自体が落ちるんだけど。そんなことない?
0402デフォルトの名無しさん
NGNG> >>380
> 自分が試した範囲だと、gcc-3.4.0 だとオプションをどーやっても真面
> 目に掛け算するコードを吐いてました。
$ rpm -qa|grep icc
intel-icc7-7.1-6
だと(最新版じゃないが)、mov $5, -4(%ebp) ひとつにコンパイルされました。
VC++と同じく問題なしですね。
0403デフォルトの名無しさん
NGNG2度目の皆様すみません。
nmしたときやg++ -Sしたときに、コンストラクタやデストラクタに
Foo::Foo[in-charge]() のように[なんちゃら]と注釈が入っている場合がありますけど、
これって何ですか?どこかに解説ありませんか?
in-charge, not-in-charge, in-charge deleting などがあるようで...
0404デフォルトの名無しさん
NGNGプリプロセッサだけでも計算できる定数じゃなくて変数をセットしたときの実動作では
ほとんどネグれる程度だったり。そのコンパイラの苦手なソースにたまたま出くわしたという
ことじゃないの?
0405デフォルトの名無しさん
NGNGlibiberty/cp-demangle.c
/* Demangles and emits a <ctor-dtor-name>.
<ctor-dtor-name>
::= C1 # complete object (in-charge) ctor
::= C2 # base object (not-in-charge) ctor
::= C3 # complete object (in-charge) allocating ctor
::= D0 # deleting (in-charge) dtor
::= D1 # complete object (in-charge) dtor
::= D2 # base object (not-in-charge) dtor */
0406デフォルトの名無しさん
NGNGありがとうございます。
なるほど…
0407デフォルトの名無しさん
NGNGクロスコンパイルも視野にいれると、
定数のコンパイル時計算は意外と面倒で、
最適化(定数伝搬&ループ外移動)のことを考えるとあまり効果がない。
昔のgccは結構強引なことをやった時期もあって、
(doubleの交換律による定数まとめなど)
ずいぶんと批判されてましたね。
0408デフォルトの名無しさん
NGNGでもiccには負ける。
CPU設計するときに少なくともCコンパイラは同時に開発するだろうから、
インテルが出すコンパイラが他メーカより遅いのは逆に問題ある罠。
0409デフォルトの名無しさん
NGNG0410デフォルトの名無しさん
NGNG0411デフォルトの名無しさん
NGNG0412デフォルトの名無しさん
NGNGキャッシュヒットとか page fault もあるし、単一スレッドのプログラムでも
裏でクロック割り込みとか I/O まわりの割り込みが発生してるから。
0413デフォルトの名無しさん
NGNGHWで動いてるCPUのクロックをどうやってカウントするんだ?ロジアナもってくりゃできるけどな。
クロック数カウントするのはイン・サーキット・エミュレータじゃなくてボントのシミュレータじゃないと駄目。
むしろgdbの target sim に含まれて無いほうがおかしい。
0414デフォルトの名無しさん
NGNG今時のCPUで外部からクロックカウントは無理。
CPUのモデルごとにプロファイルを持って、
CPUの内部を完全にエミュレートしないと。
こんなやつ
http://www-cs-faculty.stanford.edu/~knuth/mmix.html
http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html
0415デフォルトの名無しさん
NGNGZ80くらい昔のCPUのICEは出来たよ。
0416デフォルトの名無しさん
NGNGあのねメーカから出てるシミュレータ/デバッガでは当然できる機能なんだよ。
できなきゃ組み込みソフトなんて製品にならんぜ。
gdbがやってないのはそれはgdbの都合
0417デフォルトの名無しさん
NGNG当たり前でしょ。gdbの話してんのよ。アフォ?
0418デフォルトの名無しさん
NGNGICE(エミュレータ) っていうのはハードウェアが載ってることは知ってるよね。
それをカウントしようとすると相当手間なのよ。
そんなことしなくても実効命令のクロックを順番に加算していけば算出できるんだよ。
だからシミュレータなら当然できる機能ってこと。
実際俺が使ってるSHやDSP(54X)デバッガにはその機能があるし。
0419デフォルトの名無しさん
NGNGクロック数のカウントの話をしてんのにハードウェアエミュレータの話をするところが間抜けだいってるんだよ
わからんのかね。馬鹿かお前。
0420デフォルトの名無しさん
NGNG> そんなことしなくても実効命令のクロックを順番に加算していけば算出できるんだよ。
そんな時代もあったなぁ…・・・
0421デフォルトの名無しさん
NGNG0422デフォルトの名無しさん
NGNG0423デフォルトの名無しさん
NGNG0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNGそれが評価できない時点でCPUの設計はできんだろうが。
0426デフォルトの名無しさん
NGNG君のCPUの設計はクロックすら不確定性関係が成立してて評価不能なようだな。
0427デフォルトの名無しさん
NGNG評価できない方がおかしい。できないと思ってる奴は手を抜いてる(抜かれてる)ことに
気づかないおめでたい奴。
0428デフォルトの名無しさん
NGNG単一クロックの元で動作してるという仮定の下でクロック数をカウントするってことだな。
0429デフォルトの名無しさん
NGNG> 単一クロックで動作してる場合評価できない方がおかしい
環境による。
プリエンプティブマルチタスク OS だとまず不可能だが、優先度順で実行タイミングを
完全に制御できるリアルタイム OS で、かつキャッシュヒットも完全に制御下における
なら見積もれる。
ただ正確な評価を行うためには CPU の外部仕様ではなく、内部仕様に関する詳細な
知識が必須だから gdb に期待するのはアレだ。
0430デフォルトの名無しさん
NGNGまぁ餅憑け
0431デフォルトの名無しさん
NGNG0432デフォルトの名無しさん
NGNGヲイヲイ。デバッガでOSの仕様を考慮してるものがあれば、教えてくれよ。
0433デフォルトの名無しさん
NGNGOSというのはあくまでオーバーヘッドがないことを前提としてる。というか時間計測するん
じゃなくてクロック数で評価するんだから当然可能なはず初期キャッシュは当然ヒットなしが前提だろ。
0434デフォルトの名無しさん
NGNG結局話についていけなくて笑っているしかございません。
0435デフォルトの名無しさん
NGNG0436デフォルトの名無しさん
NGNGはどういう環境で開発してて、なんで実クロック数のカウントを
とりたいと思ったんだ?
0437デフォルトの名無しさん
NGNG実時間シミュレータ対応でない。
modelsimぐらいの機能は持ってくれるとうれしいんだが、
当然CPUメーカにはデバイス情報も開示して欲しいな。
0438デフォルトの名無しさん
NGNGそれは当然必要だろ?それによって必要なリソースの条件が変わってくる。
例えばあるタスクを10mxで完了したい。そのとき何MHzのクロックを突っ込めば
よいかが設計段階で算出できる。ちなみに消費電流はクロックに対してリニアに
変化する。シビアなモバイル関係のエンジニアならだれもが経験してること。
10mA変われば製品に対する市場評価が変わる。
現状のgdbではその評価ができないってことだな。
0439デフォルトの名無しさん
NGNG0440デフォルトの名無しさん
NGNGCPUの命令数まで確定しているのに設計段階とはこれ如何に。
0441デフォルトの名無しさん
NGNGはぁ?君まともな製品開発したことないね?命令が確定して初めて、突っ込むクロックが決まるんだよ。
ちなみにロジックデバイスの周波数っていうのはMAXが決まってるだけで最低周波数に関しては
かなりの幅があるんだよ。PLLがなければ下限がないものもある。どれだけ低いクロックで済ませ
られるかが設計の腕の見せ所じゃねぇか。
0442デフォルトの名無しさん
NGNG0443デフォルトの名無しさん
NGNGCPUぐらい固定してくれないと話進まないよね。
0444デフォルトの名無しさん
NGNG> そんなことしなくても実効命令のクロックを順番に加算していけば算出できるんだよ。
安いCPUばっかり相手にしているんですね。
0445デフォルトの名無しさん
NGNG(⌒⌒⌒)
||
/ ̄ ̄ ̄ ̄ ̄\
| ・ U |
| |ι |つ
U||  ̄ ̄ ||
 ̄  ̄
もうおこったぞう
0446デフォルトの名無しさん
NGNG> 安いCPUばっかり相手にしているんですね。
それはそれで辛い仕事のような気がする。
0447デフォルトの名無しさん
NGNGなーんも知らんようだが、メモリのアドレスデコーダも外付け、
ユーザが直接触れるのは古典的なx86ベースのPentiumプロセッサを
使って設計することがどれほど面倒か、わかってるか?
ちなみにPentiumを搭載したPC以外の製品がどういう状況にあるか
わかって言ってるんだろうな?->学生ちゃんよ
0448デフォルトの名無しさん
NGNGgdb(じゃなくてもいいけど)に正確にクロック数える機能付けたせるのか?
無理だろ。
できるなら作ってくれよ。頭下げて使わせてもらうから。
0449デフォルトの名無しさん
NGNGだから、環境を先に特定しようよ
x86 で Win32 なのか、z80 で OS どころかモニタもない環境なのかで話がぜんぜん
違うんだからさ。
0450デフォルトの名無しさん
NGNG実クロックシミュレーションに対応してない仕様であるということだけ。
CPUのクロックを"カウントできない"ってこととはまったく意味が違う。
0451デフォルトの名無しさん
NGNG逆にOSのオーバーヘッドを考慮したシミュレータがあるなら教えてくれよ。
0452デフォルトの名無しさん
NGNGそもそも発端の >>414 からして、無条件で「CPUのクロックを"カウントできない」とは
書いてないようだが。
>>414
> CPUのモデルごとにプロファイルを持って、
> CPUの内部を完全にエミュレートしないと。
CPU ベンダ以外がクロックを正確にカウントするのは無理だ、gdb にそれを期待するな
と言ってるだけでしょ?
0453デフォルトの名無しさん
NGNGWin32 みたいな環境で「クロック数」をカウントするのは意味ないからやめとけ、
という話だって。
ラウンドロビンではなく優先度順でスレッドを実行する環境でも、ハードウェア
アーキテクチャによっては意味ないし。俺が最近触ってるのは、メインメモリと
DMA コントローラが同一のバスを共有していて、しかも大量の DMA 転送を
行うのが前提のハードなんだけど、こういう状況だとメモリアクセスに要する
時間が予期できないから、厳密にクロック数を割り出すより実際のデータを
流しながらパフォーマンス測定せざるをえない。
で話が戻るが >>409 は何でクロック数をカウントしたいんだ?
0454デフォルトの名無しさん
NGNG410、412、414、429 あたりの馬鹿のコメントをよく読め。出来ないとアフォがほざいてるだろ。
出来ないのは現状のgdbの仕様ってとだけ。
0455デフォルトの名無しさん
NGNG以下、心ある人は無視するように。
0456デフォルトの名無しさん
NGNG410 は ICE の話だし、412 は OS やモニタが介在する場合には正確にカウントできないと
条件をつけてるだけでしょ。残り二つも、一般に公開されている情報だけではカウントでき
ないから gdb では無理だと言ってるに過ぎない。
>>414
> CPUのモデルごとにプロファイルを持って、
> CPUの内部を完全にエミュレートしないと。
>>429
> ただ正確な評価を行うためには CPU の外部仕様ではなく、内部仕様に関する詳細な
> 知識が必須だから
Z80 とかならともかく、命令をいったん非公開のμop に展開してたり、分岐予測を行ってる
最近の CPU だと、そのメーカー以外は正確なクロック数は出せんでしょ。
0458デフォルトの名無しさん
NGNG>>453
シミュレータでもたとえば割り込みまでシミュレートできるものがあるが、
そんな機能を多用するより実物持ってきてポートたたいてロジアナでモニタしたほうが
手っ取り早いってことは経験上わかりきってるだろ。それでもクロック数がカウントできれば
アルゴリムの優劣や、コンパイラのコード品質を知る上でプロファイラなんかを動かすよりは
るかに正確な評価が出来るってことよ。ロジック設計手がけたことあるならわかると思うが、
ファンクションシミュレートだけではきわめていい加減な評価でしかできない。フリーのHDL
コンパイラ/シミュレータが普及しないのもこのせい。
0459デフォルトの名無しさん
NGNGOSというかソフトウェアが影響する例だと、MIPSのR2000,R3000辺り。
ミスした時のハンドラはソフトウェアで記述だから。
0460デフォルトの名無しさん
NGNG誰も読まない長文お疲れさんです。
0461デフォルトの名無しさん
NGNGこの話題はスレ違いじゃないのか?
0462デフォルトの名無しさん
NGNGその辺もプラットホームによりけりなんだよな。
小さいながらも命令キャッシュを持ってる CPU だと、コードから静的に算出される
見かけのクロック数より、関数の配置の方が効いたりする。パフォーマンスカウンタ
で命令キャッシュミスを集計しながら、手作業で関数を並び替えたヤな思い出が。
0463デフォルトの名無しさん
NGNG例えばXilinxははメンターにディバイスの遅延情報を公開してるし、
一般ユーザでもそれの情報を入手できる。クロックだけでなくクロックに
対する遅延評価もできる。逆にそれが出来なきゃ設計は出来ない。
技術敵に出来ないことと、仕様としてやってないことを正確に分けろってことよ。
>>460 お前には言ってることの1割もわからんだろうからごみコメント入れるな。
0464デフォルトの名無しさん
NGNG0465デフォルトの名無しさん
NGNGgdbではH8もサポートしてるんだが。
0466デフォルトの名無しさん
NGNG0467デフォルトの名無しさん
NGNG0468デフォルトの名無しさん
NGNG0469デフォルトの名無しさん
NGNGできる。
デバッガ部分とシミュレータ部分は結構疎遠。
0470デフォルトの名無しさん
NGNG0471デフォルトの名無しさん
NGNGそういう意味ありげな言い方せずにはっきり指摘すればどうよ。というか的確な指摘できないんだろ。
0472デフォルトの名無しさん
NGNGスレ違いな話題はよそでやれってことじゃ?
0473デフォルトの名無しさん
NGNG0474デフォルトの名無しさん
NGNG0475デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNG> 例えばXilinxは
話の流れが理解できてないのか ?
それとも、単に知識を披露したいだけ ?
0477デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNG0479デフォルトの名無しさん
NGNG>>463の書いてる程度のことを知識のひけらかしと思う時点でお前がエンジニアとしての常識なさ杉
0480デフォルトの名無しさん
NGNG唐突に「Xilinxはは」なんて書かれても、うざいだけだよ。
0481デフォルトの名無しさん
NGNG0482デフォルトの名無しさん
NGNG407読め。Visual C++なんて7.1になってようやくまともになっただけ。
>>478
-O2でLinuxカーネルもFreeBSD全システムもコンパイルして大丈夫
0483デフォルトの名無しさん
NGNGi386しか使ったことない犬厨か。
他のarchで-O2してみろよ。バグバグだから。
0484デフォルトの名無しさん
NGNGそういうのを最適化そのものにbugがあると言うのか?
君は言うんだろうな。あーこりゃこりゃ
0485釣りだと思うけど、まさかマジなのかな ?
NGNGププッ、逆切れ ?
で、なんで Intel じゃなくて、Xilinx の話を唐突に出すの ?
0486デフォルトの名無しさん
NGNGH8で-O2つけて問題なく使ってるよ。
0487デフォルトの名無しさん
NGNGそれは特定のアーキテクチャ向け最適化でバグがあるだけじゃないの?
そのアーキテクチャの仕事する人は災難だが、一般化するほどのことでもない。
0488デフォルトの名無しさん
NGNGて言うか、どのアーキテクチャでどういうバグが書けない時点で、単なる煽りにしか見えないぞ。
0489デフォルトの名無しさん
NGNG>>463はまるでスレの流れを理解できていない勘違い野郎
0490デフォルトの名無しさん
NGNG当時のFPGA採用するような製品だから試作か実験機のたぐいだな。おーっとそれ製品にして金とってたって?
そりゃぼったくりでしょ。レベルの低いESレベルの製品世に出してることを公表して恥さらすなって!
0491デフォルトの名無しさん
NGNGgccってi386より前に68kでの実績があったことすら知らないみたいだね。
0492>>489 じゃないけど。
NGNG別にすべての製品が常に量産品というわけじゃないだろ。
俺の所でも、公的機関や親会社が使う試作品を設計/製造することもあるよ。
買う方から見れば試作品なんだろうけど、売る方としては一応製品だからね。
そういうのはころころ仕様が変わったりするし、納期とかもシビアだからある意味ぼったくるのは当然。
だってリスクがあるからね。
悔しかったらあんたもそういう仕事見つけて、ぼったくれるようになれよな。(藁
0493デフォルトの名無しさん
NGNG大量生産しか知らんのか?
たった1台しか生産しない製品なんてのもめずらしくないし
そうゆう業界での話。
まぁぼったくってるのには間違いないな。
0494デフォルトの名無しさん
NGNG0495デフォルトの名無しさん
NGNG>公的機関
多分NTTあたりのことを言ってるのかな?
君が試作までしか手がけてないからそれで終わりと思ってるかもしれないが、それを使って規格作るための実験したり
最終的にはメーカにおいて量産までこぎつけてそれで利益を上げられるからこそボッタくり価格でも君のところに発注してるわけよ。
まぁ、量産する前には必ず試作フェーズがあるし、試作でシビアな実装も考えずにFPGAをいじってるのはそれは非常に
楽しいが電気屋として一番醍醐味あるのはやっぱりASIC起こすことだよ。RFの実装屋とかは違うこと言うだろうけどね。
>悔しかったらあんたもそういう仕事見つけて、ぼったくれるようになれよな。(藁
自営でもやってるの?そりゃ大金手にできるだろうし、俺も大金は欲しいが経営の才能なんてないもんでな、
あくまでもサラリーマンとして一定の給料定年までもらう方でやってくよ。それでも開発設計のダイナミズムを楽しんでるよ。
0496デフォルトの名無しさん
NGNG0497デフォルトの名無しさん
NGNG492じゃないからNTTとか自営とかわからないが・・・
489の製品とは、”ある物”の製造装置で、携帯装置のようなシビアな実装などは不要な世界。
納品先に納めた段階では試作品のような物だが、現場で最終調整をしてそれがそのまま製品となってしまう。
そんな造り方なんでフィールドでのリコンフィギャブル性に目を付けたわけだよ。
10年以上経つけどいまだに大手メーカーで稼動してます。
スレ違いにつきこれにて終了
0498デフォルトの名無しさん
NGNGcatch throw はサポートされていないようなんですが。
0499デフォルトの名無しさん
NGNG0500デフォルトの名無しさん
NGNG電気スペックはともかくよく割れたな。
割れるというより、パッケージの背着が不十分ではがれるもの多数でびっくらこいた。Maid in Korea なんてこんなもんと思ってたらこの有様・・・鬱
0501デフォルトの名無しさん
NGNGできました。ありがとうございます。
catchされたらbreakは可能でしょうか?
0502デフォルトの名無しさん
NGNG0503デフォルトの名無しさん
NGNG0504デフォルトの名無しさん
NGNGワロタ
0505デフォルトの名無しさん
NGNG__cxa_begin_catchじゃねーか?
egrep get_identifier $(GCC)/gcc/cp/except.cしてみ。
他にも、__cxa_call_unexpected, __cxa_end_catch, __cxa_rethrow,
__cxa_allocate_exception, __cxa_free_exception こんなん出てきます。
0506デフォルトの名無しさん
NGNG0507デフォルトの名無しさん
NGNGつか、実体のsources.redhat.comが�d�j
0508デフォルトの名無しさん
NGNG3.4.0で-O3を使うと、いたるところでInternalCompileErrorが発生するので、
その原因となる最適化フラグだけ無効にしたいのです。
0509デフォルトの名無しさん
NGNG0510デフォルトの名無しさん
NGNGparse_options_and_default_flags()
0511デフォルトの名無しさん
NGNG-fverbose-asm でコンパイルして.sの先頭のコメントを見るってのはどうよ?
0512デフォルトの名無しさん
NGNG-fverbose-asm -S だ
0513デフォルトの名無しさん
NGNGなんでGCCのパースしたデータを活用しないの?
なんでGCCのアドインみたいな形で作らないの?
VC++ユーザとしてはその辺り不可思議
0514デフォルトの名無しさん
NGNG0515508
NGNG-fverbose-asm -Sで見る方法が手軽で解りやすかったです。
0516デフォルトの名無しさん
NGNG作者が別だから。。。
と言うかgccのパース結果(正確にはcc1等の出力)は
プリプロセッサの処理結果を元にしているから
Globalの様にソースコードの原型が必要な場合には適さない
これでいいか?
0517デフォルトの名無しさん
NGNG>プリプロセッサの処理結果を元にしているから
>Globalの様にソースコードの原型が必要な場合には適さない
なるほど
0518デフォルトの名無しさん
NGNG0519デフォルトの名無しさん
NGNGパッチ投げてあげて〜
0521翻訳器
NGNG0523デフォルトの名無しさん
NGNG本家の3.5.0でmmapに依存しない場合にも対応しようとしているみたいなので
それが出るまで待って見るのもいいかも?
MinGW用にはcygwin用にでっちあげたパッチだけじゃ不十分で
fopenを"w+"でファイルアクセスしているところでこけてます。
"w+b"に変更して、fcloseする手前でエラーになっているところを
コメントアウトすると一応PCH出来るようになりますよ。
0524デフォルトの名無しさん
NGNG状況説明
ttp://sources.redhat.com/ml/overseers/2004-q2/msg00251.html
大丈夫か?
0525デフォルトの名無しさん
NGNGコールスタックを自作するとなるとかなり面倒な事になります。
(関数の始まりと終わりと return を全部いじる必要があるので)
GCC 3.3.2 使ってるんですけど、何かいい関数とか用意されてませんかね?
0526デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNGsprintf(buf, "gdb -x scriptfile %d", getpid());
system(buf);
じゃダメかねえ。(scriptfileにはwhere)
0528デフォルトの名無しさん
NGNG0529デフォルトの名無しさん
NGNG__builtin_return_address(LEVEL)じゃダメなの?
0530525
NGNGおおっ! リターンアドレスが取得できますね。
あとはそのアドレスがどの関数内にあるのかが分かればいいのですが...。
>>526-528
gdb の使い方よく知らないもんで...。
やっぱ勉強した方がいいですかね?
0531デフォルトの名無しさん
NGNG0532デフォルトの名無しさん
NGNGnlist()
0533デフォルトの名無しさん
NGNG0534デフォルトの名無しさん
NGNG0535デフォルトの名無しさん
NGNG早速ホムペ行ってくる
0536デフォルトの名無しさん
NGNG0537デフォルトの名無しさん
NGNG> nlist()
/usr/include/linux/a.out.h:struct nlist {
これですか?なにするもの?
0538デフォルトの名無しさん
NGNG0539デフォルトの名無しさん
NGNGどういう意味ですか?
0540デフォルトの名無しさん
NGNGBSD使えってことなんだろう
0541デフォルトの名無しさん
NGNG犬酎なんでmanしてもみつからず。
0542デフォルトの名無しさん
NGNGDebianだけど、libelfg0-devを入れたら/usr/include/libelf/nlist.hがあった。
0543デフォルトの名無しさん
NGNGんで、なにしるものだった?
0544デフォルトの名無しさん
NGNGhttp://landru.uwaterloo.ca/cgi-bin/man.cgi?section=3&topic=nlist
0545デフォルトの名無しさん
NGNG0546デフォルトの名無しさん
NGNG0547デフォルトの名無しさん
NGNGgdbなんてコマンドいくつか覚えれば使えると思うけど。
覚えようとしないで、わざわざ手間掛かる方法を独自に
試すの事はあなたの人生に潤いを与えますか?
0548デフォルトの名無しさん
NGNG常にgdb上で動かせるケースばかりとは限らんだろが
0549デフォルトの名無しさん
NGNG0550デフォルトの名無しさん
NGNGお肌に潤いを与えます。
0551デフォルトの名無しさん
NGNGWin?
0552デフォルトの名無しさん
NGNGマカ
0553デフォルトの名無しさん
NGNGこっちだろ。
>>530
> あとはそのアドレスがどの関数内にあるのかが分かればいいのですが...。
0554デフォルトの名無しさん
NGNG0556デフォルトの名無しさん
NGNGOpenC++でも使えよ
0557デフォルトの名無しさん
NGNGアスベストC++?
0558デフォルトの名無しさん
NGNGまあ、プログラミングよりましかも知れんが。
0559978
NGNGどこが最強なんだか・・・
あんなの使いもんにならんよ
0560デフォルトの名無しさん
NGNGC言語なら俺に聞け!の次スレ立てて
0561デフォルトの名無しさん
NGNG0562デフォルトの名無しさん
NGNGちょっと待っていろ
0564デフォルトの名無しさん
NGNG>C言語なら俺に聞け!の次スレ立てて
それすらもできないようでは、C言語も(ry
0565デフォルトの名無しさん
NGNGコンパイラはMingwだし、何か問題でも?
ソースはフォントとかカスタマイズすれば割といける
0566デフォルトの名無しさん
NGNG0567デフォルトの名無しさん
NGNGCCMALLOCというメモリーデバッガのパッケージがあって
そのなかにコールスタックを記録する機能がある。
ttp://www2.inf.ethz.ch/personal/biere/projects/ccmalloc/
このなかのcallchain.cというファイルにbacktrace()という
関数があってそれがまさにその実装。 #ifdefで中身は
x86依存バージョンと、gccの__builtin_return_addressを
使用した実装に分かれてる。
0568デフォルトの名無しさん
NGNG例えば、
struct SAMPLETYPE {
int a;
int b;
};
SAMPLETYPE hoge[] = { { 1,2 }, { 3,4 }, { 5,6 }, { 7,8 } };
のような、構造体の配列データ【のみ】のソースから、配列サイズと【全く同じ大きさ】のデータファイルを作りたいと思っています。
gcc ??? ??? sample.cpp
のように、コマンドラインのみでファイルを作成することはできるのでしょうか。
0569デフォルトの名無しさん
NGNG(略)
n = fwrite(hoge, sizeof(struct SAMPLETYPE),
sizeof(hoge)/sizeof(struct SAMPLETYPE), f);
0570デフォルトの名無しさん
NGNGデータファイルを作成する c プログラムを作って実行する。
0571568
NGNGすみません、書き忘れていたのですが、
「コンパイル環境はあるが、実行環境がない」という
特殊な状況のため、fwriteが使えないのです。
ですので、コマンドラインのみでどうにかならないかなーと思いまして。
0572デフォルトの名無しさん
NGNGローカルの環境でやってしまえばいいでしょう。
また、違っていてもプログラムで何とでもなりますし。
0573568
NGNG1つのソース(配列データが書かれたもの)から、エンディアンが違う2種類のバイナリーデータを
つくりたいと考えています。
異なるプラットフォーム(MacとWinとか)でも、基本的にプログラムのソースコードは共通化したいので、
プログラムでエンディアンを解決するというのはやりたくないのです。
1)共通プログラムソース→それぞれのプラットフォーム用にコンパイル→それぞれのプラットフォーム用実行バイナリ
2)共通データソース→それぞれのプラットフォーム用にコンパイル→それぞれのプラットフォーム用データ
ということができればいいと考えているのですが。
0574デフォルトの名無しさん
NGNG>プログラムでエンディアンを解決するというのはやりたくない
じゃあ変換ICとかでも作れば?
0575デフォルトの名無しさん
NGNG> intのsize, structのpadding, byte order
に対処すればいいだろ。
0576デフォルトの名無しさん
NGNG0578デフォルトの名無しさん
NGNG0579デフォルトの名無しさん
NGNG「それぞれのプラットフォーム用にコンパイル」のところで、gcc しか使えないの?
make とか perl とかは? perl でやれば?
0580568
NGNG構造体のサイズがかなり大きく、かつ、各メンバの構成が複雑だったり、
アラインメントなど、コンパイラ依存な部分も多いかと思ったので、
プログラムで解決することはしたくなかったのです。
また、プログラムが、ファイルから読み込んだメモリをそのまま構造体データとして
使う仕様だったので、プログラムソースと同じ結果を吐くコンパイラでバイナリデータを
作成する必要があると思い、質問しました。
とりあえず、
gcc -c test.cpp -o test.o
objcopy -O binary test.o test.bin
のように、objcopyを使うことでなんとかなりそうです。
いろいろありがとうございました。
0581デフォルトの名無しさん
NGNGそれポインタどうするの?
変数定義が複数あっても大丈夫?
0582デフォルトの名無しさん
NGNG> それポインタどうするの?
典型的なのが、
char *strs[] = { "This", "is", "a", "test", };
ですね。
char strs[][5] = { "This", "is", "a", "test", };
なら、なんとかなりますが。
0583568
NGNG>それポインタどうするの?
ポインタやリンカ解決が必要なデータは含まれない仕様なので、大丈夫でした。
構造体自体は複雑なのですが、内容はすべて数値、かつ、変数定義が1つなので、
先頭からのオフセットさえ正しければOKだったので。
では。
0584デフォルトの名無しさん
NGNG0585デフォルトの名無しさん
NGNG0586デフォルトの名無しさん
NGNG例: i386 の関数呼び出しのABI、C++ の例外ハンドリングのABI
0587デフォルトの名無しさん
NGNGhttp://www.codesourcery.com/cxx-abi/
この辺しか知らない
0588584
NGNGそのものズバリです、i386の関数呼出ABIです
>>587
おお!素晴らしい!読んでみますです
C関数コール時にに各レジスタの内容を、アセンブルコード側
で保証しなくてはならないのか、GCCの吐くコード側で保証
されるのか知りたかったのです。それとEBP(フレームポインタ)の扱いも~
(gcc -S foo.c で出力されるコードでは、(E)AX以外の内容も保証されていませんでしたが
VCの吐いたPEコードを逆アセンブルした時は、呼出先で保証していた気が...)
アセンブルするのは不慣れなんで、ABI仕様を読めば、
その辺りの規定が書いてあるんじゃないかと考えた次第です
どうもDebian上のGCC3.3.3 で -Os -O3 を付けた場合、
書いたコードの挙動が怪しくて...
最適化に左右されないCコードの呼出を行うには、
関数呼出規定を熟知しておこうと...
0589デフォルトの名無しさん
NGNGeax, ecx, edx が関数内で壊していいレジスタ、
ebx, esi, edi が関数内で変えちゃいけないレジスタ。
これは、Windows でも *BSD でも Linux でも同じはず。
gcc-3.3.x のソースだと、gcc/config/i386/i386.h の
CALL_USED_REGISTERS の値かね。
こういうのって、Intel が決めたのかなあ?
0590デフォルトの名無しさん
NGNGふつうCPUメーカが決める。大抵CPUのマニュアルに書いてあるよ。
0591デフォルトの名無しさん
NGNGなんてコッタ、EAX,ECX,EDXって保証する必要無いんですね..
Intelアーキテクチャマニュアル上巻見直します...
>>gcc-3.3.x のソースだと、gcc/config/i386/i386.h の
>>CALL_USED_REGISTERS の値かね。
gcc -S -fcall-saevd-ecx -fcall-saved-edx -fcall-saved-ebx foo.c
で、 指定レジスタ使用時にpush/popされるのを確認しました
-fcall-used-reg で破壊可能レジスタとなるそうです。
アセンブル時に、保護したいレジスタはスタックフレーム
にセーブしなくてはならないってことですね
まずはマニュアルを見直します
0592デフォルトの名無しさん
NGNGいまいち意味がわかりません。
0593デフォルトの名無しさん
NGNGその名の通り、メモリ上のどのアドレスにロードされても問題ないような
コード。通常実行効率が微妙に悪くなるが、代わりに同一のバイナリ
イメージを複数のプロセスで共有できるようになる。
DLL とか共有ライブラリを作るときに使う。
0594592
NGNG>その名の通り、メモリ上のどのアドレスにロードされても問題ないような
>コード。通常実行効率が微妙に悪くなるが、代わりに同一のバイナリ
>イメージを複数のプロセスで共有できるようになる。
>DLL とか共有ライブラリを作るときに使う。
Thanx.
もし仮りに、共有ライブラリ生成時に-fPICしなかった場合は、
そのライブラリを使用した時に落ちてしまうんでしょうか?
0595デフォルトの名無しさん
NGNG0597592
NGNGオーバレイ技術って仮想メモリ全盛の今となっては、
もはや使用されないのですか、あるいは必要ないのですか?
それと、コンピュータの階層上(レイヤ)では、オーバーレイは
どのレイヤで実行されるのですか?
0598デフォルトの名無しさん
NGNGGCCスレで聞くからには、LDのOVERLAY指定のこと?
使用例や必要性を知らずに勉強してるの?想像しにくい状況だな。
さしあたってあんた本人が必要としてるわけじゃないのか?
どのレイヤと聞くからには、あんたの考えてるレイヤを列挙してもらわないと。
しかし、どんなレイヤがあるかは、マシン、システム、ソフトごとで様々なはずだ。
0599デフォルトの名無しさん
NGNG0601592
NGNG>まずはあんたの言ってる「オーバーレイ技術」とは何?
>GCCスレで聞くからには、LDのOVERLAY指定のこと?
そのとおりです。
>使用例や必要性を知らずに勉強してるの?想像しにくい状況だな。
わからないからこそ調べてるんです。
>さしあたってあんた本人が必要としてるわけじゃないのか?
さしあたって必要ではないです。でも、さしあたらないとだめなんでしょうか?
>どのレイヤと聞くからには、あんたの考えてるレイヤを列挙してもらわないと。
>しかし、どんなレイヤがあるかは、マシン、システム、ソフトごとで様々なはずだ。
様々なレイヤで存在することすらわからなかったものですから。
マシンとシステムの区別がよく分からないんですが。
レイヤがソフトであるなら、やはりローダがオーバレイ作業をするのが一般的なんですか?
0602デフォルトの名無しさん
NGNGオーバーレイが有効に使えるのは、
1 主記憶が狭い
2 仮想記憶がない
3 主記憶と比べて大きな二次記憶がある (これは read only のことが多い)
という場面。小さな RAM と、それより大きめの ROM で構成されてるシステムだと
使い道があるが(ゲーム機とか)、最近はハードウェア資源が豊富になってきて
るから、使う場面は少なくなってきてるんじゃないかなぁ。
メモリが増える割合に比して、コード量の増加って緩やかだから。あと、オーバーレイ
で解決せずに実行時リンク (Win32 だと DLL, UNIX なら *.so) で対応する方法も
ある。こっちの方が柔軟。
0603592
NGNGありがとうございます。
>1 主記憶が狭い
>2 仮想記憶がない
>3 主記憶と比べて大きな二次記憶がある (これは read only のことが多い)
なるほど。
これを見てて思いついたのは、組み込み系で使われる可能性がありますね。
>メモリが増える割合に比して、コード量の増加って緩やかだから。あと、オーバーレイ
>で解決せずに実行時リンク (Win32 だと DLL, UNIX なら *.so) で対応する方法も
>ある。こっちの方が柔軟。
オーバーレイで解決せずに実行時リンク?動的ライブラリのことですかね。
そもそもgcc環境では、オーバーレイor実行時リンクの作業はカーネルがするって事?
0604デフォルトの名無しさん
NGNG0605592
NGNG>オーバーレイの言葉の定義をしてくれー
自分がいろいろ調べて見てわかっているオーバーレイの定義は、
「少ないメモリ上で、ある関数をコールする度にオーバレイマネージャ等が
実行ファイル等から読み込み、メモリに再配置して効率的にメモリ割り当てを扱う事」
という認識でいます。間違ってますでしょうか?
0606デフォルトの名無しさん
NGNG> そもそもgcc環境では、オーバーレイor実行時リンクの作業はカーネルがするって事?
gccは中立です。
0607デフォルトの名無しさん
NGNG> 「少ないメモリ上で、ある関数をコールする度にオーバレイマネージャ等が
それは GNU LD で実現してるオーバーレイとは違うぞ。
関数呼び出しの度に自動的にファイルを読み込むのではなく(それは遅すぎ)、
手作業で
これから foo(), bar() を読み込むから、foo(), bar() を含むコードを
メモリ上に読み込み
完了後に foo(), bar() をコール
とする。
オーバーレイを有効に使うためには、プログラムを同じタイミングで呼ばれる
可能性がある複数の部分に *手作業で* 分割し、さらに読み込みタイミングを
自分で制御する必要がある。
メモリ上に読み込んでない関数をコールすると、プログラムが実行時に
吹っ飛ぶか、もしくはメモリ上に展開されている別のコードを実行して、
謎の挙動を示すことになる。
0608デフォルトの名無しさん
NGNG> ある関数をコールする度にオーバレイマネージャ等が
> 実行ファイル等から読み込み、
これはある実装の機構であって、オーバーレイの定義ではないのでは?
> メモリに再配置して
ほとんどの場合、実行時に再配置もしないのでは?
再配置できるくらいなら"OVERLAY"する必要がないからね。
メモリ上のある領域をモジュール同士で共有して、排他的に利用するのが、
(たぶんあなたの言っている)オーバーレイだと思います。
オーバーレイをgccで行う方法の話じゃないんならば、
くだ質にいった方がいいんじゃない?
0609592
NGNG>それは GNU LD で実現してるオーバーレイとは違うぞ。
え、そうなんですか。もう一度GNU LDのオーバーレイを調べてみます。
>オーバーレイを有効に使うためには、プログラムを同じタイミングで呼ばれる
>可能性がある複数の部分に *手作業で* 分割し、さらに読み込みタイミングを
>自分で制御する必要がある。
これは、そのプログラム作成者がその作業をするってことですか?
>これはある実装の機構であって、オーバーレイの定義ではないのでは?
すいません。オーバーレイの定義についてまだあやふやでした。
>メモリ上のある領域をモジュール同士で共有して、排他的に利用するのが、
>(たぶんあなたの言っている)オーバーレイだと思います。
その通りです。
>オーバーレイをgccで行う方法の話じゃないんならば、
>くだ質にいった方がいいんじゃない?
そうですね。もう一度調べなおします。
Thanxでした。>>607,>>608
0610デフォルトの名無しさん
NGNG> > ある関数をコールする度にオーバレイマネージャ等が
> > 実行ファイル等から読み込み、
>
> これはある実装の機構であって、オーバーレイの定義ではないのでは?
昔アセンブラで書いたプログラムを自動的に↑とするリンカ使ったことある。
L80の互換リンカで、P?L80って名前…
LINK86互換のもあったはず。
0611デフォルトの名無しさん
NGNG> オーバーレイをgccで行う方法の話じゃないんならば、
> くだ質にいった方がいいんじゃない?
って書いたけど、
Linker && Loader
http://pc5.2ch.net/test/read.cgi/tech/1033403294/
ってスレがあるね。過疎スレだけどね。
0612!599
NGNG>http://gcc.gnu.org/ml/gcc-patches/2001-10/msg00800.html
↑をざっと読んだけど-fasynchronous-unwind-tablesの説明がないような気がする。
0613592
NGNG実はこの本を読みながら↓質問してました。
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-06437-9
リンカ&ローダって難しい....使って天国、作って地獄って奴ですか。
関連ドキュメントが少なすぎるぅぅぅ(泣
0614デフォルトの名無しさん
NGNGhttp://www.cqpub.co.jp/interface/column/freesoft/2004/200401/0.htm
http://www.cqpub.co.jp/interface/column/freesoft/2004/200402/0.htm
0616592
NGNGここ↓見たけど途中から誤爆スレみたいなんですけど..sigh
Linker && Loader
http://pc5.2ch.net/test/read.cgi/tech/1033403294/
0617デフォルトの名無しさん
NGNGこの本はベストセラーだね。いい本だ。翻訳は良くできてるのかな?
この本を読んで全部理解するにはかなりの基礎知識を必要とするよ。
0618デフォルトの名無しさん
NGNGあっち移ったら、あっちでお付き合いするけど
こっちはスレ違いだからね。
0619デフォルトの名無しさん
NGNG>関連ドキュメントが少なすぎるぅぅぅ(泣
確かに少ないな。特に日本語のドキュメントで探すのは皆無に近い。
欧米では関連ドキュメントを探すとちゃんと見つけ出せるけど日本特有の現象なのかわからんが、
ある技術(例えばLinker & Loader)を使っているなら、その概念や動作や設計とかの資料があってもいいはずなのに、
「車輪の再発明なんかやるんじゃない」的な考えで、その関連資料を作成すること自体しなくなるのは
とてもよくない現象だと思う。
長々とスマソ。
0620デフォルトの名無しさん
NGNGヽ(゚∀゚)ノGCCバンザイ!!!!
0621デフォルトの名無しさん
NGNGこれなんとか標準C++の範囲で実現する方法はないの?
ちょっとすれ違いか。
0622デフォルトの名無しさん
NGNGgccのコンパイルオプションを紹介しているサイトを
教えていただけませんか?
0623デフォルトの名無しさん
NGNGinfo 読め
0624デフォルトの名無しさん
NGNGgoogleでgcc infoを検索すれば、gccのinfoの日本語訳が見付かることだろう。
0625デフォルトの名無しさん
NGNG0626デフォルトの名無しさん
NGNG-fno-gates
MSVC用のpragmaを発見するとそのソースファイルを削除する
0627デフォルトの名無しさん
NGNGGPL/LGPLライセンスのソースファイルを(ry
0628デフォルトの名無しさん
NGNG0629デフォルトの名無しさん
NGNG0630デフォルトの名無しさん
NGNGってやつか。
オレも気になる。
0631デフォルトの名無しさん
NGNG0632デフォルトの名無しさん
NGNG0633デフォルトの名無しさん
NGNGinfo読んでも変だと思ったらsource読んで確認するのを勧める。
0634デフォルトの名無しさん
NGNGなにをもって「みたい」とするかに依るが。内部実装は天と地ほど違う。
0635デフォルトの名無しさん
NGNGマジなんだ……。さんきゅ。俺も落としてみるか。
0636デフォルトの名無しさん
NGNG俺も思わず確認してしまった。
1.42の頃はstallmanがガンガンいじってたのねぇ。
0637デフォルトの名無しさん
NGNGこれってどういう意味ですか?
"!!"って使用できましたっけ?
if (!!var1 == !!var2)
return 0;
0638デフォルトの名無しさん
NGNGC言語くだ質スレが適当だと思うが一応。
!e → (e) ? 0 : 1
!!e → (e) ? 1 : 0
つまり!!は、0(false), それ以外(true)の0, 1への正規化。
その使い方だと、var1とvar2の(C言語的)真偽が同じならです。
flag | (!!(式) << 4)
なんてのは良く使います。
0639デフォルトの名無しさん
NGNG素直にこう書いた方が判りやすいと思うのだが・・・
if(var1 && var2)
return 0;
0640デフォルトの名無しさん
NGNGそれだと
var1 が 0 かつ var2 が 0 の場合に動作が異なる。
0641デフォルトの名無しさん
NGNG本当にプログラマですか? (w
0642デフォルトの名無しさん
NGNGreturn 0;
これでいいような気がする。
違うのかな?
0643デフォルトの名無しさん
NGNG本当にプログラマですか? (w
0644デフォルトの名無しさん
NGNGプログラマじゃないけど本当に分からない。
違い教えて。
0645デフォルトの名無しさん
NGNGじゃあプログラマになれるよう、勉強しようね(w
0646デフォルトの名無しさん
NGNGいいから教えろ
0647デフォルトの名無しさん
NGNGおれも分らない。int型みたいな0(false)とそれ以外(true)の
{0,1}への正規化なら、>>642でいいように思うんだけど。
0648デフォルトの名無しさん
NGNG自身を持て。
0649デフォルトの名無しさん
NGNG真偽が逆転するので、正規化目的なら!!だろう。
ただ、件の場合は比較しているだけなので、真偽逆でも問題なし。
0650デフォルトの名無しさん
NGNG早く教えてください
if (!var1 == !var2)
if (!!var1 == !!var2)
この違いを教えてください。漏れには真偽が逆になっていて
見難いから、!!としているだけにしか見えません。
0651デフォルトの名無しさん
NGNGでもそれならマクロか何かにしてほしい
0652デフォルトの名無しさん
NGNG単にあなたが見慣れてないだけじゃない?
!!というのは特徴的だし昔から使われているから、
イディオムとして受け入れる方が変なマクロ定義するよりいいと思うけど。
俺は (var?1:0) をするイディオムとして !!var を認識しているので、
if (!var1 == !var2)
よりは
if (!!var1 == !!var2)
の方が素直に読める。
0653デフォルトの名無しさん
NGNGはつみみです:-)
0654デフォルトの名無しさん
NGNG0655211
NGNGc-decl.c:3634: constp = !! (specbits & 1 << (int) RID_CONST) + TYPE_READONLY (element_type);
c-decl.c:3636: = !! (specbits & 1 << (int) RID_RESTRICT) + TYPE_RESTRICT (element_type);
c-decl.c:3638: = !! (specbits & 1 << (int) RID_VOLATILE) + TYPE_VOLATILE (element_type);
c-decl.c:3639: inlinep = !! (specbits & (1 << (int) RID_INLINE));
c-parse.c:1854:#define YYRECOVERING() (!!yyerrstatus)
collect2.c:824: no_demangle = !! getenv ("COLLECT_NO_DEMANGLE");
cppexp.c:320: result.unsignedp = !!(type & CPP_N_UNSIGNED);
cppexp.c:407: overflow = !!(num.high >> (PART_PRECISION - shift));
cppexp.c:593: result.unsignedp = !!unsignedp;
cppfiles.c:629: if (CPP_OPTION (pfile, deps.style) > !!sysp && !file->stack_count)
cppfiles.c:742: bool print_dep = CPP_OPTION (pfile, deps.style) > !!sysp;
cppspec.c:169: + !!o_here + !!lang_c_here + !!lang_S_here;
cpptrad.c:714: bool recursing = !!(node->flags & NODE_DISABLED);
expr.c:7398: return !!(the_word & bitmask); */
gcov.c:818: arc->on_tree = !!(flags & GCOV_ARC_ON_TREE);
gcov.c:819: arc->fake = !!(flags & GCOV_ARC_FAKE);
gcov.c:820: arc->fall_through = !!(flags & GCOV_ARC_FALLTHROUGH);
gengtype-yacc.c:429:#define YYRECOVERING() (!!yyerrstatus)
hard-reg-set.h:95: (!!((SET) & (HARD_CONST (1) << (BIT))))
hard-reg-set.h:125: (!!((SET)[(BIT) / UHOST_BITS_PER_WIDE_INT]\
ra.c:431: something_spilled = !!WEBS(SPILLED);
real.c:3043: encode_ieee_extended (fmt, buf+!!FLOAT_WORDS_BIG_ENDIAN, r);
real.c:3138: decode_ieee_extended (fmt, r, buf+!!FLOAT_WORDS_BIG_ENDIAN);
一部、みやすいように、削りましたが、ほんとにろーとるなんでしょうか???
0656デフォルトの名無しさん
NGNG0657デフォルトの名無しさん
NGNGロートル呼ばわりされかねないのは、
「昔から使われているから、イディオムとして受け入れろ」
という下りのところだろ。
0658デフォルトの名無しさん
NGNG中国語で老人の事なんだ(;´Д`)
0659デフォルトの名無しさん
NGNG正規化する場合でも、x != 0 が使われる場合の方が多いんじゃないかな。
少なくとも、俺はそうしてる。
俺はその方が読み易い(理解しやすい)し。
0660デフォルトの名無しさん
NGNG0661デフォルトの名無しさん
NGNG目的が0との比較なのか正規化なのかよく考えて使い分けるべし
0663デフォルトの名無しさん
NGNG0664デフォルトの名無しさん
NGNG仕方なくコードで会話するんだが 相手に意図を伝えられるコードを
意識して書くようになると それだけでバグって減るモンなんだね
0665デフォルトの名無しさん
NGNG0666デフォルトの名無しさん
NGNG0667↑
NGNG0668デフォルトの名無しさん
NGNG0669652
NGNGCとは12のころからかれこれ15年くらいつきあってるからなあ。
0671デフォルトの名無しさん
NGNG0672デフォルトの名無しさん
NGNG0673デフォルトの名無しさん
NGNG0674俺も含めてな。
NGNG0675デフォルトの名無しさん
NGNGレッドハットのnewlibのソースコードをターゲットM68000でコンパイル
して、クロスコンパイル環境構築できますか?
(やったことのある人がいれば教えてください)
H8のクロスコンパイル環境の情報は多いんですが、M68000の
情報がほとんどないもので。
よろしくお願いします。
0676デフォルトの名無しさん
NGNG--target=m68k-coff か --target=m68k-elf を指定すれば
できるじゃねえの?
0677デフォルトの名無しさん
NGNGWin32上でbuildしてる奴ほとんどいねぇと思う。
オレがやってみた感想。
だってあそこのbison使い物にならんし、
素直にコンパイル通すだけでもツール類自力でmakeしないといかんし。
0678675
NGNG情報サンキューさんです。
多分これと同じ要領でコンパイルできそうですね。
MinGWというのが気になっているんですが、実際にやってみれば
どうなのかわかるかな?
0680デフォルトの名無しさん
NGNGcygwin でもいけるんじゃない?
0681デフォルトの名無しさん
NGNGスケルトンファイルをsendmail.cf化しようなんて何考えてんだか。
設計を改めず拡張してどんどこ改悪していくのはGNUの悪い癖。
0682どんどこ
NGNG0683デフォルトの名無しさん
NGNG聞くばっかりじゃなくて、実際にやって見れば
痛い目にあった方がスキルが上がる気がするけど
0684デフォルトの名無しさん
NGNG>bison1.8が改悪なんだなぁ。Win32上でのmake失敗の原因はこれだし。
「最初からWinなんて眼中無かった。」に500000カノッサ
0685675
NGNGそうですね。実際にやってみたほうがいいですね。
週末になれば時間が確保できるのと、試せる環境が
つかえるようになるのでやってみようと思います。
MinGWでだめだったらCygwin、それでもだめだったら
最後の手段でLinux...といきたいところですが、色々な
都合でそんなに時間がかけられないかもしれないです。
本当は市販のコンパイラを買ってもいいんですが、
gccを使うのはスキルアップも目的です。本当は
少し時間をかけてチャレンジしたいんですけどね。
0686デフォルトの名無しさん
NGNGぶっちゃけ、イバラの道ですた。
Cygwinと比べてコミュニティの規模が小さいせいか、自前で解決しなきゃ
ならんネタが多いんですよ。
MinGWのダウンロードページから落とせるtar玉には大抵MinGW用のパッチが
あたってるので、迂闊にGNUのページとかから落としてくるより楽なんだけど、
それでもビルドできないシチュとかが結構ある。
特にクロスコンパイル編成だと、configureが混乱するのか、時々わけのわからん
ヘッダを持ってこようとしたりして、激しく混乱が加速するです。
ビルド済みパッケージには、大抵ポーティングリスト(元のパッケージから
何を変えたか)が添付されてるので、使わなくても落としてくるのが吉。
/usr/doc以下にドキュメント追加されます。
gdbがシリアル接続受け付けなかったり、明らかに消しちゃいかん機能を
消して無理矢理ビルド通してたりするので、いまいち信用ならないけど。
漏れ的に困ったのは、gccがfork等posixの関数を要求してくるところとか。
collect2とかが引っかかるので、Makefileから外してしまうので一応解決するます。
0687675
NGNG本家MinGWのメーリングリストでも
「collect2でひっかかるけどどうすんの?」
「collect2はMinGWのパッケージには公式に入ってないよ。
これをどうするかどうかは過去に何回か議論しているからログ読め」
というやりとりがあったようですね。
あの、ついでにmakefileの修正箇所なぞを大雑把に
晒してもらえると大変助かるんですが。
だめですかね?
0688675
NGNG過去ログ読めってことか。
うっかり、collect2が公式パッケージに入っていない
理由について述べられているんだと勘違いしてしま
いました。
0689デフォルトの名無しさん
NGNGbool operator!() const をクラスに定義して、
if( !!obj ) と使うことがある。
0690デフォルトの名無しさん
NGNGメンバ関数ポインタを使う手もある。これだと整数型への暗黙の型変換が
できないから、ケアレスミスを防げるし。
class foo
{
void dummy();
public:
typedef void (foo::*unspecified_bool_type)();
operator unspecified_bool_type() const {
return xxx ? &foo::dummy : NULL;
}
};
0691デフォルトの名無しさん
NGNGところでなんでC++ってNULLを予約後にしなかったんだろう。
0692デフォルトの名無しさん
NGNG×予約後
◯予約語
0693デフォルトの名無しさん
NGNG0694デフォルトの名無しさん
NGNGgccのマニュアルを見ると
(例えば,http://gcc.gnu.org/onlinedocs/gcc-3.3.3/gcc/Optimize-Options.html#Optimize%20Optionsなど)
最適化オプション-Oを指定すると,-fomit-frame-pointerは自動的に指定されるように思われます.
しかしながら,世のgcc向けのソースを見ると,
最適化オプション(-O,-O2,中には-O6なんてのもある.効いているのか?)と-fomit-frame-pointer
を併せて指定している例を多々見掛けます.(例えば,Linuxカーネルのソースなど.)
これは,一体どういうことなんでしょう?
プログラマの勘違いなんでしょうか.
あるいは,昔は-Oが-fomit-frame-pointerを自動的に指定していなかった時期とかあるんでしょうかね?
ご存知の方いらっしゃいますでしょうか?
0695デフォルトの名無しさん
NGNG0696695
NGNGつーか,お前さんの示してるgcc-3.3.3のマニュアルでも,まだ,環境依存じゃん(w
>on machines where doing so does not interfere with debugging
ダマサレター
0698デフォルトの名無しさん
NGNG> 最適化オプション-Oを指定すると,-fomit-frame-pointerは自動的に指定されるように思われます.
??? 英語力がないのか ?
だったら http://www.excite.co.jp/world/english/ とか使えよ。
英) -O also turns on -fomit-frame-pointer on machines where doing so does not interfere with debugging.
日) -Oは、さらにそうすることがデバッギングに邪魔をしない機械上で―fomit構造ポインターをつけます。
0699デフォルトの名無しさん
NGNGオプションの指定を最適化したいのか ?
フレームポインタ付けたくないなら指定すればいいと思うが。
0700694
NGNGあぁ,すみません.
上の方にはそう書いてありますね.
もっと下の-fomit-frame-pointerの項目の
> Enabled at levels -O, -O2, -O3, -Os.
ばっかり見てました.
697の質問については,多分,
-Oと-fomit-frame-pointerを併記するソースが多いということが
その答えを物語ってるんでしょうね.
0701694
NGNG> オプションの指定を最適化したいのか ?
はい.
CPUはPentium3で,今んとこ,
-O3 -march=pentium3 -msse -mfpmath=sse -fforce-addr -funroll-loops -fomit-frame-pointer
を付けてコンパイルしています.
やっているのは浮動小数点演算中心の計算です.
他にお勧めとかあったら,是非お教えて下さい.
0702デフォルトの名無しさん
NGNG厳密なエラー処理が必要ない場合は -ffast-math も利く。
0703694
NGNG-ffast-mathはなんとなく恐くて敬遠してましたがこの際理解しようと思います.
-ffast-mathで設定されるオプションのうち,いくつかが良く分かりません.
オプションによって結果が変わる短い例を示してもらえないでしょうか?
以下はだいたい分かります.
-fno-math-errno: errnoが設定されなくなる.
(e.g.)
$ cat test.cpp
#include <iostream>
#include <cmath>
#include <errno.h>
using namespace std;
int main () {
double d0 (-1);
cout << sqrt (d0) << " " << flush;
perror (NULL);
return 0;
}
$ g++ -O test.cpp; ./a.out
nan Numerical argument out of domain
$ g++ -O -ffast-math test.cpp; ./a.out
nan Success
-funsafe-math-optimizations: 計算精度がユーザからはコントロール不能な最適化が行なわれる.
以下がいまいちよく分かりません.
-fno-trapping-math
-ffinite-math-only
-fno-signaling-nans
(因みに私の環境はg++ 3.3.3 on Linux 2.4.26)
0704デフォルトの名無しさん
NGNG-fno-trapping-math
IEEE 754 では、演算結果が非数 (0/0 とかの場合) や無限大など「ふつー
じゃない数」になった場合に割り込みを発生させ、事前に登録した割り込み
ハンドラに制御を移すことが可能になっている。
この割り込み処理がないことを前提にして最適化を行う。
-ffinit-math-only
演算結果が非数や無限大にならないことを前提にして最適化を行う。
-fno-signaling-nans
これは -fno-trapping-math のサブセットで、非数の場合に割り込みが
発生しないことを前提とする。無限大などでは割り込み発生させても OK。
0705694
NGNG丁寧なレスをどうもありがとうございます.
> -fno-trapping-math
> -fno-signaling-nans
これ,UNIXだとシグナルで通知されるんですよね.たぶん.SIGFPEだと思い,
#include <iostream>
#include <signal.h>
using namespace std;
void func (int number) {cout << "SIGFPE occured " << number << endl;}
int main ()
{
if (signal (SIGFPE, func) == SIG_ERR) exit (1);
double d0 (0), d1 (0);
cout << (d0 / d1) << endl;
for (;;)
pause ();
return 0;
}
ってなコードを書いてみましたがfuncが呼ばれません.
まぁ,いずれにしても事前に割り込みハンドラを登録したプログラムでない限り,
-fno-trapping-mathの有無で動作が変わることはないということですよね.
> -ffinit-math-only
> 演算結果が非数や無限大にならないことを前提にして最適化を行う。
これがまだ分かりません.
結果が変わってくるような例ってないですか?
0707デフォルトの名無しさん
NGNG> まぁ,いずれにしても事前に割り込みハンドラを登録したプログラムでない限り,
> -fno-trapping-mathの有無で動作が変わることはないということですよね.
確か OS によりけりだった気がするけど、694 の環境ではその理解で問題ない
かと。あとシグナルハンドラ中で呼べる関数には厳しい制約があるので、stream
とか操作すると不味いです。念のため。
> 結果が変わってくるような例ってないですか?
b = a + 1.0 - 1.0;
a が極めて大きな数の場合 a + 1.0 の段階で +Inf になってしまい、
結果的に b = Inf ( != a) ってケースがありえる。無限大にならない
と仮定すれば a = b; と最適化しちゃって OK。
0708675
NGNG環境が構築できました。ありがとうございました。
どうやらcollect2問題はMinGWで配布されている3.4系には
パッチがあたっているようです。
その他にも色々問題はありましたが、基本的にMinGWの
メーリングリストとgoogleで解決しました。
bisonやflex、gettextやlibiconvといったものは、
http://sourceforge.net/project/showfiles.php?group_id=23617
からダウンロードしました。
(これらをインストールするときはインストール先のパスにスペースが
入っていると駄目なのにはまりましたが)
0709694
NGNG>>704
> IEEE 754 では、演算結果が非数 (0/0 とかの場合) や無限大など「ふつー
> じゃない数」になった場合に割り込みを発生させ、事前に登録した割り込み
> ハンドラに制御を移すことが可能になっている。
環境依存の話になってくるかも知れませんが(もし,他に適切なスレがあれば誘導をお願いします.),
このような数学的例外が起こった場合に実行する割り込みハンドラって
どうやって登録するのでしょうか? ご存知の方いらっしゃいますでしょうか?
ぐぐってみたらmatherrってのがそれっぽい感じがするのですが,使い方が分かりません.
0710デフォルトの名無しさん
NGNGC99 floating point rounding and exception handling
0711694
NGNG> b = a + 1.0 - 1.0;
> a が極めて大きな数の場合 a + 1.0 の段階で +Inf になってしまい、
> 結果的に b = Inf ( != a) ってケースがありえる。無限大にならない
> と仮定すれば a = b; と最適化しちゃって OK。
ん〜,どんな類の最適化が起こりうるか,雰囲気は伝わってきたんですが,この例ですと,
「a が極めて大きな数の場合 a + 1.0 の段階で +Inf になってしまい」
これがそもそも「無限大にならないと仮定」するしないに関わらず,
浮動小数点数では起こり得ないのではないでしょうか?
aが極めて大きな数の場合に,a+1.0は丸められてしまうので上記仮定に関わらず常にb != Inf ( == a)
になると思います.試しに,以下のようなものを書きました.冒頭のoutput_as_bitsはビットダンプする関数です.
#include <iostream>
#include <bitset>
template <class T> std::ostream & output_as_bits (std::ostream &p_os, const T &p, bool ascending_order = true) {
bitset <sizeof (T) * 8> p_bit; const char *pp (reinterpret_cast <const char *> (&p)); char byte_digit (1);
for (size_t i (0); i < p_bit.size (); ++ i) {
p_bit.set (i, static_cast <bool> (*pp & byte_digit));
if ((i + 1) % 8) byte_digit <<= 1;
else {byte_digit = 1; ++ pp;}
}
if (ascending_order) {
p_os << "L"; size_t i (0);
while (i != p_bit.size ()) {p_os << p_bit.test (i); ++ i;} p_os << "H";
} else {
p_os << "H"; size_t i (p_bit.size ());
do {-- i; p_os << p_bit.test (i);} while (i != 0); p_os << "L";
}
return p_os;
}
(続く)
0712694
NGNGint main () {
double d0 (1);
while (true) {
d0 *= 2; if (d0 == (d0 + 1)) break;
}
output_as_bits (std::cout, d0) << " " << d0 << std::endl;
output_as_bits (std::cout, d0 + 1) << " " << (d0 + 1) << std::endl;
return 0;
}
結果:
L0000000000000000000000000000000000000000000000000000111111000010H 1.84467e+19
L0000000000000000000000000000000000000000000000000000111111000010H 1.84467e+19
0713デフォルトの名無しさん
NGNG確かに。+1.0 ではなく + FLT_MAX / 2 ぐらいにしたほうが現実的だったかも。
0714694
NGNG$ cat test.cpp
#include <iostream>
#include <bitset>
#include <cmath>
using namespace std;
typedef double Type;
template <class T> std::ostream & output_as_bits (std::ostream &p_os, const T &p, bool ascending_order = true);
const Type limit (numeric_limits <Type>::max ());
const Type half_of_limit (limit / 2);
template <typename T> T func1 (T p) {return p + half_of_limit;}
template <typename T> T func2 (T p) {return p + half_of_limit - half_of_limit;}
int main () {
Type d0 (limit); Type d1 (func1 (d0)); Type d2 (func2 (d0));
output_as_bits (cout, d0) << " " << isinf (d0) << " " << d0 << endl;
output_as_bits (cout, d1) << " " << isinf (d1) << " " << d1 << endl;
output_as_bits (cout, d2) << " " << isinf (d2) << " " << d2 << endl;
return 0;
}
$ g++ -O2 test.cpp; ./a.out
L1111111111111111111111111111111111111111111111111111011111111110H 0 1.79769e+308
L0000000000000000000000000000000000000000000000000000111111111110H 1 inf
L1111111111111111111111111111111111111111111111111111011111111110H 0 1.79769e+308
$ g++ -O2 -ffinite-math-only test.cpp; ./a.out
L1111111111111111111111111111111111111111111111111111011111111110H 0 1.79769e+308
L0000000000000000000000000000000000000000000000000000111111111110H 1 inf
L1111111111111111111111111111111111111111111111111111011111111110H 0 1.79769e+308
う〜む.同じだ.最初の実行結果の3行目がinfであって欲しいんですが.
>>710
ありがとう御座います.学ぶ足掛かりができました.
0715デフォルトの名無しさん
NGNGx87 だと FPU は 80bit あるののに double は 64bit だから、マジメに
計算しても FPU 内部ではオーバーフローしないような気がする。
FPU を 64bit モードにするか拡張精度浮動小数点数 (long double)
で試してみては?
あと gcc はマニュアルに書いてあることが完全に実装できてないことも
あるので、これで動作に疑問があるようなら gcc のソースを読んだ方が
良いかも。
0716694
NGNG> 拡張精度浮動小数点数 (long double)で試してみては?
714の冒頭のtypedef double Typeをtypedef long double Typeにしてやってみました.
$ g++ -O2 test.cpp; ./a.out
L111111111111111111111111111111111111111111111111111111111111111101111111111111100000000000000000H 0 1.18973e+4932
L000000000000000000000000000000000000000000000000000000000000000111111111111111101111111111111101H 1 inf
L000000000000000000000000000000000000000000000000000000000000000111111111111111101111111111111101H 1 inf
$ g++ -O2 -ffinite-math-only test.cpp; ./a.out
L111111111111111111111111111111111111111111111111111111111111111101111111111111100000000000000000H 0 1.18973e+4932
L000000000000000000000000000000000000000000000000000000000000000111111111111111101111111111111101H 1 inf
L000000000000000000000000000000000000000000000000000000000000000111111111111111101111111111111101H 1 inf
今度は,両方とも溢れちゃいました.
どうやらこの例では-ffinite-math-onlyによる,演算順序の変更は行なわないようです.
まぁ,でも-ffinite-math-onlyが何をする可能性があるかは理解できました.ありがとう御座いました.
(良い例が思い付いたらお教え下さいね.)
> これで動作に疑問があるようなら gcc のソースを読んだ方が
> 良いかも。
そうですね.
0717デフォルトの名無しさん
NGNG0718デフォルトの名無しさん
NGNG0719デフォルトの名無しさん
NGNG0720デフォルトの名無しさん
NGNGcmovとかは使うだろうけど
0721デフォルトの名無しさん
NGNG0722デフォルトの名無しさん
NGNGどちらが正しいのですか?
0723デフォルトの名無しさん
NGNG0724デフォルトの名無しさん
NGNGgcc/config/i386/i386.c
{"pentium4", PROCESSOR_PENTIUM4, PTA_SSE | PTA_SSE2 |
PTA_MMX | PTA_PREFETCH_SSE},
バージョンによっては違うかもしれないので
ttp://gcc.gnu.org/cvs.html
で確認してみては?
0725719
NGNGなるほど、ソースコード読んでみるという手がもっとも確実ですね。
ありがとうございます。
0726デフォルトの名無しさん
NGNG0727デフォルトの名無しさん
NGNG0728デフォルトの名無しさん
NGNG0729デフォルトの名無しさん
NGNG0730デフォルトの名無しさん
NGNG0731デフォルトの名無しさん
NGNG0732デフォルトの名無しさん
NGNGc:\cygwin\bin\g++ ../test.cpp
(c:\cygwin\bin\g++ ..\test.cpp)
(c:\cygwin\bin\g++ ..\\test.cpp)
としても
cc1plus: ../test.cpp Not Such File or Directory
とでてコンパイルできないのですが、何がいけないのでしょうか?
以前はこれでできていたはずなのですが...。
0734732
NGNG動きました。
実行しているディレクトリ名に日本語が含まれていたのが
原因だったみたいです。
0735デフォルトの名無しさん
NGNG今の最新版だとそうなる。1.5.9-1までならOK。
0736735
NGNG0738デフォルトの名無しさん
NGNGその配列を参照する場合には、まずそのファイル中で配列をextern宣言しますよね。
このとき、extern struct foo[3]と配列の個数を明示してやらないと、
参照した時点でSIGSEGVを食らいます。(少なくともgcc-3.2.2の場合)
単にextern struct *fooでも良いと思ってたんですが、これってgcc-3.2.2のバグ
ですか、それともCの仕様ですか? 少なくともextern struct *fooでもコンパイル
オプションに-Wallとか付けても問題なく通ります。
0739デフォルトの名無しさん
NGNG0740デフォルトの名無しさん
NGNGextern struct foo[]としても、SIGSEGVを食らう。
なぜ、構造体のアドレスが正常に渡されないかが問題なのだ。
例えば、配列中の構造体の大きさが、実際に宣言されるまで不定で
あるような場合(構造体内部にchar *のような文字列のポインタを含む場合)、
コンパイラは間違ったポインタを渡してしまう可能性が考えられる、
とかそういうふうな答えを期待した。
0741デフォルトの名無しさん
NGNG0742デフォルトの名無しさん
NGNG0743デフォルトの名無しさん
NGNG煽るんなら、アンカーぐらいちゃんとしないと、自分で自分が「頭の悪い脊髄反射」とカミングアウトしてることになってるぞ。(藁
それはそれとして、
extern struct foo[3];
extern struct *foo;
extern struct foo[];
でコンパイルエラーにならない、GCC のバージョンを教えてくれ。
手元の、2.95.4 は全部シンタックスエラーにしやがるからな。(藁
0744デフォルトの名無しさん
NGNGgcc-3.2.2と書いてあるが…。
0745sage
NGNG君も配列とポインタ変数を混同していないかい?
0746デフォルトの名無しさん
NGNGそれを知っていれば、配列とポインタ変数をどうこうなんてレスは返さないと思われ。
例えばfoo[2].bar.len++とすると、関係ないメモリをインクリメントしようとしていた
事がある。これをfoo[2].bar.len += 1と書くとなぜか回避できた。
答えられないなら、黙ってていいよ。
0747デフォルトの名無しさん
NGNGこりゃ失礼。
って言うか、そういう問題じゃないんだけどね。
>>745
そういう問題じゃなくて、一体 foo の型って何 ? って言う話なんだけどな。
(わざわざ「シンタックスエラー」とまで書いてあるのにわからんかな...。)
>>746
そういう個別のバグ ? の話までするんであれば、問題のソースと -S の結果を貼った方が早いと思うが。
0748デフォルトの名無しさん
NGNGはぁ?
配列を外部参照しにいくにもかかわらず、extern struct *fooと
書いてることが問題であって、アドレス計算は関係ないと思うのだが?
0749デフォルトの名無しさん
NGNG「答えられないなら、黙ってていいよ」
こんな台詞吐くやつは大概厨房と決まってるんだがな。
GCCのアドレシングのバグなぞを持ち出してきているが、それ以前の問題だ。
char c_ary[10] の型は char* ではないということだよ。
0750デフォルトの名無しさん
NGNG-- c.h --
typedef struct {
int len;
char *str;
} lascii;
-- sample1.c --
#include "c.h"
lascii foo[3] = {
{3, "abc"},
{4, "defg"},
{5, "hijkl"}
};
extern int hoge();
main()
{
hoge();
}
-- sample2.c --
#include "c.h"
extern lascii foo[]; // ここでfoo[3]とすれば無問題
int hoge()
{
printf("%s\n", foo[2].str);
}
0751デフォルトの名無しさん
NGNG宣言することは無理もない事だけど、ある程度のメモリ容量が必要だったり
構造体の大きさがまちまちならば、ポインタで宣言しておいて、malloc()で
メモリを割り当てるだろうな。
0752デフォルトの名無しさん
NGNG少なくとも、そのソースは 2.95.4 なら問題はない。
他のまともなコンパイラでも問題はないはず。
お前の使ってるバージョン固有の問題、もしくはお前の環境の問題と思う。
もしこのソースでエラーになるなら、sample2.c の -S の結果を貼ってくれ。
>>751
> ある程度のメモリ容量が必要だったり
何が言いたいのかよくわからん。
日記なら、ご自分の日記帳にでも書いておけよ。
0753デフォルトの名無しさん
NGNG割り当てるでしょうな。
「ポインタと配列は違…」とか叫ばれてもね。そんなことは聞いてないし、言わ
なくていい。それは今問題にしてない。問題かもしれないが。
構造体の配列をextern宣言する時に配列数を含めておかないと正しい参照が
出来ないのはどういうことなのか、を気にしているの。
コンパイル時にアドレスが不定で決定できないならば、エラーなりワーニングを
出せば済む事なのだが、-Wallなどを付けても問題なく通る。
0754デフォルトの名無しさん
NGNG>>751のソースは問題ない。それで動かないならコンパイラのバグ。
* fooで動かないのは当り前。それで動くと思うのはおまえの頭のバグ。
0755デフォルトの名無しさん
NGNG> コンパイル時にアドレスが不定で決定できないならば、エラーなりワーニングを
> 出せば済む事なのだが
リンク時の話だからコンパイラには何もできないでしょ。
0756デフォルトの名無しさん
NGNGなんでもいいが、>>753はそろそろ黙っとけ。
0757デフォルトの名無しさん
NGNG>>738
> 単にextern struct *fooでも良いと思ってたんですが、
配列の不完全型を理解してないんでしょうね。
0758デフォルトの名無しさん
NGNG0759デフォルトの名無しさん
NGNG0760デフォルトの名無しさん
NGNGなぜ?
「ワーニング」ではなくて何と呼ぶんだ?
まさかとは思うが「ウォーニング」とか言うなよ。
0761デフォルトの名無しさん
NGNG0763デフォルトの名無しさん
NGNG0764デフォルトの名無しさん
NGNG0765デフォルトの名無しさん
NGNG0766デフォルトの名無しさん
NGNG0767デフォルトの名無しさん
NGNG>アハーンヽ(`Д´)ノping
ムシロ意味がわからん。
0768デフォルトの名無しさん
NGNG0769デフォルトの名無しさん
NGNGclispというパッケージをコンパイルしていて以下のようなエラーが出ました。
gcc -W -Wswitch -Wcomment -Wpointer-arith -Wimplicit -Wreturn-type -Wno-sign-compare -O2 -fexpensive-optimizations -DUNICODE -DDYNAMIC_FFI -I. -I../../ -c linux.c
linux.c: In function `module__linux__init_function_2':
linux.c:434: error: `sigpause' undeclared (first use in this function)
linux.c:434: error: (Each undeclared identifier is reported only once
linux.c:434: error: for each function it appears in.)
make[1]: *** [linux.o] Error 1
ここで疑問なのですが、Makefileからコンパイラへ渡される変数の一覧は
どのように探したらいいのでしょうか?-DXXXというオプションがここでは
二つほど渡されていますが、他にどのような値があるのか知りたいと思います。
0770デフォルトの名無しさん
NGNGプププ...Makefileから渡される変数など存在しない
0771デフォルトの名無しさん
NGNG0772GentooLinux glibc-2.3.4です。
NGNG#include <signal.h>
・・・
void module__linux__init_function_2 (module_t* module)
{
・・・
register_foreign_function((void*)&sigpause,"sigpause",1024);
つまりLibcの関数をあるテーブルに登録してると思われる処理です。
またclispのパッケージにはsignal.hというファイルは存在していません。
0773デフォルトの名無しさん
NGNGここにコピペした場所以外にはsigpauseは記されていません。
/* The `sigpause' function has two different interfaces. The original
BSD definition defines the argument as a mask of the signal, while
the more modern interface in X/Open defines it as the signal
number. We go with the BSD version unless the user explicitly
selects the X/Open version.
This function is a cancellation point and therefore not marked with
__THROW. */
extern int __sigpause (int __sig_or_mask, int __is_sig);
#ifdef __FAVOR_BSD
/* Set the mask of blocked signals to MASK,
wait for a signal to arrive, and then restore the mask. */
extern int sigpause (int __mask) __THROW;
# define sigpause(mask) __sigpause ((mask), 0)
#else
# ifdef __USE_XOPEN
# ifdef __GNUC__
extern int sigpause (int __sig) __asm__ ("__xpg_sigpause");
# else
/* Remove a signal from the signal mask and suspend the process. */
# define sigpause(sig) __sigpause ((sig), 1)
# endif
# endif
#endif
ここで__FAVOR_BSD=FALSE,__USE_XOPEN=FALSEだったらエラーになりますよね。
0774デフォルトの名無しさん
NGNG770が言うように-Eしてみたら手掛かりになるのでは?
0775デフォルトの名無しさん
NGNGこれってGlibc,GCCの環境設定,clispのどれが悪いと思われますか?
glibc-2.3.4,gcc-3.4とあたらしめのものなので、バグがあるのは当然です。
$gcc -E -I. -I../../ linux.cをしてみました。
sigpauseが含まれているのは以下の箇所だけ。
extern void psignal (int __sig, __const char *__s);
# 149 "/usr/include/signal.h" 3 4
extern int __sigpause (int __sig_or_mask, int __is_sig);
# 178 "/usr/include/signal.h" 3 4
extern int sigblock (int __mask) ;
register_foreign_function((void*)&sigpause,"sigpause",1024);
となると、上の/usr/include/signal.hと比べれば、やはりGlibcがおかしいっぽいですね。
0776デフォルトの名無しさん
NGNGMakefile (or configure) が悪い、ってことになるかね。
なんにしても、gcc はまるで関係ない。
0778デフォルトの名無しさん
NGNGもしも、君の書き込みが
『ほら、やっぱりウォーニングじゃん!』
という意図ならば、相当痛いぞ。
0779デフォルトの名無しさん
NGNG__FAVOR_BSD,__USE_XOPEN,__GNUC__は一つもなし。通常はこれらの値は
Glibcでは/usr/include/features.hにてシステムの値として設定されるようです。
で/usr/include/features.hの該当箇所を見ると、以下のようになっています。
/* These are defined by the user (or the compiler)
to specify the desired environment:
__STRICT_ANSI__ISO Standard C.
_ISOC99_SOURCEExtensions to ISO C89 from ISO C99.
_POSIX_SOURCEIEEE Std 1003.1.
_POSIX_C_SOURCEIf ==1, like _POSIX_SOURCE; if >=2 add IEEE Std 1003.2;
if >=199309L, add IEEE Std 1003.1b-1993;
if >=199506L, add IEEE Std 1003.1c-1995
_XOPEN_SOURCEIncludes POSIX and XPG things. Set to 500 if
Single Unix conformance is wanted, to 600 for the
upcoming sixth revision.
_XOPEN_SOURCE_EXTENDED XPG things and X/Open Unix extensions.
・・・
_BSD_SOURCEISO C, POSIX, and 4.3BSD things.
・・・
多分エラーの原因はclispのMakefileにて、glibc-2.3.4用に上記の値のBSD関連、
もしくはXOPEN関連のどちらかを設定する必要があるということだろうと思います。
質問はこれからです。"(or the compiler)"とあるコンパイラの設定とはGCCの
場合はどこを見ればいいのでしょうか?specsには
%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}
という1行だけが含まれていましたが、他にもどこかにあるのでしょうか?
0780デフォルトの名無しさん
NGNGgcc-3.3.3のspecsには以下のようなものも含まれていましたが、
%{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3}
自分のところの3.4にはこれすらなくなっていました。
0781デフォルトの名無しさん
NGNG森へお帰り
0782デフォルトの名無しさん
NGNG0783デフォルトの名無しさん
NGNGThese are defined by the user
お前は盲目か?ベンダ依存の制御マクロだろこれ
文句があるなら、GCCじゃなくてディストリビューターに言え
0784デフォルトの名無しさん
NGNG正直どっちでもいいの
日本人じゃちゃんと発音できないから
0785デフォルトの名無しさん
NGNGwarpをウォープとかwarrantyをウォーランティとか言う奴はアホ。
0786デフォルトの名無しさん
NGNGけ い こ く
とでも言い直せよヴォケ
日本語の会話中に突然 warning って発音の単語が出てきたらふつー引くだろ?
0787アルロビュー ポッキュ ヤングギゴッポム!!!
NGNG「マクドナルドは」「メッドゥネルドゥ」じゃないから
チォックバリドル英語下手ニダとかほざく連中と変わらんて
virus を「ヴァィラス」に近い発音されてきちっと理解できる奴どれくらいいるんだ?
しかも日本語の会話の文脈で
0788デフォルトの名無しさん
NGNG0789759
NGNG0790デフォルトの名無しさん
NGNG3.4では__GNUC__等はgcc内部で定義されてるよ。
よくわからんが
linux.cの先頭で
#define __USE_XOPEN
とすれば、エラーは無くなるんじゃない。
0791デフォルトの名無しさん
NGNGそれよりも、gccのオプションを1つでも覚えれば。
0792デフォルトの名無しさん
NGNG0793デフォルトの名無しさん
NGNG先生!通ったんで、もう帰っていいですか?
0794デフォルトの名無しさん
NGNGキャストの嵐かよ!!!
0795デフォルトの名無しさん
NGNG>キャストの嵐かよ!!!
ちがうよ。人聞きが悪いこと言うなぁ。
もともとのコードが良いからさ。
0796デフォルトの名無しさん
NGNGlinux.cにて
#define __USE_XOPEN 1
#include <signal.h>
としてみましたが、なぜか>>769と同じエラーが出ます。
/usr/include/*とclispのパッケージ全てのソースにおいて#undef __USE_XOPEN
しているところを探しても、features.hにて行われているのみ。
いろいろ試してみた結果、
$gcc -D_GNU_SOURCE -I. -I../../ -c linux.c
と_GNU_SOURCEをつけた時だけコンパイル成功。謎です。
この時はソース中に__USE_XOPENを付ける必要すらなし。
もう少し時間をかけてなぜ上手くいかないのか調べてみたいと思います。
/usr/includeの下をあれこれ眺めていましたが、Libcは難しいです。
開発者の頭の中にあるUNIXに関する知識に驚くばかりです。
ただし、BSDのそれはもう少しシンプルだったようにも思います。
__GNUC__などのプリプロセッサ用の値はgcc/c-cppbuiltin.cの、
define__GNUC__という関数にてgcc/version.cの値をそのままに設定していました。
3.3まであったno-gccなるオプションは3.4にてなくなったようです。
スレ違いらしいので、これにて終りにさせて頂きます。
0797デフォルトの名無しさん
NGNG答えられないなら黙ってりゃいいのに。一生ビルドだけしてろ。
0798デフォルトの名無しさん
NGNG0800デフォルトの名無しさん
NGNG0801デフォルトの名無しさん
NGNGgcc -v --help
0802デフォルトの名無しさん
NGNGwarming upをワーミング・アップとかStar Warsをスター・ワーズとか言う奴はアホ。
0803デフォルトの名無しさん
NGNGクロスコンパイラビルドしてみたんだけど、ブートストラップのcrti.oを作ってくれないよ!
crtbegin.oとかは作ってくれるのに、何故ぇ??
0804デフォルトの名無しさん
NGNGクロスで、とくにカナディアンで、ライブラリ作るの、
けっこうノウハウいるから苦労するよ。
俺なんて、cc1 とかのコンパイル成功した時点で、それ使っちゃうからな(w
0806デフォルトの名無しさん
NGNGじゃ、無いってことだろ。あきらめたら。
0807デフォルトの名無しさん
NGNGソースとアセンブラ(もしくは他の内部的な中間コード)の
リストあったら見やすくない?
0808デフォルトの名無しさん
NGNGgdbでデバッグしている。といいたいところだけど。
制御系だとターゲットが常に手元にあるわけではないし
問題が発生しても、エンドユーザの環境でデバッグするわけにもいかない。
そこで例外発生時のバックトレース情報
(例外が発生したアドレスと、その呼び出し元のアドレスの一覧)
から調査を始めるわけなんだけど
ldの吐き出したマップファイルからアドレスと関数の対応はわかるものの
ソースのどの行かまではわからないんだよね。
アセンブリリストは -S で出るから、そのリストを見て、おそらくこの行だろう
と推測するしかないという状況。
外部ツールでもいいから、ソースとアセンブリの混合リストを吐く方法は無いだろうか?
デバッグ情報付きのオブジェクトから作れそうなものだけど。
0809デフォルトの名無しさん
NGNG連中にもワーニングって言って通じたよ
「ウォー」より「ウヮー」って発音だったけどね
0810デフォルトの名無しさん
NGNG0811デフォルトの名無しさん
NGNG0812デフォルトの名無しさん
NGNGobjdump にそういう機能がある。
--source
Display source code intermixed with disassembly, if possible.
Implies -d.
0813デフォルトの名無しさん
NGNGありがとうございます。
objdumpとは、言われて見ればああなるほど。
これで仕事が進みます。
0814デフォルトの名無しさん
NGNG>これで仕事が進みます。
それが、2chサーチエンジン。まれに嘘を吹き込まれるが。(藁
0815デフォルトの名無しさん
NGNGCygwinで日本語PATH問題は、Win板のこちらへ。
http://pc5.2ch.net/test/read.cgi/win/1052361218/933-940
もとはUNIX板のCygwinスレで出てきた話だけど、まとまってないし、dat落ち中だし。
0816デフォルトの名無しさん
NGNGと表示してくれるのを期待したのに、piyoが表示されてしまいました。
これってANSI的にはどうなのよ?
$ gcc --version
gcc (GCC) 3.3.1 (cygming special)
Copyright(略)
$ cat hoge.c
#include <stdio.h>
int main(int argc, char **argv) {
printf("hoge\n");
return 0;
}
static void puts(void) {
printf("piyo");
}
$ gcc -ansi -pedantic -Wall -O -o hoge hoge.c
hoge.c:6: warning: `puts' defined but not used
$ ./hoge
piyo$
0817デフォルトの名無しさん
NGNG0818デフォルトの名無しさん
NGNGgcc (GCC) 3.4.0 20040601 (Gentoo Linux 3.4.0-r6, ssp-3.4-2, pie-8.7.6.3)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$gcc -ansi -pedantic -Wall -O hoge.c
fo.c:6: error: conflicting types for 'puts'
fo.c:6: error: conflicting types for 'puts'
fo.c:6: warning: 'puts' defined but not used
でした。
0819デフォルトの名無しさん
NGNG0820デフォルトの名無しさん
NGNGpushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
call __alloca
call ___main
movl $LC0, (%esp)
call _puts
movl $0, %eax
movl %ebp, %esp
popl %ebp
ret
なんでここで_putsが出てくるのかな。漏れも知りたいです。
0821デフォルトの名無しさん
NGNG0822デフォルトの名無しさん
NGNGGCCの最適化処理が、不変な文字列出力であった場合、
puts等に置き換えるがその影響かも。
これは、既知の問題なのか?
まぁ、通常こんな書き方するやついないが。
0823デフォルトの名無しさん
NGNGANSIはしらんが、最新のJIS C(=ISO C)ではライブラリの識別子は予約とされていて、
同じ識別子を使うと未定義となる。C89でも同じだと思う。
だからこの動作でもOK。
JIS X 3010 2003(ISO/IEC 9899: 1999) 126ページ 7.1.3 予約済み識別子
0824デフォルトの名無しさん
NGNGしかしJISCのサイトはなんでアイコンがネットスケープなのかな?
0825デフォルトの名無しさん
NGNG>しかしJISCのサイトはなんでアイコンがネットスケープなのかな?
ワロタ
鯖は、Solarisだがな。
0826デフォルトの名無しさん
NGNGこの問題を回避する方法ってあるのでしょうか?
hoge.c:28: warning: conflicting types for built-in function `putchar'
gcc version 3.3.3です。
0827デフォルトの名無しさん
NGNG0828デフォルトの名無しさん
NGNG1. 自作putcharの名前を変える.
2. built-inのputcharが宣言してあるheaderを読み込まない.
3. c++にして名前空間を利用する.
くらいでしょうか.
0829デフォルトの名無しさん
NGNG0830デフォルトの名無しさん
NGNG7.1.3 予約済み識別子 だけだと、
ライブラリの extern な識別子は、extern な識別子として使うのは予約済みだけど、
>>816みたいに、static な識別子として使うのは予約されてない。
けど、6.2.2 識別子の結合 で、
翻訳単位の中で同じ識別子が内部結合と外部結合の両方で現れた場合、その動作は未定義とする
となっているので、動作は未定義になる。
という理解であってる?
>>820
最適化すると、printf("hoge\n"); が puts("hoge"); に置き換えられたり、
printf("%s\n", s); が puts(s); に置き換えられたりするみたい。
(ただし、返却値を使ってない場合)
0831デフォルトの名無しさん
NGNGprintf が最適化で puts に置き換えられるのは、
ちょっと余計なお世話なような気はするけど、通常は問題なさそうなので許すとして、
int puts(const char *);
static void puts(void) {}
が、型が違うぞゴルァと言われずにコンパイルできてしまうのは、ちょっと気持ち悪いかな。
0832デフォルトの名無しさん
NGNG0834デフォルトの名無しさん
NGNGオプションってありますか?C++です。
void foo(void) {
static int bar = baz(); // ここ
return ++bar;
}
0835デフォルトの名無しさん
NGNG0836デフォルトの名無しさん
NGNG0837デフォルトの名無しさん
NGNG> 排他制御しろ。
チーム全体に周知するのが困難で。
>>836
局所変数だからmainの前には初期化されまへんね。ゼロクリアは保証されてるけど。
0838デフォルトの名無しさん
NGNGとすると、何が変わるの?
0839834
NGNG0840デフォルトの名無しさん
NGNGTLSあたりでぐぐってみる。
0841デフォルトの名無しさん
NGNG>とおもったがやっぱり排他制御しますー。
それが一番無難だ。
0842デフォルトの名無しさん
NGNG> チーム全体に周知するのが困難で。
intだからbaz()の中で排他制御するのがいいんじゃない?
Atomicでないdata typeだと代入を排他する必要があるけども。
ってスレ違いですかね。
>>838
http://developer.apple.com/documentation/DeveloperTools/gcc-3.3/gcc/C99-Thread-Local-Edits.html#C99%20Thread-Local%20Edits
それからgccのinfoの"Thread-Local"の項
0843デフォルトの名無しさん
NGNGhttp://developer.apple.com/documentation/DeveloperTools/gcc-3.3/gcc/Thread-Local.html
0845デフォルトの名無しさん
NGNG>動的初期化はできないですよん
起動時に一度だけ初期化したいってことか?
なら、フラグを持って排他制御だな。
0846デフォルトの名無しさん
NGNGなんだか凄く危険な予感がするんだが。
0847デフォルトの名無しさん
NGNG人のことなんてしったことではありません
0848デフォルトの名無しさん
NGNG0849デフォルトの名無しさん
NGNGJISの用語だろうなJISX3014の3.4.2とか見てみれ。
0850デフォルトの名無しさん
NGNGファイルサイズが結構でかくなったんだけど、
これは仕様ですか?
0851デフォルトの名無しさん
NGNGstripした?
0852デフォルトの名無しさん
NGNGは?ストリップ?
0853デフォルトの名無しさん
NGNG-Osでコンパイルして、stripしたら、70KBくらい減った。
ありがとー
0854デフォルトの名無しさん
NGNG0855デフォルトの名無しさん
NGNG0857デフォルトの名無しさん
NGNG>>852 は多分成りすまし。
ID 無い板でよく行われる。
0858デフォルトの名無しさん
NGNGいったいどうなるんですか?
struct hoge;
0859デフォルトの名無しさん
NGNGいったいどうなるんですか?
class hoge;
0860デフォルトの名無しさん
NGNG__attribute__((noderef, hogehoge(1)))
0861デフォルトの名無しさん
NGNGgccさんが、(´・∀・`) ヘェーって思う。
>>859
g++さんが、(´・∀・`) ヘェーって思う。
0862デフォルトの名無しさん
NGNGこれ見ても載ってないね。noderefってなんだろう。
0863デフォルトの名無しさん
NGNG糞ワロタ
0864デフォルトの名無しさん
NGNGgccのバージョンとターゲットは何?
3.3.2のソースを眺めでみたが、見当たらん。
0865デフォルトの名無しさん
NGNGC++だと時々使うよ、Cでも通るんだな struct hoge は初めてだ
後でちゃんとしたの宣言するから、とりあえず通せって考えてるけど
実際どうなんしょ?
0866デフォルトの名無しさん
NGNG何のメリットがあるんだろう..
0867デフォルトの名無しさん
NGNGstruct foo;
struct bar {
struct foo *p;
};
struct foo {
struct bar *p;
};
0868デフォルトの名無しさん
NGNGstruct __foo * p;
};
というのもある意味前方参照?
0869デフォルトの名無しさん
NGNG2パス通せばいいと思うんだが。
コンパイル高速化の為?
0870デフォルトの名無しさん
NGNGそれもあるが、実態を隠したいわゆる ADT (抽象データ型) を実装する
ためにも使う。
0871デフォルトの名無しさん
NGNG>それもあるが、実態を隠したいわゆる ADT (抽象データ型) を実装する
>ためにも使う。
なるほ。
0872デフォルトの名無しさん
NGNGこういうのは不完全型という。
0873デフォルトの名無しさん
NGNGclass foo {}; //class body
と、C++では言います
0874デフォルトの名無しさん
NGNG聞いたことねーな。誰が言ってるの?
0875デフォルトの名無しさん
NGNGlippman
0876デフォルトの名無しさん
NGNG"class header"というと、ほとんどが「クラス定義を含むヘッダファイル」を指して言うみたいなんだが、
その意味で使われている例をWeb上の文書で示せるか?
0877デフォルトの名無しさん
NGNGC++Primerに載ってただけ。便利だから俺はよく使ってる。
0878デフォルトの名無しさん
NGNG全然違う意味だった。逝って来る。
0879デフォルトの名無しさん
NGNGたぶん一般的じゃないからやめたほうがいいと思う。
>876のような意味に勘違いされる可能性が高い。
関数の場合を考えると、
void foo(); // 関数宣言
void foo() {} // 関数定義
この使い分けは一般的だから、
class foo; // クラス宣言
class foo {}; // クラス定義
こう使い分けるのがすっきりしてるかも知れない。
ただ、「クラス宣言」が「クラス定義」の意味で使用されることが多いので、
これも誤解を生まないわけではない。
現状で最も誤解が少ないのは、
class foo; // クラスの前方宣言(forward declaration)
class foo {}; // クラス定義
と使い分けることだろう。
0880デフォルトの名無しさん
NGNGclass CLASS //この部分がclass head
{
//この部分がclass body
...
ということ。汗かいちゃった。
0881デフォルトの名無しさん
NGNGttp://lists.gnu.org/archive/html/tinycc-devel/2003-04/msg00094.html
0882デフォルトの名無しさん
NGNG> この使い分けは一般的だから、
一般的というか、規格書で使ってる用語そのまま。
0883デフォルトの名無しさん
NGNGああ、NO DEREFerenceなのか。
0884デフォルトの名無しさん
NGNG・address_space(N)データへのポインタは、同じaddress_spaceへのポインタと型が互換になり、そうでなければ警告を出す。
ってこと?
なんだかよくわからんが。
0885デフォルトの名無しさん
NGNG逆でしょ。
dereferenceしようとすると警告になるんでしょ。
使い方としては「カーネル空間からユーザ空間にアクセスしようとすると警告」など。
0886デフォルトの名無しさん
NGNGうむ。なるほど。
0887デフォルトの名無しさん
NGNG#pragma pack(1)
#pragma pack()
これってなんすか?
ネットで調べるとpragmaは古い仕様なことがありましたが。
0888デフォルトの名無しさん
NGNGhttp://www1.kcn.ne.jp/~robe/cpphtml/html03/cpp03014.html
0889887
NGNGさんくすです。paddingか。
__attribute__ ((aligned (1), packed))ってことか。
pragmaってよく使用するんですかね。attributeを使えばいいような気もしますが。
0890デフォルトの名無しさん
NGNG文法的にはattributeの方がわかりやすくでいいけど。
0891デフォルトの名無しさん
NGNGコンパイラ非依存にするには#ifdefでごちゃごちゃやってやらないといけないのが面倒。
0892デフォルトの名無しさん
NGNGhttp://www.google.co.jp/search?q=cache:2nsqRSWrClEJ:www1.kcn.ne.jp/~robe/cpphtml/html03/cpp03014.html+pragma+pack+%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%E3%80%80%E4%BE%9D%E5%AD%98&hl=ja&lr=lang_ja
0893デフォルトの名無しさん
NGNG該当するページが見つかりませんでした。
検索のヒント
- キーワードに誤字・脱字がないか確かめてください。
- 違うキーワードを使ってみてください。
- より一般的な言葉を使ってみてください。
- キーワードの数を少なくしてみてください。
0894デフォルトの名無しさん
NGNGなるほど、attributeってGCC依存なのか。知らんかった。Thx
0895デフォルトの名無しさん
NGNGhttp://www.kab-studio.biz/Programing/Dictionary/Words.html#__s__pragma
0896デフォルトの名無しさん
NGNGなんか 2.95.2 のときの停滞がうそのようだ。
0897デフォルトの名無しさん
NGNG前は人手が足りないようなことを言ってけど、
開発メンバが増えたのかな。
0898デフォルトの名無しさん
NGNG0899デフォルトの名無しさん
NGNGChanges, New Features, and Fixes
http://gcc.gnu.org/gcc-3.5/changes.html
0900デフォルトの名無しさん
NGNG-fcaller-saves -fcse-follow-jumps -fcse-skip-blocks
-fdelayed-branch -felide-constructors
-fexpensive-optimizations -ffast-math -ffloat-store
-fforce-addr -fforce-mem -finline-functions
-fkeep-inline-functions -fmemoize-lookups
-fno-default-inline -fno-defer-pop
-fno-function-cse -fno-inline -fno-peephole
-fomit-frame-pointer -frerun-cse-after-loop
-fschedule-insns -fschedule-insns2
-fstrength-reduce -fthread-jumps -funroll-all-loops
-funroll-loops -O -O2 -O3 -Os
0901デフォルトの名無しさん
NGNGコストのかかる最適化?なんか矛盾してるような気がするが。
-fexpensive-optimizations
0902デフォルトの名無しさん
NGNG3.5出たのん?
0903デフォルトの名無しさん
NGNGstrength reduction
0904デフォルトの名無しさん
NGNGコンパイルにコストがかかるってことだろ。
0906デフォルトの名無しさん
NGNGまだ出てない。
>>899は、GCC 3.5を作成するにあたって行われる変更、新機能、修正一覧を知らせてるだけ。
0907デフォルトの名無しさん
NGNG-fexpensive-optimizations
Perform a number of minor optimizations that are
relatively expensive.
意訳すると「時間もメモリも喰うワリに効果の薄い最適化を行う」だ。
gcc-2 の頃からあったような希ガス
0908デフォルトの名無しさん
NGNG希ガスって風俗板方面の用語だっけ?
0909デフォルトの名無しさん
NGNGネストした関数はg++だとコンパイルできません。
0910デフォルトの名無しさん
NGNG-Oはいっぱいあって、-O999あたりまでいける。意味は皆無だと思うが。
0911デフォルトの名無しさん
NGNG昔、某ディストロは「-O99」なんてやってたね。今はどうだか知らないけど。
0912デフォルトの名無しさん
NGNGそういやx86用ならIntelのC++コンパイラはGCC完全互換+ごっつい
プリコンパイラヘッダ対応らしいが、GCCとどう違うんだろう。
0913デフォルトの名無しさん
NGNGどういうところが難アリとお考えで?
0914デフォルトの名無しさん
NGNG「トランポリンコード」って何ですか?
0915デフォルトの名無しさん
NGNGよく聞く ?
俺は初めて聞くが、どうも Linux 関係らしいから、それ以上調べるのはやめた。
0916デフォルトの名無しさん
NGNG0917デフォルトの名無しさん
NGNGLinuxのトラノポリンはスタック領域の移動に使うコード。
シグナルハンドラで使われる。
二つのトランポリンを横移動ってイメージの命名だと思う。
0918デフォルトの名無しさん
NGNGなにかオプションの指定が必要なのでしょうか?
gcc 3.2.3 20030502(Red Hat Linux 3.2.3-20) を使用しています。
0919デフォルトの名無しさん
NGNG0920デフォルトの名無しさん
NGNGいいつっこみだ。
0921デフォルトの名無しさん
NGNGgcc のマニュアルの nested function の項に書いてあるよ。
あとはここにも。
ttp://www.shiro.dreamhost.com/scheme/docs/cont-j.html
0922デフォルトの名無しさん
NGNGgccとは無関係だからLinux板で。
まぁ、gettimeofday()でも使っとけってことで。
0923デフォルトの名無しさん
NGNGint main(){
short a;
int b;
a = b = -1
printf("%d, %d\n", sizeof(a), sizeof(b));
printf("0x%X\n", a);
printf("0x%X\n", b);
return(0);
}
結果が
2, 4
0xFFFF
0xFFFFFFFF
とならずに
2, 4
0xFFFFFFFF
0xFFFFFFFF
になりましたけど。なぜでしょうか?
0924デフォルトの名無しさん
NGNG可変長引数に short 型の変数を渡すときには、暗黙の内に int にキャスト
(格上げ)されるから。
0925デフォルトの名無しさん
NGNG0927デフォルトの名無しさん
NGNG自分もGCCデベロッパに入りたい。けど、技術力がないからだめか。
やはり、コンパイラの勉強しないとだめですか?
0928デフォルトの名無しさん
NGNG0929デフォルトの名無しさん
NGNG0930デフォルトの名無しさん
NGNG技術力以前の問題というか。
0931デフォルトの名無しさん
NGNGttp://loxosceles.org/misc/backgrounds/gnu.jpg
ttp://loxosceles.org/misc/backgrounds/gnu_engraving.jpg
ttp://loxosceles.org/misc/backgrounds/gnu_engraving_black.jpg
ttp://www.c-creators.co.jp/m-kato/kenya2000/img/gnu.jpg
ttp://www.x31.com/~andy/pics/25-06-01-various/01633-gnu-resting.jpg
ttp://heim.ifi.uio.no/~kritisk/reiser/tanzania/gnu.jpg
ttp://www.linuxgazette.com/issue72/misc/alcidi/gnu_bill.jpg
ttp://www.vonegidy.de/Bilder/Gnu.JPG
おまけ−gnuさんの頭領
ttp://internet.watch.impress.co.jp/www/article/981217/gnu.jpg
0932デフォルトの名無しさん
NGNG>技術力以前の問題というか。
その逆もまた真になる。
できる奴は技術力でそれをカバーできると思うし、
相手もできる奴とわかれば意思の疎通も多少はできるはずだが。
0933デフォルトの名無しさん
NGNGコーディングだけならね。パッチ送って採用されたとか
そのレベルでしょ。
0934デフォルトの名無しさん
NGNGそれ以上になにかあるのか?
目的は達成されているような気がするが。
それとも相手の家にでも遊びに行くのか?
0935デフォルトの名無しさん
NGNGどのバージョンでどの機能を入れるか、みたいなプロジェクトの
方針や決定に関われるようなヤシはいないって事でしょ。
もっともそこまでやるなら、それこそRedHatみたいな会社でフル
タイムのhackerとして雇ってもらうとかじゃないと時間的に無理
だろうが。
0936デフォルトの名無しさん
NGNGそれくらいでも、
hogehogeがおかしいので直して見たけど、これどうよ?
てな事をちゃんと説明しないとスルーされるわけですが。
それなりの実績があれば一行説明でもわかってくれるが。
>>934
commit権もらうとか。
0937デフォルトの名無しさん
NGNG>commit権もらうとか。
ワロタ
0938デフォルトの名無しさん
NGNG0939デフォルトの名無しさん
NGNG上々の出来
0940デフォルトの名無しさん
NGNG常にスレッド対応してないのかな??
クロス開発で不自由で。
5.2.1〜6.1までをぽつぽつと試してみたんだけど、info thread(s)で
どれもRMT ERRORとでるか、最初のスレッドの情報が中途半端に
帰ってくるだけで、2つめ以降のスレッドの情報は出てこない。
break置いても止まらないし、あまつさえメインのスレッド止めても
それ以外のスレッドは走りっぱなしなのでデバッグにならん。
gdbserverのバージョン変えても駄目だし、--enable-threads付けて
ビルドしても駄目だし、どうしたものか。
0941デフォルトの名無しさん
NGNG0942デフォルトの名無しさん
NGNGCygwinやMinGW等ではなくて素のOSに入れてもなるのならGDBを疑う。
0943940
NGNG手元のLinuxで同じコードをでビルドした時にはならなかった…。
info threadが何も返さない、RMT ERRORが出る、
最初のスレッドの情報しか返してよこさない、というのは、
GNUのページ見てると、Win環境に留まらず、時々報告されてる
バグ?ではあるみたい。
GDBのスレッド対応はターゲット次第らしいので、仕方ないっちゃあ
仕方ないけど、思ったよりも気にしてる人少ないのかな。
0944940
NGNG手元のLinuxで同じコードをでビルドした時にはならなかった…。
info threadが何も返さない、RMT ERRORが出る、
最初のスレッドの情報しか返してよこさない、というのは、
GNUのページ見てると、Win環境に留まらず、時々報告されてる
バグ?ではあるみたい。
GDBのスレッド対応はターゲット次第らしいので、仕方ないっちゃあ
仕方ないけど、思ったよりも気にしてる人少ないのかな。
0945名無しさん@そうだ選挙に行こう
NGNG-O2
であることがほとんどですが
-O3
にすると問題は多いのでしょうか?
房な私にアドバイスお願いします。
0946名無しさん@そうだ選挙に行こう
NGNG0947名無しさん@そうだ選挙に行こう
NGNG0948名無しさん@そうだ選挙に行こう
NGNGそういう意味で-O3は問題だ。
0950デフォルトの名無しさん
NGNG0951デフォルトの名無しさん
NGNGCygwin で GNU gdb 2003-09-20-cvs (cygwin-special) を使ってますが、
今のところ、マルチスレッドでおかしな現象には出会ったことないですよ。
自分が不自由してるのは、detach が効かないこと。
他のバージョンではどうなんだろう、試したことないけど。
0952デフォルトの名無しさん
NGNG0953デフォルトの名無しさん
NGNGILP64の環境の場合にはuint128_tが必要にならないんだろうか。
0954デフォルトの名無しさん
NGNG基本的には -O* を指定しておけば、必要に応じて
-fstrength-reduce等のオプションが設定されると考えて良いのでしょうか?
要するに -O3等はオプションの総合オプションのように機能しているのでしょうか?
素人な私にアドバイスをお願いします。
0955デフォルトの名無しさん
NGNG0956デフォルトの名無しさん
NGNG0957デフォルトの名無しさん
NGNGすると、
/usr/include/c++/3.4.0/backward/iostream.h
が読み込まれてしまうみたいなんだけど、
/usr/include/g++-3/iostream{,.h}
を使いたい場合はどうしたらいいでしょう?
0958デフォルトの名無しさん
NGNGhttp://gcc.gnu.org/onlinedocs/gcc-3.4.1/gcc/Optimize-Options.html#Optimize%20Options
0959デフォルトの名無しさん
NGNGその認識であってる思います.
最近どっかのスレで見掛けたのだけど,
-vと-Qを同時に指定すると, 実際に有効にされたオプションが表示されるようです.
0960959
NGNG>>954
あなたの言う「総合オプションのような機能」以外のなんらかの最適化を
更に-O*が行なうかどうかを私はよく知りません.
それはソースを当たって下さい.
0961デフォルトの名無しさん
NGNG変わった人…
0963デフォルトの名無しさん
NGNG0964デフォルトの名無しさん
NGNGこの'-lm'で具体的にどこのライブラリを参照するかはどのように指定するのでしょうか?
0965デフォルトの名無しさん
NGNG0966959
NGNGそれには異存ないんですが,
infoの説明では,
-O*にいくつかの-f*をまとめて指定する「総合オプションのような機能」があることは分かりますが,
-O*が,指定した-f*以外にも何らかの最適化を行なうのか,-f*の指定だけなのかちょっと不明だったもので.
読み落してたら御指摘下さい.
0967959
NGNG「渡されたオプション」には-O2が表示されるけど,
「有効オプション」には-O2が表示されないところをみると,
-O*は「総合オプションのような機能」だけなのかも.
0968デフォルトの名無しさん
NGNG$ gcc -O2 -v -Q test.c > o2.txt 2&>1
$ diff o2.txt o3.txt
何もでないよ(^^;
0969デフォルトの名無しさん
NGNGdiff を見るに
-frename-registers
だけ違うように見える。
gcc version 3.3.1 (cygming special)
0970デフォルトの名無しさん
NGNG0971デフォルトの名無しさん
NGNG0972デフォルトの名無しさん
NGNGsparcでも使えてたよ
0973デフォルトの名無しさん
NGNGしょうがなく gcc/toplev.c と md 部分の *.c や *.md 見て確かめてるな。
0974デフォルトの名無しさん
NGNG0975959
NGNGmanによるとそうなんですけど,
gcc -v -Q -O3 hoge.cpp
だと,-finline-functionsが出ません.
やっぱgccはソースを見るしかないのか.
0976デフォルトの名無しさん
NGNG0977959
NGNGとしても,有効オプションに-finline-functionsは表示されないので,
-v -Qは指定された有効なオプション全部を表示しているわけではない
みたいです.
失礼致しました.
0979デフォルトの名無しさん
NGNGインライン展開してる事なんてすぐ分かるじゃん。
アセンブラも読めないのに最適化についてなんて語るなよ。
0981デフォルトの名無しさん
NGNGところで次スレは?
0982西安(UCK 3.13.8) ◆CYANlp4LPo
NGNGGCCについて part4
http://pc5.2ch.net/test/read.cgi/tech/1090062751/
0983デフォルトの名無しさん
NGNGそう思ったら-v -Qのコード直すなりしてパッチ送りなよ。どうしてそうしないの?
0984デフォルトの名無しさん
NGNG思った瞬間にスレに書き込んだんでしょ。きっと、もうパッチ作って送ってるヨ。
0985959
NGNGと書き込みたいところだけど.
>>983,984
そうやってひとを追い込まない.(苦笑)
私はgccのコード把握してないんで,そう簡単に直せないヨ.
0986959
NGNGどうやら,
c-opts.cのbool c_common_post_options ()で,
flag_inline_functions = 0;
しているからというのは分かったんですが,
flag_inline_functionsは,あとの処理で参照しているので安易に変更できないし.
ちょっと簡単ではなさそう.
0987デフォルトの名無しさん
NGNG調査が進んだらまた報告しれ。
0988デフォルトの名無しさん
NGNG0989959
NGNGflag_inline_functionsはf_optionsにちゃんとありますよ.
だから-v -Qで表示しようという意図はあるんでしょうね.(つまりバグと言えるかも.)
同ファイル
static void print_switch_values (file, pos, max, indent, sep, term)
中程の
for (j = 0; j < ARRAY_SIZE (f_options); j++)
if (*f_options[j].variable == f_options[j].on_value)
pos = print_single_switch (file, pos, max, indent, sep, term,
"-f", f_options[j].string);
で表示するかしないかを判断しているみたいなのですが,
このとき,-O3あるいは-finline_functionsを指定していても,
986に書いたようにflag_inline_functionsは既に0になっているのです.
0990デフォルトの名無しさん
NGNG0991デフォルトの名無しさん
NGNG0992デフォルトの名無しさん
NGNGgcc/toplev.c(長いので抜粋)
int flag_inline_functions;
+static int flag_inline_functions_959;
{"inline-functions", &flag_inline_functions, 1 },
+ {"inline-functions-959", &flag_inline_functions_959, 1 },
decode_options (argc, argv);
+ flag_inline_functions_959 = flag_inline_functions;
0994992
NGNG3.3.xだと
parse_options_and_default_flags (argc, argv);
+ flag_inline_functions_959 = flag_inline_functions;
こうなるようです。実際の動作は確認できていません。
0995959
NGNGいえ,私こそ新しいものを前提にするべきでした.
gcc-core-3.4.1.tar.bz2を取って来て見てみました.
オプションのデコードまわりは,3.3.x->3.4.xで結構変わってるんですね.
3.3.xでは,f_optionsを使って言語に関係のないオプションのデコード,および-v -Qでの表示をやっていたのが,
3.4.xでは,言語に関係あろうがなかろうがcl_options(opts.h, options.c)でデコードをやっていて,
一方,f_optionsが(まだ?)残っていて言語に関係のないオプションの表示用に使えてる印象です.
オプションの情報がcl_optionsとf_optionsで二重になってるのは,このへんのコードがまだ過渡期ということなんでしょうか.
(C++使いたくてうずうずするゾ.)
私は「print_switch_valuesの位置を変えて対処できないかな?」と画策してたんですが,
flag_inline_functions以外の他のフラグとの関係でちょっと無理そうでした.
0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNGerror: Permission denied.
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。