トップページ⇒tech
1001コメント308KB

GCCについて part3

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
単発質問から始まったGCC(GNU Compiler Collection)について語るスレ。
あまり勢いはないが地味に逝こう。

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デフォルトの名無しさんNGNG
2ゲット
0003デフォルトの名無しさんNGNG
乙かれー >>1
0004デフォルトの名無しさんNGNG
m9( `Д´)
0005982NGNG
5ゲット
0006nokaiNGNG
http://www.nokai.ne.jp/
君たちのような頭の悪すぎる人たちはここへ来なさい
0007デフォルトの名無しさんNGNG
他スレの話で知ったんだけど、
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12435
これって、「バグ」ですよね?

だってせっかく型にアラインメント指定したのに、
配列に入れたらインスタンスのアライメントが保証されないとか困るっしょ。
その型のポインタ受け取る関数に配列の要素渡してあぼーんとか泣くっしょ。
0008デフォルトの名無しさんNGNG
>>7
先頭要素だけアラインメント指定を遵守して、ポインタ演算はアラインメント指定を
無視してくれてる模様。
0009ヽ(´ー`)ノNGNG
>>1 乙
前スレの 998-1000 わろた。
0010デフォルトの名無しさんNGNG
GCCステータス・アップデート
ttp://japan.linux.com/desktop/03/12/29/1419225.shtml

3.4以降から採用の新しいC++パーサとPCHの話題が載ってる。
0011デフォルトの名無しさんNGNG
今年はプリコンパイラが導入されますように。
0012デフォルトの名無しさんNGNG
海外掲示板用オフラインリーダーを作るスレ
http://pc2.2ch.net/test/read.cgi/tech/1072883528/

海外でよく使われていうる掲示板スクリプト
専用のオフラインリーダー作って下さい。

必要な条件はID、PASSを管理できること、
OpenJaneみたいな三面型の見た目。
簡単にローカライズできるように言語ファイルを採用
0013デフォルトの名無しさんNGNG
ここを紹介されて来ました。マルチポストですみません。
gcc-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デフォルトの名無しさんNGNG
たのむよ、まだこっちを使えよ。新しくスレたてんなよ!!
http://pc2.2ch.net/test/read.cgi/tech/1071613279/
0015デフォルトの名無しさんNGNG
>>13
includeのディレクトリがbinの中にあるの?
0016デフォルトの名無しさんNGNG
>>13
> エラーの原因はデフォルトの検索パスが無視されているため
../include にシステム標準のヘッダファイルと重複する名前のファイルが
置いてないか? あるいはファイル名は違っても、インクルードガードが
一致しているとか。
001713NGNG
>>13 まさかね。gccは自分でソースからインスコしたものです。
ちなみに、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
>>17
とりあえず gcc -v して結果貼り付け。
001913NGNG
>>17 リンク先見てもらえればそのまま張ってあります。659のほうをドゾー。
0020デフォルトの名無しさんNGNG
>>19
ちゃうちゃう。

% gcc test.c -I./include -c -v

ここまでつけて。そうすると include パスとかずらずら出てくるはずだから。
002113NGNG
>>20 レスありがとうございます。
あー失礼しました。テストしたいのですが出先からのアクセスですので
レスは長く後になります。(TT

ヒントをありがとうございます。チェックしてみます。
0022デフォルトの名無しさんNGNG
で、どうなったんだろう・・・・
レス先間違えまくっているあたり注意力に問題がありそうだけど。
0023デフォルトの名無しさんNGNG
>>7
struct {
  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*を受け取る関数が全く使えなくなる。
00247NGNG
>>23
現状での挙動は分かってます。

でも、現状の挙動では>>7で書いたような問題が防げません。
aligned指定でsizeofも変わりうる挙動をしていれば、>>7の問題も、解決しますし、
配列の先頭だけにalignmentを指定したければ、配列に対して指定すればよい話です。

ですが、alignedの挙動を変更すると、char*にachar*を渡しているような
現状動いているコードが壊れてしまいます。

sizeofも変わりうるaligned指定を別名で作り、
sizeofが変わってしまった場合はポインタが互換しないようにする、
というのは、どうでしょうか?

ちなみに、bugzilla の id=12435 は Andrew Pinski によって 12/28 に
「バグじゃない」ってことで終了されてしまっています。
0025デフォルトの名無しさんNGNG
>>24
> aligned指定でsizeofも変わりうる挙動をしていれば、>>7の問題も、解決しますし、
> 配列の先頭だけにalignmentを指定したければ、配列に対して指定すればよい話です。
本当に、それで他の部分に影響でないの?

個人的には配列にたたき込みたいなら構造体にして、padding 自分で詰めれば良いと思うが。
00267NGNG
>>25
> 本当に、それで他の部分に影響でないの?

「それ」とは、
「aligned指定でsizeofも変わりうる挙動」をすることですか?
「配列の先頭だけにalignmentを指定したければ、配列に対して指定」することですか?

> 個人的には配列にたたき込みたいなら構造体にして、padding 自分で詰めれば良いと思うが。

アラインメントを指定したいときに、aligned属性があるのなら、
それを使って行うのが自然だと思います。
正しくpaddingを詰めるためには、必要な情報もどうにかしてひねり出さないといけないですし、
構造体にしてしまって、意味薄いフィールド名を考えるのも使うのも面倒です。
0027デフォルトの名無しさんNGNG
GCCが卵に見えるからだろうね
0028デフォルトの名無しさんNGNG
ちょっと考えても問題出るな。
0029デフォルトの名無しさんNGNG
>>26
> 「それ」とは、
どっちでも良いけど。

アライメントの問題を解決したが、他の部分で既存のコードが動かなくなるような致命的な
問題が出たら意味ないわけで。現状の gcc の設計と矛盾しないなら、パッチ作って送れば
対応してくれると思うぞ。
0030ヽ(´ー`)ノNGNG
というか id=12435 は俺はバグじゃないと思う。>>24 の解決策の方が相当不味いと思われ。
納得できないのなら ML や Pinski 氏に質問してみたら?それか >>29 が言うように
パッチ書いてみるかだな。
00317NGNG
>>30
今あるalignedの挙動を変えてしまうと不味いのはわかったのですが、
アライメント指定に伴ってsizeofも変わること自体が「相当不味い」のでしょうか?

挙動が変わるので、新しい別の属性キーワードを作る必要があるとおもいます。
そしてその属性をつけた型および値を指すポインタは
オリジナルの型と互換しない(int*とchar*の関係になる)ようにする必要がありそうです。

この方針で問題なければ、パッチを書いてみよう
・・・かなぁ、と思います。
ほかにも不味いところが残っていれば指摘して欲しいです。
0032デフォルトの名無しさんNGNG
>>31
まずすぎるというか、
それじゃ結局別の型を作るだけだろ?
>>25のいうようにalignof使って構造体作れ。
0033デフォルトの名無しさんNGNG
どうしてもバグにしたい人がいるようだ
00347NGNG
>>32
> それじゃ結局別の型を作るだけだろ?
そうです。いま欲しがってる属性を 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デフォルトの名無しさんNGNG
(´-`).。oO(いったい何がしたいんだろう?)
0036デフォルトの名無しさんNGNG
>>34
typedef は型に「別名」をつけるだけで、型を作成するものじゃないが。typedef したものが
別の型ってことになると、C/C++ の従来の typedef と意味が違ってしまうから、影響でか
すぎだと思うぞ。

矛盾しない形で gcc のソースコード改修できるのなら、パッチを作る事は止めないが。
0037デフォルトの名無しさんNGNG
別の型には変わりないが、完全に互換性がある。
0038デフォルトの名無しさんNGNG
>>36
typedef int const cint;
typedef int volatile vint;
typedef int iarray[2];
こんなのと同じ感じじゃないの?
0039デフォルトの名無しさんNGNG
more_aligned_int* p

p++はどんなうごきすんねん
00407NGNG
>>39
(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デフォルトの名無しさんNGNG
本7うざい死ね
0043デフォルトの名無しさんNGNG
>>34
> パッチ書くより、「この"as far as it can"をもっと具体的に書いとけ」と突っ込むのが良いように思います。
だったら今すぐそうすればいいだろが、誰も止めないぞ。
オープンソースである以上、必要だと思った人間が手を動かす。
今までもこれからもそうやって成り立っていくんだよ。
文句は言わないけど自分は手を動かさないってんじゃ話にならんわ。
独り言なら日記にでも書きたまえ。
0044デフォルトの名無しさんNGNG
パッチ書いてもいいけど、ばらまかないでね。
迷惑だから。
0045デフォルトの名無しさんNGNG
>>34
> 今回の件を知らなければ、こんな関数を作って不可解なバグに悩まされていたかもしれません。

それはGCCのせいじゃなくて、そんなおかしな設計したお前に責任がある。
0046デフォルトの名無しさんNGNG
s/した/する/
0047デフォルトの名無しさんNGNG
align関連はGCCの独自仕様なのだから、君が思った仕様と食い違っていても、
その仕様はくつがえらないし、もちろんバグではない。
問題視して欲しければ、GCCの仕様のままで通常使用したときに、致命的な
問題が発生することを示すか、他の仕様と論理的不整合が存在することを
示す必要がある。
それができなければ、ローカルパッチを作って、思う存分使えばいい。
0048デフォルトの名無しさんNGNG
ttp://gcc.gnu.org/ml/gcc/2004-01/msg00504.html

GCCにPL/Iのフロントエンドをつけてる人が。

……今更使う人いるのかなぁ
0049デフォルトの名無しさんNGNG
ちょっと使ってみたかったりして<PL/I
大昔バイトで使って以来書く事もなかたので。
0050デフォルトの名無しさんNGNG
PL/1はいいぞー

Fortranもいい。 なんていうか、そそるものがあるんだよ
0051デフォルトの名無しさんNGNG
>>50
魅力が全然分からん。
小一時間愛を語ってはくれんかね?
0052デフォルトの名無しさんNGNG
名前指定ループ多段ブレイク
0053デフォルトの名無しさんNGNG
gotoとどう違うんですか?
0054デフォルトの名無しさんNGNG
>>51
使い手にナイスミドルのおじさまが多い。
0055デフォルトの名無しさんNGNG
>>53
goto みいにどこにでも飛べるわけじゃなく、ループから抜けると言う意図がはっきり伝わる。(=読みやすい)

C/C++ にも欲しいよ。
0056デフォルトの名無しさんNGNG
ラベル名を工夫すればはっきりと伝わると思うが。
005755NGNG
まあ、goto 文使ったってわかりやすいプログラムは作ることができるからね。
でも、「ラベル名を工夫すれば」と言う労力がかかるし、それができない奴もたくさんいるから。

(今見たら、>>55 日本語変だな。goto みいに → goto みたいに)
0058デフォルトの名無しさんNGNG
> それができない奴もたくさんいるから。
L1,L2,・・・・,Lnとつけている俺のことか?
0059デフォルトの名無しさんNGNG
>>58
アセンブラかよ !!
0060デフォルトの名無しさんNGNG
>>55
そんなあなたにPerl

だいたい>>52程度でPL/Iへの愛を騙(ry
0061デフォルトの名無しさんNGNG
>>57
break でも、それなりの名前つけないとダメだろう。
0062デフォルトの名無しさんNGNG
>>55
ポインタ使えば?
0063デフォルトの名無しさんNGNG
>>60
名前指定ループ多段ブレイク があれば何でもいいわけじゃないぞ。

>>61
どんな名前でも、「ループを抜ける」と言う意図は伝わるぞ。
どんなループなのかわからんと言うのはまた別の話だし。

>>62
ハァ ?
具体的に書いてみてくれ。
0064デフォルトの名無しさんNGNG
>>63
邪悪な提案を1つ。

#define break_loop goto
0065デフォルトの名無しさんNGNG
>>40

>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
>>64
行き先ラベルの定義はどうやるんだ ?

C/C++ のマクロはここら辺が作りにくい。

昔さわった汎用機の PL/I のマクロは、substr() なんかの文字列操作は当たり前、FOR, WHILE 等の制御構文に加えて手続き/関数定義までできた。
ほとんどフルセットのインタープリタだったよ。
(使い出すと面白くて病みつきになるけど、はっきり言って や ・ り ・ す ・ ぎ。)
0068デフォルトの名無しさんNGNG
C/C++のcppが貧弱すぎるという方が正しい物の見方だと思うぞ。
C++はtemplateやらinlineやらというマクロ構文のおかげでわりとましになったが、
もともとの育ちの悪さからくる使い勝手の悪さはついて回る。
cppとtemplateとかが連携していないから、デバッグ版のnew/deleteを作ろうと
すると行番号などを渡すのが難しかったりとかするし。

まあそこまでは望まないにしても、どうしてm4くらいにしなかったのかねえ。
条件分岐とか任意個の引数それぞれについて展開文を生成するくらいはやって欲しいと
時々思う。
0069デフォルトの名無しさんNGNG
>>68
> まあそこまでは望まないにしても、どうしてm4くらいにしなかったのかねえ。
そりゃあ UNIX V6 書いた時代に m4 なかったからだよ。
0070デフォルトの名無しさんNGNG
ああ、そりゃそうだな。確かに。
0071デフォルトの名無しさんNGNG
http://www.tldp.org/HOWTO/GCC-Frontend-HOWTO

web crawl していて発見。
gcc のフロントエンド書いてる人なんているのかしらん。
0072デフォルトの名無しさんNGNG
>>71
Wide Stadio
0073デフォルトの名無しさんNGNG
gccソース配布にはTreelangというフロントエンド実装例示用言語のレクサとパーザとあれこれが付属.
GNU VHDLがGCCのフロントエンドとして書かれていたと思った.フランスの教育機関の中の人.
0074デフォルトの名無しさんNGNG
gccのソースをチェックアウトしようと思って、cygwin bash shell から
 $ 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デフォルトの名無しさんNGNG
>>74
http://savannah.gnu.org/ 見るポ。
0076デフォルトの名無しさんNGNG
>>75
ありがとうございます。
 $ CVS_RSH='ssh' cvs -d :ext:[email protected]:/cvsroot/gcc co -P gcc
これでいけました。
0077デフォルトの名無しさんNGNG
-Wmissing-prototypes が、Cではちゃんと警告出すのに、C++だと動作しないみたいなんですが、
bugzillaに情報があるかどうか調べるにはどうしたらいいのでしょうか?
0078デフォルトの名無しさんNGNG
つーかそもそもC++だとprototypeないとダメだろ。
0079デフォルトの名無しさんNGNG
-Wmissing-prototypesは、グローバルな関数の定義に対して、
先にプロトタイプ宣言が無いことを警告するものです。
呼び出し側でエラーになるのとは別です。
0080デフォルトの名無しさんNGNG
gcc開発してる人達ってこれが本職なの?
RedHatやSuSEが金出して雇ってるのかな。
0081デフォルトの名無しさんNGNG
SuSEは買収されたYO
0082デフォルトの名無しさんNGNG
みんなRedHatのことを悪くいうけど、
GCCの開発者の多くはRedHatだよな。
ああいう会社は大事にしないといけない。
オプソ注はガキだから、独占商売してる!
とかうるさいけど。だったらお前がGCC作れ、と。
0083デフォルトの名無しさんNGNG
>>80
どっちも金出してる。
勤め人が片手間でこなせる作業量じゃないし。

>>82
Cygnusから流れただけやん。
金にならんからクビって事がないことを願おう。
0084デフォルトの名無しさんNGNG
流れたっつーか買収されたっつーか。
でもRedHat Linuxやってる連中と旧Cygnusの連中の間には溝がある
ような気がしないでもない。何年か前、リリース版じゃないgcc 2.96を
RHに載せて出荷しちまったとかでgccチームが抗議文出してたしな。
0085デフォルトの名無しさんNGNG
gccint.texiをHTMLで読もうと思って、gccのソースディレクトリ(以下では GCC )から、
 $ 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デフォルトの名無しさんNGNG
>>85
gcc-3.3.2/gcc/docディレクトリに移動して、
$ makeinfo -Iinclude --html gccint.texi
だけで問題無くできたけど、ちなみに
makeinfo (GNU texinfo) 4.6です。
0087デフォルトの名無しさんNGNG
>>86
レスありがとうございます。
こちらの環境はcygwinで、makeinfoのバージョンは(GNU texinfo) 4.2でした。
バージョンの古さが原因の問題なのかもしれません。

で、望むものはgccのサイトに置いてあるのに気付いたので、
そちらを使わせてもらうことで解決しました。
0088デフォルトの名無しさんNGNG
age
0089デフォルトの名無しさんNGNG
C#のフロントエンドやMSILを出力するバックエンドを
作るような話はあるんでしょうか?3.5以降になるのかもしれませんが。
0090デフォルトの名無しさんNGNG
makedepend が g++ に対応していなくて cstddef や cstdio が探せない
どうしたらいい?
0091デフォルトの名無しさんNGNG
g++ -M
009290NGNG
>>91
makefileのDO NOT DELETE This line以降を書き換えるようにできないでしょうか?
0093デフォルトの名無しさんNGNG
> makefileのDO NOT DELETE This line
なんですかそれは?
0094デフォルトの名無しさんNGNG
sed '/DO NOT DELETE This line/q' Makefile > Makefile.tmp
g++ -MM $(SRCS) >> Makefile.tmp
mv -f Makefile.tmp Makefile
0095ヽ(´ー`)ノNGNG
俺なら include するかなぁ。

Makefile.dep: $(SRCS)
g++ -MM $(SRCS) > Makefile.dep

# dependencies
.include Makefile.dep

構文これであってたっけ?(;´Д`)>
最近は専ら automake/autoconf だから自分で Makefile 書かなくなったな。
0096デフォルトの名無しさんNGNG
>>95
> 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ヽ(´ー`)ノNGNG
> 追記じゃなければ -MMF Makefile.dep でもいい。
10ヘー(・∀・)⊇


> BSD make?
あぁ、先頭に . がいるのは BSD make だったか。
間違えますた、スマソ。
0098デフォルトの名無しさんNGNG
ttp://make.paulandlesley.org/autodep.html
ここなんかどよ。(gcc -Mの項)
0099 NGNG
gcc -laaa -lbbb main.o →リンク失敗
gcc -laaa main.o /usr/lib/libbbb.a →リンク成功

/usr/lib/ には libaaa.a も libbbb.a もあるし、
libaaa.a は正常にリンクされているのに。
なぜでしょうか?
0100デフォルトの名無しさんNGNG
朝から釣りか。
0101デフォルトの名無しさんNGNG
エラーメッセージ見りゃ見当つくだろ。

0102デフォルトの名無しさんNGNG
gcc main.o -laaa -lbbb
いじょ
0103デフォルトの名無しさんNGNG
3.3.3は話題にもならない?
0104デフォルトの名無しさんNGNG
g++のtemplateもかなり良くできてきたし満腹状態。
g++拡張でtypedef templateが付いたら教えてねん。
0105デフォルトの名無しさんNGNG
g++のコンパイル速度って、こんなもん?
体感できるほどPCHで劇的に変わるんでしょうか。
0106デフォルトの名無しさんNGNG
>>105
3.4は普通に使えるから、自分で試してレポートよろしこ
FTP://ftp.iij.ad.jp/pub/gcc/snapshots/3.4-20040218/gcc-3.4-20040218.tar.bz2
0107デフォルトの名無しさんNGNG
適当に age とこうか.

>>103
そもそもリリースのアナウンスって流れたっけ ?
ftp mirror に行きわたるのを待ってると言ったっきりのような.
0108105NGNG
>>106
サンクス。g++自体のコンパイルに時間がかかりそうだけど、
おわったら試してレポートします。
0109デフォルトの名無しさんNGNG
>>107
> そもそもリリースのアナウンスって流れたっけ ?
まだだけど。でも ttp://gcc.gnu.org/releases.html では
とっくに出たことになってるんだよなぁ・・・。

ftp.gnu.org にないから気づかなかったけど、ミラーによってはもうあるぽ。

# 普通ミラーに行き渡るのに一週間もかからないよなぁ・・・。
0110105NGNG
やってみました。cygwin上の
gcc version 3.4.0 20040218 (prerelease)
なg++です。比較の対象にしたのは、3.3.1です。

結果としては、コンパイルの速度はあまり変わらなかったけど、
吐かれたバイナリの実行速度が結構速くなってました。
ってこれじゃPCHと関係ないですよね。
俺がやり方間違えたかな…参考にならないレポートですんません。
0111デフォルトの名無しさんNGNG
PCHてなにもしなくても効果するん?
設定ファイルとか、オプションとか必要ないん?
0112デフォルトの名無しさんNGNG
今見たら ftp.gnu.org にも 3.3.3 置いてあったよ.

0113デフォルトの名無しさんNGNG
3.3.4のはなしもあるみたい。
0114デフォルトの名無しさんNGNG
>>110
最適化が上がったけどコンパイル時間が増えなかった。
と考えると効果あり?
0115デフォルトの名無しさんNGNG
PCHを使うにはオプションが必要だった気がしたけど
0116デフォルトの名無しさんNGNG
>>96
サブディレクトリを$(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
生成ルールのターゲットになるのは *.cppじゃなくて *.o だろ?

-oオプションで指定しない限り,コンパイルしたオブジェクトファイルは
カレントディレクトリに作られるので
window.o: subdir/window.cpp subdir.window.h
となって当然だと思う。

infoを見ると、-MT target というオプションをつけると変更できるようなので、
どうしてもというなら、${SRCS}についてループを回せばできるんじゃないかな。

0118116NGNG
>>117
>生成ルールのターゲットになるのは *.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デフォルトの名無しさんNGNG
depend:
  for s in $(SRCS); do g++ -MM -MT `echo $$s | sed 's/\.cpp$$/.o/'` $$s; done > Makefile.dep
でいいんじゃないの? (非GNU make依存)
0120デフォルトの名無しさんNGNG
3.3.3 あなうんすきたーage
0121デフォルトの名無しさんNGNG
tree-ssaのfrozeきてたー
gcc/ssa-*をさっそく調べないと。
0122デフォルトの名無しさんNGNG
ソースからライブラリを指定したいのですが、
VCの
#pragma comment (lib, "***.lib")
に相当するものはGCCにあるのでしょうか?
0123デフォルトの名無しさんNGNG
>>115
試したのがしばらく前なので、状況変わってるかも知れんが。俺が試したとき
には、ヘッダファイルを事前にコンパイルしておく必要があった。

% gcc foo.h

これで #include "foo.h" しているファイルをコンパイルすると、勝手に
プリコンパイル済みヘッダが使われた。

あと VC の stdafx.h のように「よく使うヘッダファイルを全部 #include する
だけのヘッダ」を用意して、そいつをプリコンパイルしておくと良いみたい。
多数のヘッダを個別にプリコンパイルしても、あまり速くならなかったよ。
0124デフォルトの名無しさんNGNG
おれもPCH使ってみたけど、遅いのはインクルードファイル処理じゃ無いから全然
速くならなかった。
Cで巨大ファイルインクルードしてないと意味ないんじゃないか?
またはC++で巨大汎用テンプレートをインクルードするけどほとんど
インスタンス化しない場合とか。

致命的なのはmakeファイル作り替えないといけない点。
0125デフォルトの名無しさんNGNG
>>124
つまり boost::* 用ってことでFA?
0126デフォルトの名無しさんNGNG
>>121
英語は全っ然読んでないんだけど、
http://gcc.gnu.org/projects/tree-ssa/#ssa
から察するに「もう一段かませてもっと最適化」って事? 何が新しいの?
0127デフォルトの名無しさんNGNG
Static Single Assignment使ってるから、
部分冗長性の検出とか定数伝搬がより賢くなる可能性があるんでしょ。
言語に依存しないレベルで、かつ、RTLや生成コードよりもう少し抽象度の高いところで。
0128デフォルトの名無しさんNGNG
>>122
俺も知りたい
便利なんだよな
0129デフォルトの名無しさんNGNG
setjmpの関数アドレス取得しようとして数十分はまった。

>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
>>129
#include <setjmp.h> 忘れただけだろ ?
0131デフォルトの名無しさんNGNG
>>130
ちーがーうー
setjmpが関数マクロだったから、
setjmpの名前だけ書くと未定義エラーになるわけ。
関数マクロは後ろの括弧が必須なの。
mingwのinclude/setjmp.h見りゃわかる。
0132デフォルトの名無しさんNGNG
ただのマクロでいいものを関数マクロにする開発者もアホだが、setjmpのアドレスを得ようとする129もアホ。
0133デフォルトの名無しさん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
結局これが正解。

馬鹿野郎。
0134132NGNG
つーかマクロって決まっているんじゃねーか
アホなのは129だけに決定
http://www.bohyoh.com/CandCPP/C/Library/setjmp.html
0135デフォルトの名無しさんNGNG
>>132
スクリプト言語の実装で必要なんだよアホ
0136デフォルトの名無しさんNGNG
>>134

はあ?どこに「マクロ」なんて書いてあるんだよアホ!
0137デフォルトの名無しさんNGNG
あああ
>setjmpマクロ

アホはおれだけかよ!

悪かったな>>132
0138デフォルトの名無しさんNGNG
>>127
というと相当広範囲な最適化が望めるって事ですね。そりゃ、スバラシイ。
(でも処理系専門外な自分は多分その素晴らしさの一割も理解できてない…)
0139デフォルトの名無しさんNGNG
つーかね、わざわざ関数マクロにしてトラップ作る必要ねーだろ
ざけんな!>mingw
0140132NGNG
>>137
俺も勉強になった。
マクロと決まっているのはassertだけじゃなかったのか。
0141デフォルトの名無しさんNGNG
>>137
俺も知らなかった…K&RにもC99にもそう書いてあるわ。
あとマクロと決まってるのはva_*くらい?
std{in,out,err}が「マクロ」なのは、glibcのhackで有名、かな。
# Linuxな人は今すぐ grep stdin /usr/include/stdio.h
0142デフォルトの名無しさんNGNG
マクロか疑似関数じゃないとsetjmp()は実装しにくいでしょ。
ほとんど全てのregisterを保存しないといけないわけだから。
関数で実装するとstackのrewindして(から)保存しないといけないからね。

C99でもgetcなんかもマクロなんじゃないの?
0143132NGNG
そうだ。va_argとかもマクロだ(^_^;)
va_argは型名を受けるから関数として実装するのは不可能だもんな。
0144デフォルトの名無しさんNGNG
>>142
そんなことないよ
mingwはmsvcrt.dll借用してるよ
0145デフォルトの名無しさんNGNG
なことないって言われても…
Windowsは1CPU, 1プラットフォームでしょ。
0146デフォルトの名無しさんNGNG
なんかトン沈下んな奴がいるな
145のことだが。
0147デフォルトの名無しさんNGNG
>>142
getc・putc共に、C99でも「マクロ『かも』しれない」です。
これはC89から変わってないですよね。
# C99持ってない方、C99相当のJISがPDFで手に入ります。
# ttp://www.jisc.go.jp/ →JIS検索→JIS X3010 でどうぞ。
0148デフォルトの名無しさんNGNG
>>142
別に関数で普通に実装できますがなにか ?
例えば、FreeBSD 4.8R/i386 + GCC 2.95 は関数で実装されてるよ。
0149デフォルトの名無しさんNGNG
>>148
手元の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デフォルトの名無しさんNGNG
const qualifierのついた変数は定数ではない。
0152デフォルトの名無しさんNGNG
ローカル変数とグローバル変数とでの違いが気になります
0153デフォルトの名無しさんNGNG
グローバル変数は定数でしか初期化できない。
ローカル変数は初期化時点で決まっている値ならOK。
0154デフォルトの名無しさんNGNG
つーかどこがGCC依存な話題なんだ??
0155デフォルトの名無しさんNGNG
それ、VCだと通ったりするんじゃない?
そんなケースが前あった。
0156150NGNG
>154
例えば ボーランドのbcc32とかだとローカルだろうがグローバルだろーが
"不正な初期化"となるのです
0157デフォルトの名無しさんNGNG
>>156
ボーランドのはC99に準拠してなんでしょ。
http://gcc.gnu.org/onlinedocs/gcc-3.3.3/gcc/Initializers.html#Initializers
0158デフォルトの名無しさんNGNG
→してないんでしょ
0159150NGNG
了解です。分かりました。
0160105NGNG
すんません。PCHの話題の言いだしっぺです。
110で一度レポートしたのですが、冷静に色々やってみると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デフォルトの名無しさんNGNG
ここで聞いていいのか分からないんですけど……。

libfoo.so や libfoo.a があったとして、その中から特定のシンボルだけ
削除したい場合ってどうすればいいですか?ソースはありません。
0162デフォルトの名無しさんNGNG
>>161
やり方は知らないけど、なんでそんなことするの?
0163デフォルトの名無しさんNGNG
関係ないけど、binutilsにELFの形式をチェックするような
ツールってある?
0164デフォルトの名無しさんNGNG
>>163
readelfのことか?
http://itpro.nikkeibp.co.jp/linux/faq/200205-3.shtml
0165デフォルトの名無しさんNGNG
>>161
.aはar使えばいいじゃん。ar知らずにどうやって.a作ったのさ。
.soは知らん。
0166デフォルトの名無しさんNGNG
>>163
objdump -xじゃ不満かい?
0167デフォルトの名無しさんNGNG
gcc3.3.3の標準ライブラリのソースを見たいのですが、
どのディレクトリにあるのでしょうか?
0168デフォルトの名無しさんNGNG
標準ライブラリって、Cの?
それは普通言語処理系じゃなくてOSが持つ。
0169167NGNG
レスどうもです。
説明不足ですみません。
Cのprintf, scanfなどのANSI標準ライブラリ関数のソースのことです。
gccのソースコードから抜き出したいと考えてたのですが…
0170デフォルトの名無しさんNGNG
抜き出してどうすんのん? ライセンスあるよん。
glibcの中にあるの。
0171167NGNG
なるほどglibcにあったのですね。
Cの勉強をしていて、あるライブラリ関数がどのように実装されているのか
興味があって、探し求めていたんです。
どうもありがとうございました。
0172デフォルトの名無しさんNGNG
gccが使う標準Cライブラリはglibc以外にもいろいろあるわけだが、
0173デフォルトの名無しさんNGNG
コンパイルしたプログラムに
どのバージョンでコンパイルしたか埋め込める#define とか 関数ってあるの?

int main(){
printf("thist complile by%s",#GCC_COMPILE_VERSION);
}

という風にしたいんだけど
0174デフォルトの名無しさんNGNG
>>173
__GNUC__ と __GNUC_MINOR__ で何とかならないか。
0175デフォルトの名無しさんNGNG
大抵のコンパイラは自身を識別する定義済マクロを用意していて、
(メジャー)バージョン番号がその値になっていることが多い。

gccなら
__GNUC__ と __GNUC_MINOR__ (それぞれ整数)。
__VERSION__ もある (こちらは文字列)。
0176173NGNG
>>174 >>175
ありがとう
0177デフォルトの名無しさんNGNG
__atribute__
0178デフォルトの名無しさんNGNG
>>176
gcc -vも覚えれ
0179デフォルトの名無しさんNGNG
gccの解説本で良いのありますか?
0180デフォルトの名無しさんNGNG
>>179
infoはだめか?
info以上の情報があるなら俺も知りたい。
0181デフォルトの名無しさんNGNG
うーん。
2chってこんなに低レベルだったの?

# って嘆いてみるテスト
0182デフォルトの名無しさんNGNG
特に若い人に、調べる能力の低いのが多いね。
0183デフォルトの名無しさんNGNG
2chにレベルもクソもないと思うが
0184デフォルトの名無しさんNGNG
コンピューティングが低年齢の人に解放されたってことで喜んでいいんじゃない?
といってもこんな所でクダ巻いてる奴なんて小学校の頃から触ってるか

低レベルすぎる質問は無料コンパイラとして初心者の入門用にと
宣伝されてるから仕方ないと思われ
0185デフォルトの名無しさんNGNG
低レベル云々の煽りは馬鹿の証し
0186デフォルトの名無しさんNGNG
>>181って逆切れ厨でしょ。文句あるなら自分で調べろよ。
0187デフォルトの名無しさんNGNG
gccってどうやってインストールするんですか?
0188デフォルトの名無しさんNGNG
>>187
./configure --prefix=/usr/local
make bootstrap
make install

確かこんな感じ。インストール先ディレクトリは./configureに--prefixオプションで指定する。
0189デフォルトの名無しさんNGNG
configure && make all && make install
0190187NGNG
すいません、初心者なんで何をどうすればいいかも
分からないんです。
参考になるページか何か知っていませんか?
自分でも調べたけどわかんなくて、、、、
0191デフォルトの名無しさんNGNG
もっと質問の仕方ってものがあるだろうし、
'初心者'は免罪符でもなんでもない
とりあえずOS環境を書けよ
まあ答えは出てるけどさ
0192デフォルトの名無しさんNGNG
>>190
本家: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デフォルトの名無しさんNGNG
おまいら釣りにひっかかってあげるやさしい奴
0194デフォルトの名無しさんNGNG
>>191
すいません。
今度から気をつけます。
>>192
ありがとうございます。
>>193
釣りではありません。
0195デフォルトの名無しさんNGNG
>>194
MinGWを使おう
http://pc2.2ch.net/test/read.cgi/tech/1042611308/
0196デフォルトの名無しさんNGNG
それでもOS環境をかかない頑固な194。
0197デフォルトの名無しさんNGNG
いきなり自動車免許を取ろうとせずに歩行者・三輪車・自転車……と
段階的にすすめてみてはどうだろう。

0198デフォルトの名無しさんNGNG
歩行者です
gccってどうやって使うんですか?
0199デフォルトの名無しさんNGNG
先行者です
キャノンってどうやって使うんですか?
0200デフォルトの名無しさんNGNG
あなたには使えません
0201デフォルトの名無しさんNGNG
お前ら面白すぎ
0202デフォルトの名無しさんNGNG
3.4branchが切られてメインラインがいつのまにか3.5になってまつね。
0203デフォルトの名無しさんNGNG
奇数バージョンは安定しないんだっけ?
0204デフォルトの名無しさんNGNG
major>minorのうちは危ないというが、
奇数・偶数の区別はない。
0205デフォルトの名無しさんNGNG
>>204
じゃあ3.3以上ならいいの?
0206デフォルトの名無しさんNGNG
>>204
了解。

>>205
そういうジンクスがあるってだけで、
実際その通りってわけじゃないよ。
0207デフォルトの名無しさんNGNG
printfの%pにint *等を渡すと警告が出る(要-ansi -pedantic)。
最初バグかと思った。void *じゃないと警告が出るのね。
0208デフォルトの名無しさんNGNG
さすがpedantic。マゾ向けですな。
0209デフォルトの名無しさんNGNG
>>207
>void *じゃないと警告が出るのね。

理由は何?
0210デフォルトの名無しさんNGNG
>>209
なんだろう?
可変個引数ゆえにtype *がvoid *に変換されずにそのまま渡されるからかな?
そこまで文句をつけるかー!?って思うけど(だからこそpedanticなのかな)

3.3.2や3.3.3では出るけど、2.95.3では出ないね。
0211デフォルトの名無しさんNGNG
| 7.19.6.1 The fprintf function
| 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デフォルトの名無しさんNGNG
さすが pedantic だ
0213デフォルトの名無しさんNGNG
-ansi -pedanticだけじゃ警告出ないな。-Wall付けると出る。
0214ヽ(´ー`)ノ ◆.ogCuANUcE NGNG
CFLAGS=-std=c99 -Wall -pedantic

だなぁ。みんな、-Wall だけなの?
0215デフォルトの名無しさんNGNG
3.4はスケジュール通りだせるんでつかね。
Mitchellタソ、ブチ切れぎみですが・・・
GCCの開発は、いろいろ踏まえなくてはならないことが
多すぎてなかなか大変だとは思いますががんがってください。
応援しております。
0216デフォルトの名無しさんNGNG
>>215
向こうで言ったれよ
0217デフォルトの名無しさんNGNG
俺もそうおもた
0218デフォルトの名無しさんNGNG
gc#出ないの?
0219デフォルトの名無しさんNGNG
俺もそうおもた
0220デフォルトの名無しさん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
glibcコンパイル時は-fomit-frame-pointerを付けてはいけないのか。
くそー、俺の二時間を返せ。
0223デフォルトの名無しさんNGNG
プリコンパイルヘッダ対応マダー?
0224デフォルトの名無しさんNGNG
>>223
自分でビルドすればいいじゃん。
0225デフォルトの名無しさんNGNG
>>224
ハァ?
0226デフォルトの名無しさんNGNG
>>225
http://gcc.gnu.org/gcc-3.4/index.html
使えてるよ。
0227225NGNG
>>224
スマソ
>>226
サンクス
0228デフォルトの名無しさんNGNG
Appleのgccは独自のプリコンパイルヘッダ対応付いてるよ。
cpp-precompってやつ。
0229デフォルトの名無しさんNGNG
conio.hをインクルードするには、
コンパイルするときにどのようなオプションをつければいいんですか?
0230デフォルトの名無しさんNGNG
インクルードするのにオプションは必要ない
0231デフォルトの名無しさんNGNG
いや、そのconio.hがサーチパスに入っていない場合は、-I<そのパス>が必要か
0232229NGNG
>>231
stdio.hと同じディレクトリに入ってるんですが。
0233デフォルトの名無しさんNGNG
では、>>229が抱えているのは別の問題。
0234デフォルトの名無しさんNGNG
gcc3.4.0をインストールしてプリコンパイル済みヘッダを使おうとしたら
test.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デフォルトの名無しさんNGNG
GCC 3.4.0 リリースage
ftp;//ftp.gnu.org/gnu/gcc/gcc-3.4.0/
0236デフォルトの名無しさんNGNG
アナウンスはまだ出てない?
ChangeLog
ttp://gcc.gnu.org/gcc-3.4/changes.html
0237236NGNG
あ、ChangeLogじゃないか。
変更点一覧だ。
0238デフォルトの名無しさんNGNG
>>236
出てないけど、前もそうだったし、まぁいいかな、と。
0239デフォルトの名無しさんNGNG
アナウンスがない以上はバイナリの差し替えもありうるということですよね。
0240デフォルトの名無しさんNGNG
3.3.3を上書きしちゃったから確認はしてないけど、プリコンパイルヘッダ無
しでも3.3.3よりC++のコンパイルが速くなった気がするなぁ。パーザを書き変
えた効果がこんな所にも出てるのかな。
0241デフォルトの名無しさんNGNG
> GCC 3.4 automatically places zero-initialized variables in the .bss section on some operating systems.
> 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
>>239
ある程度ミラーされるまでアナウンスしない方針だったような。
今週中には出ると思うが。


0243デフォルトの名無しさんNGNG
>>241
2行目以降も引用して「うれしいな〜」と言っているところを見ると…アンチEmacs? (w
0244デフォルトの名無しさんNGNG
vivavi
0245デフォルトの名無しさんNGNG
-pedantic を愛用してる俺はダメ人間ですか?
0246234NGNG
リリース版入れたけどダメだ orn
cygwin未対応なのかな
0247デフォルトの名無しさんNGNG
gccがC#に対応するなんてことあるの?
Unix上でC#使ってみたいんだけど・・・
0248デフォルトの名無しさんNGNG
monoじゃだめなの?
0249デフォルトの名無しさんNGNG
>>246
それ以前にウチのCygwinでコンパイル通んないんすけど・・・。
0250247NGNG
>>248
ありがと。既にもうあったんだ・・・調べてみます。
0251デフォルトの名無しさんNGNG
>>222
そうなの?
0252デフォルトの名無しさんNGNG
gcc 3.4:
* 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デフォルトの名無しさんNGNG
それ iconv 必須
0254デフォルトの名無しさんNGNG
iconvがあればいいの? じゃあ話は簡単だね。
0255デフォルトの名無しさんNGNG
>>252
とりあえず cygwin について。
ttp://www.okisoft.co.jp/esc/cygwin-5.html#5.3
とりあえずだめぽ?
0256Richard StallmanNGNG
GCC & GNU Toolchain Developers' Summit
June 2-4th, 2004, Ottawa Congress Centre, Ottawa, Canada
ttp://www.gccsummit.org/2004/

みんな逝くのだ!
0257デフォルトの名無しさんNGNG
>>256
チョトだけ遠いな
0258デフォルトの名無しさんNGNG
GNUのネ申が言うんだからしかたない漏れも逝くか。
0259デフォルトの名無しさんNGNG
>>256に逝かない奴は、GPL違反
0260デフォルトの名無しさんNGNG
gcc3.4のC99規格対応表
ttp://gcc.gnu.org/gcc-3.4/c99status.html
0261デフォルトの名無しさんNGNG
なんでcomplex (and imaginary) support in <complex.h>がBrokenなんだろ
0262デフォルトの名無しさんNGNG
ちゃんと理由書いてあるやん。
0263デフォルトの名無しさんNGNG
ぐはぁっ。ほんとですね。イッテキマス…
0264デフォルトの名無しさんNGNG
GCCは3.0からC++ISO準拠したと聞きましたが
ISO以外の形式はコンパイルできないのですか?
0265デフォルトの名無しさんNGNG
>>264
ISO以外の形式とはなんだ。
誰かの脳内にある俺様C++をGCCの中の人がわかるわけないだろ。
0266デフォルトの名無しさんNGNG
>>265
例えば
cout << "文章" << x << "文章2" << endl;
(xは変数)
でコンパイルすると「stray '\33' in program」「文字の終端を欠いています」
と出てコンパイルできません。

cout << "文章" << x;
cout << "文章2" << endl;
とするとうまくいくのですが
0267デフォルトの名無しさんNGNG
foo.cc:
#include <iostream>
using namespace std;
int main() { int x = 10; cout << "文章" << x << "文章2" << endl; }
% g++ foo.cc
% ./a.out
文章10文章2

うまくいくけど?
0268デフォルトの名無しさんNGNG
>>266
SJISか?
0269デフォルトの名無しさんNGNG
解決しました。
文字コードの問題だったようです。
エディタを変えたら無事コンパイルできました。
0270いやーんNGNG
>>266
> cout << "文章" << x << "文章2" << endl;
> (xは変数)

これがISO C++に適合したプログラム断片じゃないと思ったわけだ…
0271GCCerNGNG
これ知ってたか?
-fpreprocessed
0272デフォルトの名無しさんNGNG
>>270
全ては方法的懐疑に基づく訳ですな
0273デフォルトの名無しさんNGNG
それでgcc3.4はどうよ? > 使用してる奴
0274デフォルトの名無しさんNGNG
以下を実行すると..
gcc -###
0275デフォルトの名無しさんNGNG
RH9付属のgcc-3.2.2でgcc-3.4をmakeできた人いる?xgccができたあたりでICEしちゃうんだけど..
0276デフォルトの名無しさんNGNG
gcc -finput-charset=sjis -fexec-charset=sjis testsjis.c -o testsjis
内部で\がすべて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
>>277
解決方法ではないんだが、
ISO/IEC 9899:1999 (C99規格) の§7.12.3.4 によると、isnanはマクロとなっているね。だからとりあえずstd::は不要だ。
0279デフォルトの名無しさんNGNG
>>276
長らくバックスラッシュを \ で代用していたことの弊害が本格的に出てきたヨカーン。
スレ違いだけど、本質的な解決策ないよね。gcc 的にはアドホックな解決でいいんだろうけど。
0280277NGNG
>>278
> 解決方法ではないんだが、
> 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デフォルトの名無しさんNGNG
だからマクロだっての。
0282ヽ(´ー`)ノ ◆.ogCuANUcE NGNG
>>280
#include <cmath>
int main () {double d (NAN); isnan (d); return 0;}
0283277NGNG
>>281
> だからマクロだっての。
すみません.
リンカの話,忘れてください.(エラーでなくなった.)
0284277NGNG
>>282
test1.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
>>276,>>279
それってエディタが全角に変換してない。
0286デフォルトの名無しさんNGNG
>>277
gcc3.3.1はうまくいった
$ g++ test.cpp
$
0287277NGNG
>>286
> gcc3.3.1はうまくいった
これ,Mac OS X上のgccでしょうか?
0288デフォルトの名無しさんNGNG
>>285
んな話じゃない。Shift-JISはISO646IRVではなくてJIS X 0201(のLeftHalf)を仮定してるって話だよ。
ゲラゲラ
0289デフォルトの名無しさんNGNG
必死だなw
0290286NGNG
>>287
Linux
0291デフォルトの名無しさんNGNG
>>285
>それってエディタが全角に変換してない。
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)を元に戻してくれるみたい。なぜ?
0292277NGNG
>>290
> Linux
ああ,やっぱそうですか.
私の所も,Linux(gcc 3.3.3)ではうまく行くんですよね.
う〜ん.OS Xの人はどうしてるんだろう?
0293デフォルトの名無しさんNGNG
Panther (10.3.3) 使ってるけど同じエラー出た。
$ 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
> >>288
> euc-jpだと\(0x5c)を元に戻してくれるみたい。なぜ?

EUC-JPは、規格上は0x5cがバックスラッシュ(ISO646IRV)なんだよ。実際にどう表示されるかは
実装の問題で。
0295277NGNG
>>293
> Panther (10.3.3) 使ってるけど同じエラー出た。
あっ,ども.
やっぱりそうですか.
とりあえず,__isnanでも使って凌いどくか.
0296デフォルトの名無しさんNGNG
で、何が問題なのさ。>>288
0297デフォルトの名無しさんNGNG
>>296
288に書いてあるままなんだがな・・・・
問題は、
>gcc -finput-charset=sjis -fexec-charset=sjis testsjis.c -o testsjis
>内部で\がすべて2バイトコードに変換されてしまいます。
>libiconvのsjis->utf-8がよろしくないようで
これがlibiconvのバグでもなんでもなくて、Shift-JISというエンコーディングの
仕様に従った動作だという点だな。
279もそう言っている。
0298デフォルトの名無しさんNGNG
288じゃないけど。
Shift_JIS の 0x5c は \ なんだけど、C / C++ のソース中ではバックスラッシュと同じ働きをするという
日本ローカルな慣例が i18n と馴染まないということが問題なのでは(←ローカルだから当然か・・・)?
0299デフォルトの名無しさんNGNG
要するに'¥'と'\'が同居できないって事?
0300デフォルトの名無しさんNGNG
>>299
> 要するに'¥'と'\'が同居できないって事?
EUC-JP, Shift-JIS, ISO-2022-JPで日本語を書く限りは同居できない。
直接UTF-8で書けば同居できる。
0301ヽ(´ー`)ノ ◆.ogCuANUcE NGNG
>>295
これか?
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
>>300
>直接UTF-8で書けば同居できる。
問題は解決しました。
0303デフォルトの名無しさんNGNG
>>302
ウム。
0304デフォルトの名無しさんNGNG
ちょっとまてよ、同居する必要ってそもそもあるの?
コンバージョンをしないなら問題ないはずだが。
0305デフォルトの名無しさんNGNG
ウム。
0306デフォルトの名無しさんNGNG
>>304
毛唐はなんでもUTF-8に正規化したがるものさ。
0307デフォルトの名無しさんNGNG
>>297-298
日本では歴史的に EUC と SJIS 間での変換の際 0x00〜0x7f はそのままに
してきたし、UTF への変換でもそうなったところで誰も困らないのに、
GNU libiconv では規格バカが譲歩してくれない。

sjis ではなく cp932 を使えばとりあえず回避できるけどね。
0308デフォルトの名無しさんNGNG
ちなみに、自前で漢字コードコンバータを持ってる Perl 5.8 では
http://www.perldoc.com/perl5.8.0/lib/Encode/JP.html#BUGS
こんな感じで不要な変換を行わないことになってる。
0309277NGNG
>>301
> 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
>>307
"sjis->utf-8"の場合のlibiconvの処理を変更して(゚д゚)ウマー
ではだめ?
0311デフォルトの名無しさんNGNG
>>307
いやしかし gcc 的にはどうであれ、世間的には圧倒的に \ は円記号として使われてるわけで・・・
UTF-8 にしたらバックスラッシュで表示されますた、ではまずいような。
0312デフォルトの名無しさんNGNG
\(゚�听)イラネ
0313デフォルトの名無しさんNGNG
>>312
\オレニクレ
0314デフォルトの名無しさんNGNG
そこで trigraph ですよ。
main() { printf("表示??/n"); }
% gcc -trigraphs -finput-charset=sjis -fexec-charset=sjis sjis.c
% ./a.out
表示
0315デフォルトの名無しさんNGNG
そこで trigraph ですよ。
main() { printf("表示??/n"); }
% gcc -trigraphs -finput-charset=sjis -fexec-charset=sjis sjis.c
% ./a.out
表示
0316デフォルトの名無しさんNGNG
うにこーどの円マーク: ¥
バックスラッシュ: \
0317デフォルトの名無しさんNGNG
universal character names(\u)じゃダメ?
0318276NGNG
>>307
cp932を指定したら'\'を0x5cで処理してくれました。
0319デフォルトの名無しさんNGNG
>>307
> 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
>>318
それは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
>>319
規格は規格として、現実的には
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
圧倒的シェアを誇っている Windows の CP932 が、0x5C を「見た目は円マーク」なのに「ファイル名、
パス等として使われる場合には ASCII のバックスラッシュと同じ」って扱いにしてるんだよね。
C / C++ その他昔ながらの応用ではみんなそうか。

今後どうなるべきなの?
UTF-8 対応のエディタ使って、0x5C はバックスラッシュで入力(表示もバックスラッシュ)、
円マークはえーとコード分からないけど Unicode の円マークで入力(表示も円マーク)となるべき?

素直に EUC 使って\は2バイトで書くほうがいいような気が・・・
0323デフォルトの名無しさんNGNG
微妙に話題がスレ違いになっているのは気のせいですか?
っていうか文字コード関連のスレのほうがよいと思われ。
【UTF8】文字コード変換【SJIS】
http://pc5.2ch.net/test/read.cgi/tech/1063177450/l50
0324デフォルトの名無しさんNGNG
やっとcygwinでPCHでけた。
234のソースを使用
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デフォルトの名無しさんNGNG
>>324
pch(・∀・)イイ!!
0326デフォルトの名無しさんNGNG
>>324
うーむ、やはり速くなってるな
0327234NGNG
>>324
どうすればできるようになるんですか?
0328デフォルトの名無しさんNGNG
>>234
cygwinでは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);
}
上のように書き換える。

以上
 
0329234NGNG
>>328
レスありがとうございます。
早速やってみます。
結果報告はのちほど。
0330234NGNG
>>328
hooks.cは>>331のようにしてみましたが
  g++: 内部エラー: Segmentation fault (プログラム cc1plus)
  完全なバグレポートを送ってください。
と言われてしまいました。

ひたすら fprintf() をはさんで調べたところ、
どうやら ggc-page.c の clear_marks() の内側のループの
  size_t num_objects = OBJECTS_IN_PAGE(p);
でこけているようです。

どこが間違っているんでしょうか?
0331234NGNG
void *buffer_used_for_PCH_on_cygwin = NULL;
#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デフォルトの名無しさんNGNG
>>330
ggc-common.cで
#undef HAVE_MMAP_FILE
を入れてる場所がよくないような?

includeがすべて終わった後にundefしてみて
0333234NGNG
>>332
そうしてるんですけどダメです。#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デフォルトの名無しさんNGNG
>>333
hooks.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);          <−−−ここを通過するはず
}


0335234NGNG
>>334
そこは通過するんですけど、その後の ggc_pch_read() で
Segmentation Falte
なんです。
0336デフォルトの名無しさんNGNG
>>336
gccをmakeし直したらヘッダーファイルを再度PCHしないとだめだよ。
hook_void_voidで確保したアドレスが違うとエラーになる可能性がある。
0337デフォルトの名無しさんNGNG
gccのオプションで構造体のメンバ間をpaddingさせないようにする
オプションは何ですか?
0338234NGNG
>>336
それもやってるんですけど...OTL
0339デフォルトの名無しさんNGNG
>>337
attributeで可能だったような気がする。info読め。
0340デフォルトの名無しさんNGNG
>>337
struct foo {
chara;
shortb;
intc;
} __attribute__((__packed__))
0341デフォルトの名無しさんNGNG
>>339,>>340
タンクスでつ
0342デフォルトの名無しさんNGNG
configureが違うからか?
$ /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
0343234NGNG
>>342
かもしれませんね。
それでやってみます。
0344234NGNG
やり直してもダメでした。
0345デフォルトの名無しさんNGNG
変更したソース
ttp://up.atnifty.com/upload/file/20040430035201_.zip

gccのソースをオリジナルに戻して、やってみて

これで駄目なら、あきらめましょう。
0346234NGNG
>>345
ありがとうございます。
ダウンロードさせていただきました。

報告は後ほど。
0347234NGNG
>>328>>332>>334>>336>>342>>345
できました!
ほぼ丸一日お付き合いいただきありがとうございます。

でもなんで自分でいじったのはダメだったんだろう...
分かり次第報告させていただきます。(ウザイですか?)
0348デフォルトの名無しさんNGNG
わくわく
0349234NGNG
あ、わくわくされてる。
報告はたぶん明日以降になると思います。
(きっとすごく単純なとこではまってたんだろうなぁ)
0350234NGNG
Segmentation faultが起こった分かりました。
hook_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デフォルトの名無しさんNGNG
↓何事も無かったようにどうぞ
0352デフォルトの名無しさんNGNG
皮はシャッキリシコシコ
噛むと美味しいおつゆがピュッ
0353デフォルトの名無しさんNGNG
-finline と -finline-functions って同じ意味でしたっけ?

0354デフォルトの名無しさんNGNG
ttp://www.sra.co.jp/wingnut/gcc/gcc-j.html
0355353NGNG
>>354
マニュアル類には-finlineについて記述がないんですが、指定しても
エラーにならんのですよね。
0356デフォルトの名無しさんNGNG
gcc -v --help
0357デフォルトの名無しさんNGNG
>>356
サンスコ!
0358デフォルトの名無しさんNGNG
gccのoptionてアホだよな
0359デフォルトの名無しさんNGNG
>>358
日本語書くときに促音を省略してしまうキミもね。
0360デフォルトの名無しさんNGNG
>>359
日本語を書くときに助詞を省略してしまうキミもね。
0361デフォルトの名無しさんNGNG
>>358
それを言うだけでageてるキミもね。
0362デフォルトの名無しさんNGNG
オマエモナーって死語?
0363デフォルトの名無しさんNGNG
最近はオマエガナーがナウいです
0364デフォルトの名無しさんNGNG
最近のヤングにはオマエガナーがとてもナウいんです。
0365デフォルトの名無しさんNGNG
ナウなヤングage
0366デフォルトの名無しさんNGNG
ほとんどビョーキなスレはここですか
0367デフォルトの名無しさんNGNG
tree-ssaはいつメインラインと統合されるんですかね
0368デフォルトの名無しさんNGNG
tree-ssaって何?
0369デフォルトの名無しさんNGNG
>>368
ttp://people.redhat.com/graydon/g++-report/
0370デフォルトの名無しさんNGNG
>>368
よくわかんない、詳細希望
0371デフォルトの名無しさんNGNG
>>370
ttp://gcc.gnu.org/projects/tree-ssa/
0372デフォルトの名無しさんNGNG
>>371
ありがと、わかったようなわからないような感じです。
0373371NGNG
>>372
コピペした者として、喜んでいいのかよくわからないレスをありがとう。
0374デフォルトの名無しさんNGNG
たれかC++相談室のネタに答えてやれ
0375デフォルトの名無しさんNGNG
C++相談室はVC++マンセーのようだがgccのコード品質ってどのくらい?
0376デフォルトの名無しさんNGNG
あの例、gcc-3.4 だともうちょい良くなったりしないもんかなー
0377デフォルトの名無しさんNGNG
tree-ssaとやらが組み込まれたgccでの結果も見たいもんだ
0378デフォルトの名無しさんNGNG
>>372
http://www.is.titech.ac.jp/~sassa/lab/papers-written/02M37130.pdf
とか?(関係あるのかないのかよくわからんのだけどw
0379デフォルトの名無しさんNGNG
FixedPoint f(1, 50); // 1.50
return 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
>>379
サンクスコ

> 掛け算入ったやつはダメダメ。
gcc-3.3以前よりもっと駄目??
0381デフォルトの名無しさんNGNG
方や世界で一番大きいソフト会社の製品、方や歴史はあるとは言えただの
ソフトだから当然と言えば当然。
でも、それがどの程度、普段書くコードの速度低下をもたらすかだけどね・・・
C++で数値計算やってる俺の場合、
インテルコンパイラが第一。わずかに劣ってgcc。めちゃくちゃ遅いVC7.1
ってところ。iccと同じオプションなのにVCは遅くて仕方がないんだけど
なんか使い方間違ってるんかな?
まぁWinなんてたまにしか使わないからgccだけでいいんだけどね。
0382デフォルトの名無しさんNGNG
gcc はオプションで結果が全然違うぜ!
自分の目的にあった適切なオプションを選択しろよ!
0383デフォルトの名無しさんNGNG
浮動小数点数値演算(複素sin/cos等あり)で速度 gcc3.0 << VC++6.0
-ffast-mathつけるとgcc3.0 ≧ VC++6.0
てなことがあった(もちろん最適化ありで)。
VC++6.0の浮動小数点は-ffast-math相当じゃないかと疑っている。
面倒くさいから試してないけど。
0384デフォルトの名無しさんNGNG
>>380
自分が試した範囲だと、gcc-3.4.0 だとオプションをどーやっても真面
目に掛け算するコードを吐いてました。

もちろん、一般的に gcc-3.4 のほうが最適化がダメ、ということでは
ないですけどね。gcc-3.3.x で __attribute__((always_inline)) を付
けないと展開されなかった関数オブジェクトが gcc-3.4.0 では指定な
しでも展開してくれるようになって、自分は嬉しい。

0385デフォルトの名無しさんNGNG
gcc使う奴はオプションを適切に設定していればいいわけで、
デフォルトで最適な状態はありえないと考えればいいのでは。
0386デフォルトの名無しさんNGNG
ひとつだけいえるのはintelもMSも他でさんざん儲けてるんだからコンパイラなんか無償配布しろって琴田
マジでそう思うのは俺だけ?
0387デフォルトの名無しさんNGNG
>>385
Intel も Microsoft もコンパイラは無償配布してますよ?
0388387NGNG
みすった、>>386 ね
0389デフォルトの名無しさんNGNG
インテル版はお試し期間中の無料配布はしてるがそれをただとはいわんだろ?
http://www.xlsoft.com/jp/products/intel/prices.html
0390デフォルトの名無しさんNGNG
ここわ、GCCすれです。
そこを考慮して、改めて>>391さんどうぞ。
0391デフォルトの名無しさんNGNG
インテルのGCCはないの?
0392デフォルトの名無しさんNGNG
お見苦しい発言を失礼しました。
では改めて>>392さんどうぞ。
0393デフォルトの名無しさんNGNG
→↓
↑←
0394デフォルトの名無しさんNGNG
iccのlinux版は無料だよ
確か。
0395デフォルトの名無しさんNGNG
このスレではgccマンセーのようですが、
件の最適化についてはgcc3.4でも改善されていないということでFA?
0396デフォルトの名無しさんNGNG
>>394
非商用限定だけどね
0397デフォルトの名無しさんNGNG
>>396 lic 要らないの?
0398デフォルトの名無しさんNGNG
FreeBSDでインストールしようとしたけど駄目だった。動いた人居る?
0399デフォルトの名無しさんNGNG
3.4も3.5もNetBSDで普通に使ってます
0400デフォルトの名無しさんNGNG
>>395
> このスレではgccマンセーのようですが、
> 件の最適化についてはgcc3.4でも改善されていないということでFA?
gcc3.4のほうが悪化しているでFA.
0401デフォルトの名無しさんNGNG
>>399
コンソール画面からインストーラ起動するとログアウトする。
atermから起動するとaterm自体が落ちるんだけど。そんなことない?
0402デフォルトの名無しさんNGNG
>>384
> >>380
> 自分が試した範囲だと、gcc-3.4.0 だとオプションをどーやっても真面
> 目に掛け算するコードを吐いてました。

$ rpm -qa|grep icc
intel-icc7-7.1-6

だと(最新版じゃないが)、mov $5, -4(%ebp) ひとつにコンパイルされました。
VC++と同じく問題なしですね。

0403デフォルトの名無しさんNGNG
数日前にUNIX板で質問したのですが、回答いただけなかったのでこちらでも質問させてください。
2度目の皆様すみません。

nmしたときやg++ -Sしたときに、コンストラクタやデストラクタに
Foo::Foo[in-charge]() のように[なんちゃら]と注釈が入っている場合がありますけど、
これって何ですか?どこかに解説ありませんか?

in-charge, not-in-charge, in-charge deleting などがあるようで...
0404デフォルトの名無しさんNGNG
真面目に掛けてほしい状況の方がふつーのプログラムでは多いんじゃないの?
プリプロセッサだけでも計算できる定数じゃなくて変数をセットしたときの実動作では
ほとんどネグれる程度だったり。そのコンパイラの苦手なソースにたまたま出くわしたという
ことじゃないの?
0405デフォルトの名無しさんNGNG
>>403
libiberty/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
>>405
ありがとうございます。
なるほど…
0407デフォルトの名無しさんNGNG
>>404
クロスコンパイルも視野にいれると、
定数のコンパイル時計算は意外と面倒で、
最適化(定数伝搬&ループ外移動)のことを考えるとあまり効果がない。

昔のgccは結構強引なことをやった時期もあって、
(doubleの交換律による定数まとめなど)
ずいぶんと批判されてましたね。
0408デフォルトの名無しさんNGNG
俺の場合、gccはVCより明らかに高速なことが多い。
でもiccには負ける。
CPU設計するときに少なくともCコンパイラは同時に開発するだろうから、
インテルが出すコンパイラが他メーカより遅いのは逆に問題ある罠。
0409デフォルトの名無しさんNGNG
gdbで実クロック数のカウント表示ってできないのかな?
0410デフォルトの名無しさんNGNG
今時のCPUはICEでも無理。
0411デフォルトの名無しさんNGNG
それはマルチスレッドの場合でパイプラインが深いだけならカウントできるだろ?
0412デフォルトの名無しさんNGNG
>>411
キャッシュヒットとか page fault もあるし、単一スレッドのプログラムでも
裏でクロック割り込みとか I/O まわりの割り込みが発生してるから。
0413デフォルトの名無しさんNGNG
>>410 君ICE触ったことないね。ICEじゃ無理だよ。直接CPUが載ってるわけだから。
HWで動いてる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デフォルトの名無しさんNGNG
>>413
Z80くらい昔のCPUのICEは出来たよ。
0416デフォルトの名無しさんNGNG
>>414
あのねメーカから出てるシミュレータ/デバッガでは当然できる機能なんだよ。
できなきゃ組み込みソフトなんて製品にならんぜ。
gdbがやってないのはそれはgdbの都合
0417デフォルトの名無しさんNGNG
>>416
当たり前でしょ。gdbの話してんのよ。アフォ?
0418デフォルトの名無しさんNGNG
>>415
ICE(エミュレータ) っていうのはハードウェアが載ってることは知ってるよね。
それをカウントしようとすると相当手間なのよ。
そんなことしなくても実効命令のクロックを順番に加算していけば算出できるんだよ。
だからシミュレータなら当然できる機能ってこと。
実際俺が使ってるSHやDSP(54X)デバッガにはその機能があるし。
0419デフォルトの名無しさんNGNG
>>417
クロック数のカウントの話をしてんのにハードウェアエミュレータの話をするところが間抜けだいってるんだよ
わからんのかね。馬鹿かお前。
0420デフォルトの名無しさんNGNG
>>418
> そんなことしなくても実効命令のクロックを順番に加算していけば算出できるんだよ。
そんな時代もあったなぁ…・・・
0421デフォルトの名無しさんNGNG
まともなシミュレータも知らん奴は紛らわしからコメントするな。
0422デフォルトの名無しさんNGNG
電波はコメントするな
0423デフォルトの名無しさんNGNG
さぁ、盛り下がってまいりました。
0424デフォルトの名無しさんNGNG
ICE?ナニソレおいしいの?
0425デフォルトの名無しさんNGNG
人間が作ったハードウェアのクロックも数えられないと思ってる時点でも一回勉強しなおしたほうがいいんじゃないか->421
それが評価できない時点でCPUの設計はできんだろうが。
0426デフォルトの名無しさんNGNG
>>421
君のCPUの設計はクロックすら不確定性関係が成立してて評価不能なようだな。
0427デフォルトの名無しさんNGNG
マルチCPUで複数クロックで動いてる場合はともかく単一クロックで動作してる場合
評価できない方がおかしい。できないと思ってる奴は手を抜いてる(抜かれてる)ことに
気づかないおめでたい奴。
0428デフォルトの名無しさんNGNG
>>427
単一クロックの元で動作してるという仮定の下でクロック数をカウントするってことだな。
0429デフォルトの名無しさんNGNG
>>427
> 単一クロックで動作してる場合評価できない方がおかしい
環境による。

プリエンプティブマルチタスク OS だとまず不可能だが、優先度順で実行タイミングを
完全に制御できるリアルタイム OS で、かつキャッシュヒットも完全に制御下における
なら見積もれる。

ただ正確な評価を行うためには CPU の外部仕様ではなく、内部仕様に関する詳細な
知識が必須だから gdb に期待するのはアレだ。
0430デフォルトの名無しさんNGNG
>>425=426=427
まぁ餅憑け
0431デフォルトの名無しさんNGNG
(・∀・)ニヤニヤ
0432デフォルトの名無しさんNGNG
>>429 
ヲイヲイ。デバッガでOSの仕様を考慮してるものがあれば、教えてくれよ。
0433デフォルトの名無しさんNGNG
デバッガは通信機能はOS/モニタを意識してる。それをいうならソフトウェアシミュレータだな。
OSというのはあくまでオーバーヘッドがないことを前提としてる。というか時間計測するん
じゃなくてクロック数で評価するんだから当然可能なはず初期キャッシュは当然ヒットなしが前提だろ。
0434デフォルトの名無しさんNGNG
(・∀・)ニヤニヤ
結局話についていけなくて笑っているしかございません。
0435デフォルトの名無しさんNGNG
当然すぎ
0436デフォルトの名無しさんNGNG
で、結局 >>409
はどういう環境で開発してて、なんで実クロック数のカウントを
とりたいと思ったんだ?
0437デフォルトの名無しさんNGNG
gdbの sim は HDLシミュレータでいうところの機能シミュレータなんだな。
実時間シミュレータ対応でない。
modelsimぐらいの機能は持ってくれるとうれしいんだが、
当然CPUメーカにはデバイス情報も開示して欲しいな。
0438デフォルトの名無しさんNGNG
>>436
それは当然必要だろ?それによって必要なリソースの条件が変わってくる。
例えばあるタスクを10mxで完了したい。そのとき何MHzのクロックを突っ込めば
よいかが設計段階で算出できる。ちなみに消費電流はクロックに対してリニアに
変化する。シビアなモバイル関係のエンジニアならだれもが経験してること。
10mA変われば製品に対する市場評価が変わる。
現状のgdbではその評価ができないってことだな。
0439デフォルトの名無しさんNGNG
×10mx -> ○10ms
0440デフォルトの名無しさんNGNG
>>438
CPUの命令数まで確定しているのに設計段階とはこれ如何に。
0441デフォルトの名無しさんNGNG
>>438
はぁ?君まともな製品開発したことないね?命令が確定して初めて、突っ込むクロックが決まるんだよ。
ちなみにロジックデバイスの周波数っていうのはMAXが決まってるだけで最低周波数に関しては
かなりの幅があるんだよ。PLLがなければ下限がないものもある。どれだけ低いクロックで済ませ
られるかが設計の腕の見せ所じゃねぇか。
0442デフォルトの名無しさんNGNG
(・∀・)ニヤニヤ
0443デフォルトの名無しさんNGNG
>>436
CPUぐらい固定してくれないと話進まないよね。

0444デフォルトの名無しさんNGNG
>>418
> そんなことしなくても実効命令のクロックを順番に加算していけば算出できるんだよ。

安いCPUばっかり相手にしているんですね。
0445デフォルトの名無しさんNGNG
どかーん!
(⌒⌒⌒)
 ||

/ ̄ ̄ ̄ ̄ ̄\
| ・ U      |
| |ι         |つ
U||  ̄ ̄ ||
   ̄      ̄
もうおこったぞう
0446デフォルトの名無しさんNGNG
>>444
> 安いCPUばっかり相手にしているんですね。
それはそれで辛い仕事のような気がする。
0447デフォルトの名無しさんNGNG
>>444
なーんも知らんようだが、メモリのアドレスデコーダも外付け、
ユーザが直接触れるのは古典的なx86ベースのPentiumプロセッサを
使って設計することがどれほど面倒か、わかってるか?
ちなみにPentiumを搭載したPC以外の製品がどういう状況にあるか
わかって言ってるんだろうな?->学生ちゃんよ
0448デフォルトの名無しさんNGNG
実際Intelが一般に公開してる資料だけで、
gdb(じゃなくてもいいけど)に正確にクロック数える機能付けたせるのか?
無理だろ。
できるなら作ってくれよ。頭下げて使わせてもらうから。
0449デフォルトの名無しさんNGNG
>>447
だから、環境を先に特定しようよ

x86 で Win32 なのか、z80 で OS どころかモニタもない環境なのかで話がぜんぜん
違うんだからさ。
0450デフォルトの名無しさんNGNG
>>448 現状のGDBではファンクションシミュレーションしか出来ず、
実クロックシミュレーションに対応してない仕様であるということだけ。
CPUのクロックを"カウントできない"ってこととはまったく意味が違う。
0451デフォルトの名無しさんNGNG
>>449 だから、シミュレータのクロック数のカウントはOSには依存しないんだよ。
逆にOSのオーバーヘッドを考慮したシミュレータがあるなら教えてくれよ。
0452デフォルトの名無しさんNGNG
>>450
そもそも発端の >>414 からして、無条件で「CPUのクロックを"カウントできない」とは
書いてないようだが。

>>414
> CPUのモデルごとにプロファイルを持って、
> CPUの内部を完全にエミュレートしないと。
CPU ベンダ以外がクロックを正確にカウントするのは無理だ、gdb にそれを期待するな
と言ってるだけでしょ?
0453デフォルトの名無しさんNGNG
>>451
Win32 みたいな環境で「クロック数」をカウントするのは意味ないからやめとけ、
という話だって。

ラウンドロビンではなく優先度順でスレッドを実行する環境でも、ハードウェア
アーキテクチャによっては意味ないし。俺が最近触ってるのは、メインメモリと
DMA コントローラが同一のバスを共有していて、しかも大量の DMA 転送を
行うのが前提のハードなんだけど、こういう状況だとメモリアクセスに要する
時間が予期できないから、厳密にクロック数を割り出すより実際のデータを
流しながらパフォーマンス測定せざるをえない。

で話が戻るが >>409 は何でクロック数をカウントしたいんだ?
0454デフォルトの名無しさんNGNG
>>452

410、412、414、429 あたりの馬鹿のコメントをよく読め。出来ないとアフォがほざいてるだろ。
出来ないのは現状のgdbの仕様ってとだけ。
0455デフォルトの名無しさんNGNG
>>447=>>454アフォ決定。
以下、心ある人は無視するように。
0456デフォルトの名無しさんNGNG
>>454
410 は ICE の話だし、412 は OS やモニタが介在する場合には正確にカウントできないと
条件をつけてるだけでしょ。残り二つも、一般に公開されている情報だけではカウントでき
ないから gdb では無理だと言ってるに過ぎない。

>>414
> CPUのモデルごとにプロファイルを持って、
> CPUの内部を完全にエミュレートしないと。

>>429
> ただ正確な評価を行うためには CPU の外部仕様ではなく、内部仕様に関する詳細な
> 知識が必須だから

Z80 とかならともかく、命令をいったん非公開のμop に展開してたり、分岐予測を行ってる
最近の CPU だと、そのメーカー以外は正確なクロック数は出せんでしょ。
0457456NGNG
>>455
了解。
0458デフォルトの名無しさんNGNG
>>445 ガキはスッコンでな。

>>453
 シミュレータでもたとえば割り込みまでシミュレートできるものがあるが、
そんな機能を多用するより実物持ってきてポートたたいてロジアナでモニタしたほうが
手っ取り早いってことは経験上わかりきってるだろ。それでもクロック数がカウントできれば
アルゴリムの優劣や、コンパイラのコード品質を知る上でプロファイラなんかを動かすよりは
るかに正確な評価が出来るってことよ。ロジック設計手がけたことあるならわかると思うが、
ファンクションシミュレートだけではきわめていい加減な評価でしかできない。フリーのHDL
コンパイラ/シミュレータが普及しないのもこのせい。
0459デフォルトの名無しさんNGNG
キャッシュヒットミスの見積もりに、
OSというかソフトウェアが影響する例だと、MIPSのR2000,R3000辺り。
ミスした時のハンドラはソフトウェアで記述だから。
0460デフォルトの名無しさんNGNG
>>458
誰も読まない長文お疲れさんです。
0461デフォルトの名無しさんNGNG
どうでもいいが
この話題はスレ違いじゃないのか?
0462デフォルトの名無しさんNGNG
>>458
その辺もプラットホームによりけりなんだよな。

小さいながらも命令キャッシュを持ってる CPU だと、コードから静的に算出される
見かけのクロック数より、関数の配置の方が効いたりする。パフォーマンスカウンタ
で命令キャッシュミスを集計しながら、手作業で関数を並び替えたヤな思い出が。
0463デフォルトの名無しさんNGNG
>>456
例えばXilinxははメンターにディバイスの遅延情報を公開してるし、
一般ユーザでもそれの情報を入手できる。クロックだけでなくクロックに
対する遅延評価もできる。逆にそれが出来なきゃ設計は出来ない。
技術敵に出来ないことと、仕様としてやってないことを正確に分けろってことよ。


>>460 お前には言ってることの1割もわからんだろうからごみコメント入れるな。
0464デフォルトの名無しさんNGNG
gdbってクロック精度まであるシミュレータの組み込みって出来ないんだっけ?
0465デフォルトの名無しさんNGNG
>>456
gdbではH8もサポートしてるんだが。
0466デフォルトの名無しさんNGNG
このスレではマルチスレッドCPUに対応した gcc しか相手にしません。
0467デフォルトの名無しさんNGNG
マルチスレッドCPU
0468デフォルトの名無しさんNGNG
ttp://pc.watch.impress.co.jp/docs/2003/1018/kaigai034.htm
0469デフォルトの名無しさんNGNG
>>464
できる。
デバッガ部分とシミュレータ部分は結構疎遠。
0470デフォルトの名無しさんNGNG
(・∀・)ニヤニヤ
0471デフォルトの名無しさんNGNG
>>(・∀・)ニヤニヤ
そういう意味ありげな言い方せずにはっきり指摘すればどうよ。というか的確な指摘できないんだろ。
0472デフォルトの名無しさんNGNG
>>471
スレ違いな話題はよそでやれってことじゃ?


0473デフォルトの名無しさんNGNG
>>471 gcc - gdb の話は決してすれ違いじゃないよ
0474デフォルトの名無しさんNGNG
「マルチスレッドCPU」とやらの話はスレ違いだろ
0475デフォルトの名無しさんNGNG
マルチスレッドを効率よく機能させるのにコンパイラが対応しないでどうするんだ?
0476デフォルトの名無しさんNGNG
>>463
> 例えばXilinxは

話の流れが理解できてないのか ?
それとも、単に知識を披露したいだけ ?
0477デフォルトの名無しさんNGNG
gccの最適化はIntelのやVC++よりもショボいという結論でいいよね。
0478デフォルトの名無しさんNGNG
しょぼいというか最適化処理そのものにバグがあるから使えない
0479デフォルトの名無しさんNGNG
>>476
>>463の書いてる程度のことを知識のひけらかしと思う時点でお前がエンジニアとしての常識なさ杉
0480デフォルトの名無しさんNGNG
>>479
唐突に「Xilinxはは」なんて書かれても、うざいだけだよ。
0481デフォルトの名無しさんNGNG
知らないことを書かれてしまって何もまともなコメントできずにウザイと捨て台詞吐くしかないわな。
0482デフォルトの名無しさんNGNG
>>477
407読め。Visual C++なんて7.1になってようやくまともになっただけ。

>>478
-O2でLinuxカーネルもFreeBSD全システムもコンパイルして大丈夫
0483デフォルトの名無しさんNGNG
>>482
i386しか使ったことない犬厨か。
他のarchで-O2してみろよ。バグバグだから。
0484デフォルトの名無しさんNGNG
>>483
そういうのを最適化そのものにbugがあると言うのか?
君は言うんだろうな。あーこりゃこりゃ
0485釣りだと思うけど、まさかマジなのかな ?NGNG
>>481
ププッ、逆切れ ?

で、なんで Intel じゃなくて、Xilinx の話を唐突に出すの ?
0486デフォルトの名無しさんNGNG
>>483
H8で-O2つけて問題なく使ってるよ。
0487デフォルトの名無しさんNGNG
>>483
それは特定のアーキテクチャ向け最適化でバグがあるだけじゃないの?
そのアーキテクチャの仕事する人は災難だが、一般化するほどのことでもない。
0488デフォルトの名無しさんNGNG
>>483
て言うか、どのアーキテクチャでどういうバグが書けない時点で、単なる煽りにしか見えないぞ。
0489デフォルトの名無しさんNGNG
日本で最初に製品にXilinxを採用した俺から言わせれば
>>463はまるでスレの流れを理解できていない勘違い野郎
0490デフォルトの名無しさんNGNG
>>日本で最初に製品にXilinxを採用した俺から言わせれば
当時のFPGA採用するような製品だから試作か実験機のたぐいだな。おーっとそれ製品にして金とってたって?
そりゃぼったくりでしょ。レベルの低いESレベルの製品世に出してることを公表して恥さらすなって!
0491デフォルトの名無しさんNGNG
>>483
gccってi386より前に68kでの実績があったことすら知らないみたいだね。
0492>>489 じゃないけど。NGNG
>>490
別にすべての製品が常に量産品というわけじゃないだろ。
俺の所でも、公的機関や親会社が使う試作品を設計/製造することもあるよ。
買う方から見れば試作品なんだろうけど、売る方としては一応製品だからね。
そういうのはころころ仕様が変わったりするし、納期とかもシビアだからある意味ぼったくるのは当然。
だってリスクがあるからね。
悔しかったらあんたもそういう仕事見つけて、ぼったくれるようになれよな。(藁
0493デフォルトの名無しさんNGNG
>>490
大量生産しか知らんのか?
たった1台しか生産しない製品なんてのもめずらしくないし
そうゆう業界での話。
まぁぼったくってるのには間違いないな。
0494デフォルトの名無しさんNGNG
ああ>>492に先を越されてたorz
0495デフォルトの名無しさんNGNG
じゃ、言わせてもうおう。

>公的機関

多分NTTあたりのことを言ってるのかな?

君が試作までしか手がけてないからそれで終わりと思ってるかもしれないが、それを使って規格作るための実験したり
最終的にはメーカにおいて量産までこぎつけてそれで利益を上げられるからこそボッタくり価格でも君のところに発注してるわけよ。
まぁ、量産する前には必ず試作フェーズがあるし、試作でシビアな実装も考えずにFPGAをいじってるのはそれは非常に
楽しいが電気屋として一番醍醐味あるのはやっぱりASIC起こすことだよ。RFの実装屋とかは違うこと言うだろうけどね。

>悔しかったらあんたもそういう仕事見つけて、ぼったくれるようになれよな。(藁
自営でもやってるの?そりゃ大金手にできるだろうし、俺も大金は欲しいが経営の才能なんてないもんでな、
あくまでもサラリーマンとして一定の給料定年までもらう方でやってくよ。それでも開発設計のダイナミズムを楽しんでるよ。
0496デフォルトの名無しさんNGNG
↑大手のリーマンでつか?
0497デフォルトの名無しさんNGNG
>>495
492じゃないからNTTとか自営とかわからないが・・・

489の製品とは、”ある物”の製造装置で、携帯装置のようなシビアな実装などは不要な世界。
納品先に納めた段階では試作品のような物だが、現場で最終調整をしてそれがそのまま製品となってしまう。
そんな造り方なんでフィールドでのリコンフィギャブル性に目を付けたわけだよ。
10年以上経つけどいまだに大手メーカーで稼動してます。

スレ違いにつきこれにて終了
0498デフォルトの名無しさんNGNG
g++3とgdbで、例外が送出されたらbreakするにはどうすればいいんでしょうか?
catch throw はサポートされていないようなんですが。

0499デフォルトの名無しさんNGNG
>>498 __cxa_throw あたりにブレークポイント
0500デフォルトの名無しさんNGNG
>当時のFPGA
電気スペックはともかくよく割れたな。
割れるというより、パッケージの背着が不十分ではがれるもの多数でびっくらこいた。Maid in Korea なんてこんなもんと思ってたらこの有様・・・鬱
0501デフォルトの名無しさんNGNG
>>499
できました。ありがとうございます。
catchされたらbreakは可能でしょうか?
0502デフォルトの名無しさんNGNG
GCC関するスレでスレ違いのframe warになってるスレはここでつか?
0503デフォルトの名無しさんNGNG
frame workの話をしているんでつ。
0504デフォルトの名無しさんNGNG
>>503
ワロタ
0505デフォルトの名無しさんNGNG
>>501
__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デフォルトの名無しさんNGNG
gcc.gnu.org�d�j?
0507デフォルトの名無しさんNGNG
>>506
つか、実体のsources.redhat.comが�d�j
0508デフォルトの名無しさんNGNG
-O[0-3]それぞれで、どの-f...フラグが有効になるのかを調べる方法はありますか?
3.4.0で-O3を使うと、いたるところでInternalCompileErrorが発生するので、
その原因となる最適化フラグだけ無効にしたいのです。
0509デフォルトの名無しさんNGNG
man gcc
0510デフォルトの名無しさんNGNG
$(GCC)/gcc/toplev.cの
parse_options_and_default_flags()
0511デフォルトの名無しさんNGNG
>>508
-fverbose-asm でコンパイルして.sの先頭のコメントを見るってのはどうよ?
0512デフォルトの名無しさんNGNG
ミス。
-fverbose-asm -S だ
0513デフォルトの名無しさんNGNG
Globalっていうソフト見てて思ったんだけど、
なんでGCCのパースしたデータを活用しないの?
なんでGCCのアドインみたいな形で作らないの?

VC++ユーザとしてはその辺り不可思議
0514デフォルトの名無しさんNGNG
ようやく使えるようになったVCユーザとして不思議なんだよな。
0515508NGNG
みなさん、ありがとうございます。
-fverbose-asm -Sで見る方法が手軽で解りやすかったです。
0516デフォルトの名無しさんNGNG
>>513
作者が別だから。。。
と言うかgccのパース結果(正確にはcc1等の出力)は
プリプロセッサの処理結果を元にしているから
Globalの様にソースコードの原型が必要な場合には適さない

これでいいか?
0517デフォルトの名無しさんNGNG
>と言うかgccのパース結果(正確にはcc1等の出力)は
>プリプロセッサの処理結果を元にしているから
>Globalの様にソースコードの原型が必要な場合には適さない

なるほど
0518デフォルトの名無しさんNGNG
Globalの#if〜の扱いは結構凄いぞ。
0519デフォルトの名無しさんNGNG
>>324
パッチ投げてあげて〜
0520324NGNG
>>519
?
0521翻訳器NGNG
パッチうpして〜!
0522519NGNG
>>520
Cygwin か MinGW のメーリングリストにぽいっと
0523デフォルトの名無しさんNGNG
>>522が教えてあげてよ。

本家の3.5.0でmmapに依存しない場合にも対応しようとしているみたいなので
それが出るまで待って見るのもいいかも?

MinGW用にはcygwin用にでっちあげたパッチだけじゃ不十分で
fopenを"w+"でファイルアクセスしているところでこけてます。
"w+b"に変更して、fcloseする手前でエラーになっているところを
コメントアウトすると一応PCH出来るようになりますよ。
0524デフォルトの名無しさんNGNG
>>506-507
状況説明
ttp://sources.redhat.com/ml/overseers/2004-q2/msg00251.html
大丈夫か?

0525デフォルトの名無しさんNGNG
assert 関数自作して、その中でコールスタックを表示したいのですが、
コールスタックを自作するとなるとかなり面倒な事になります。
(関数の始まりと終わりと return を全部いじる必要があるので)

GCC 3.3.2 使ってるんですけど、何かいい関数とか用意されてませんかね?
0526デフォルトの名無しさんNGNG
素直にデバッガ使いなさい
0527デフォルトの名無しさんNGNG
UNIXなら、
sprintf(buf, "gdb -x scriptfile %d", getpid());
system(buf);
じゃダメかねえ。(scriptfileにはwhere)
0528デフォルトの名無しさんNGNG
debuggerでいいならabort()してcore dumpする。
0529デフォルトの名無しさんNGNG
>>525
__builtin_return_address(LEVEL)じゃダメなの?
0530525NGNG
>>529
おおっ! リターンアドレスが取得できますね。
あとはそのアドレスがどの関数内にあるのかが分かればいいのですが...。

>>526-528
gdb の使い方よく知らないもんで...。
やっぱ勉強した方がいいですかね?
0531デフォルトの名無しさんNGNG
527に書いてあるじゃん
0532デフォルトの名無しさんNGNG
>>530
nlist()
0533デフォルトの名無しさんNGNG
フリーのGUI,devcppが最強すぎる・・・
0534デフォルトの名無しさんNGNG
Dev-C++ 4.9.8.9、クラスブラウザで例外出まくりじゃね?
0535デフォルトの名無しさんNGNG
4.9.8.9入れてない。
早速ホムペ行ってくる
0536デフォルトの名無しさんNGNG
ttp://up.isp.2ch.net/up/5f484bf3ca4a.zip
0537デフォルトの名無しさんNGNG
>>532
> nlist()
/usr/include/linux/a.out.h:struct nlist {
これですか?なにするもの?
0538デフォルトの名無しさんNGNG
なんで、man nlist とかやってみようと思わないんだろうか... ?
0539デフォルトの名無しさんNGNG
>>538
どういう意味ですか?
0540デフォルトの名無しさんNGNG
>>539
BSD使えってことなんだろう
0541デフォルトの名無しさんNGNG
> なんで、man nlist とかやってみようと思わないんだろうか... ?
犬酎なんでmanしてもみつからず。
0542デフォルトの名無しさんNGNG
>>541
Debianだけど、libelfg0-devを入れたら/usr/include/libelf/nlist.hがあった。
0543デフォルトの名無しさんNGNG
> Debianだけど、libelfg0-devを入れたら/usr/include/libelf/nlist.hがあった。
んで、なにしるものだった?
0544デフォルトの名無しさんNGNG
しらね、自分で調べれば。
http://landru.uwaterloo.ca/cgi-bin/man.cgi?section=3&topic=nlist
0545デフォルトの名無しさんNGNG
ナニゲに親切なDQN発見
0546デフォルトの名無しさんNGNG
nlist()じゃコールスタックは見れないと思いマスがね;-)
0547デフォルトの名無しさんNGNG
>525
gdbなんてコマンドいくつか覚えれば使えると思うけど。
覚えようとしないで、わざわざ手間掛かる方法を独自に
試すの事はあなたの人生に潤いを与えますか?
0548デフォルトの名無しさんNGNG
>>547
常にgdb上で動かせるケースばかりとは限らんだろが

0549デフォルトの名無しさんNGNG
アタッチもできないのか?
0550デフォルトの名無しさんNGNG
>>547
お肌に潤いを与えます。
0551デフォルトの名無しさんNGNG
>>548
Win?
0552デフォルトの名無しさんNGNG
>>551
マカ
0553デフォルトの名無しさんNGNG
>>546
こっちだろ。

>>530
> あとはそのアドレスがどの関数内にあるのかが分かればいいのですが...。
0554デフォルトの名無しさんNGNG
アスペクトC++でも使えよ
0555デフォルトの名無しさんNGNG
>>546
>>529-530,>>532
0556デフォルトの名無しさんNGNG
>>554
OpenC++でも使えよ
0557デフォルトの名無しさんNGNG
>>554
アスベストC++?
0558デフォルトの名無しさんNGNG
健康に悪そうだな、おい。

まあ、プログラミングよりましかも知れんが。
0559978NGNG
>>フリーのGUI,devcppが最強すぎる・・・

どこが最強なんだか・・・
あんなの使いもんにならんよ
0560デフォルトの名無しさんNGNG
>>978
C言語なら俺に聞け!の次スレ立てて
0561デフォルトの名無しさんNGNG
むつかしい
0562デフォルトの名無しさんNGNG
>>560
ちょっと待っていろ
0563559NGNG
>>562
はい、待っています
0564デフォルトの名無しさんNGNG
>>978
>C言語なら俺に聞け!の次スレ立てて
それすらもできないようでは、C言語も(ry
0565デフォルトの名無しさんNGNG
>>559
コンパイラはMingwだし、何か問題でも?
ソースはフォントとかカスタマイズすれば割といける
0566デフォルトの名無しさんNGNG
フリーのGUI,Eclipseが最強すぎる・・・
0567デフォルトの名無しさんNGNG
>>525
CCMALLOCというメモリーデバッガのパッケージがあって
そのなかにコールスタックを記録する機能がある。

ttp://www2.inf.ethz.ch/personal/biere/projects/ccmalloc/

このなかのcallchain.cというファイルにbacktrace()という
関数があってそれがまさにその実装。 #ifdefで中身は
x86依存バージョンと、gccの__builtin_return_addressを
使用した実装に分かれてる。 
0568デフォルトの名無しさんNGNG
Cygwin+gccで、バイナリーデータのみのピュアなファイルを作成したいのですが、どうしたらよいのでしょうか。

例えば、
struct SAMPLETYPE {
int a;
int b;
};
SAMPLETYPE hoge[] = { { 1,2 }, { 3,4 }, { 5,6 }, { 7,8 } };
のような、構造体の配列データ【のみ】のソースから、配列サイズと【全く同じ大きさ】のデータファイルを作りたいと思っています。

gcc ??? ??? sample.cpp
のように、コマンドラインのみでファイルを作成することはできるのでしょうか。
0569デフォルトの名無しさんNGNG
#include "sample.cpp"
(略)
 n = fwrite(hoge, sizeof(struct SAMPLETYPE),
 sizeof(hoge)/sizeof(struct SAMPLETYPE), f);
0570デフォルトの名無しさんNGNG
>>568
データファイルを作成する c プログラムを作って実行する。
0571568NGNG
>>569
すみません、書き忘れていたのですが、
「コンパイル環境はあるが、実行環境がない」という
特殊な状況のため、fwriteが使えないのです。
ですので、コマンドラインのみでどうにかならないかなーと思いまして。
0572デフォルトの名無しさんNGNG
intのsize, structのpadding, byte orderが合っていれば、
ローカルの環境でやってしまえばいいでしょう。
また、違っていてもプログラムで何とでもなりますし。
0573568NGNG
具体的な話になりますが、
1つのソース(配列データが書かれたもの)から、エンディアンが違う2種類のバイナリーデータを
つくりたいと考えています。
異なるプラットフォーム(MacとWinとか)でも、基本的にプログラムのソースコードは共通化したいので、
プログラムでエンディアンを解決するというのはやりたくないのです。

1)共通プログラムソース→それぞれのプラットフォーム用にコンパイル→それぞれのプラットフォーム用実行バイナリ
2)共通データソース→それぞれのプラットフォーム用にコンパイル→それぞれのプラットフォーム用データ

ということができればいいと考えているのですが。



0574デフォルトの名無しさんNGNG
>>573
>プログラムでエンディアンを解決するというのはやりたくない
じゃあ変換ICとかでも作れば?
0575デフォルトの名無しさんNGNG
データファイルを作成するプログラムで

> intのsize, structのpadding, byte order

に対処すればいいだろ。

0576デフォルトの名無しさんNGNG
というか、これgcc関係ないよ。C言語初心者スレ行きだな。
0577568NGNG
>>575
プログラムでは解決したくないんです。
0578デフォルトの名無しさんNGNG
じゃあ、諦めな。
0579デフォルトの名無しさんNGNG
>>573
「それぞれのプラットフォーム用にコンパイル」のところで、gcc しか使えないの?
make とか perl とかは? perl でやれば?
0580568NGNG
>>577 は私ではないですが、まあ、いっか。

構造体のサイズがかなり大きく、かつ、各メンバの構成が複雑だったり、
アラインメントなど、コンパイラ依存な部分も多いかと思ったので、
プログラムで解決することはしたくなかったのです。

また、プログラムが、ファイルから読み込んだメモリをそのまま構造体データとして
使う仕様だったので、プログラムソースと同じ結果を吐くコンパイラでバイナリデータを
作成する必要があると思い、質問しました。

とりあえず、
gcc -c test.cpp -o test.o
objcopy -O binary test.o test.bin
のように、objcopyを使うことでなんとかなりそうです。

いろいろありがとうございました。
0581デフォルトの名無しさんNGNG
>>580
それポインタどうするの?
変数定義が複数あっても大丈夫?
0582デフォルトの名無しさんNGNG
>>581
> それポインタどうするの?

典型的なのが、
char *strs[] = { "This", "is", "a", "test", };
ですね。

char strs[][5] = { "This", "is", "a", "test", };
なら、なんとかなりますが。
0583568NGNG
>>581
>それポインタどうするの?
ポインタやリンカ解決が必要なデータは含まれない仕様なので、大丈夫でした。
構造体自体は複雑なのですが、内容はすべて数値、かつ、変数定義が1つなので、
先頭からのオフセットさえ正しければOKだったので。
では。
0584デフォルトの名無しさんNGNG
GCCの生成するコードの、ABI資料はありません?
0585デフォルトの名無しさんNGNG
ABIの何が知りたいの?
0586デフォルトの名無しさんNGNG
何のABIが知りたいの?

例: i386 の関数呼び出しのABI、C++ の例外ハンドリングのABI
0587デフォルトの名無しさんNGNG
http://www.caldera.com/developers/devspecs/
http://www.codesourcery.com/cxx-abi/
この辺しか知らない
0588584NGNG
>>585,586
そのものズバリです、i386の関数呼出ABIです
>>587
おお!素晴らしい!読んでみますです

C関数コール時にに各レジスタの内容を、アセンブルコード側
で保証しなくてはならないのか、GCCの吐くコード側で保証
されるのか知りたかったのです。それとEBP(フレームポインタ)の扱いも~
(gcc -S foo.c で出力されるコードでは、(E)AX以外の内容も保証されていませんでしたが
VCの吐いたPEコードを逆アセンブルした時は、呼出先で保証していた気が...)

アセンブルするのは不慣れなんで、ABI仕様を読めば、
その辺りの規定が書いてあるんじゃないかと考えた次第です
どうもDebian上のGCC3.3.3 で -Os -O3 を付けた場合、
書いたコードの挙動が怪しくて...
最適化に左右されないCコードの呼出を行うには、
関数呼出規定を熟知しておこうと...
0589デフォルトの名無しさんNGNG
まとまった文章は読んだことないけど、i386 だと
eax, ecx, edx が関数内で壊していいレジスタ、
ebx, esi, edi が関数内で変えちゃいけないレジスタ。
これは、Windows でも *BSD でも Linux でも同じはず。

gcc-3.3.x のソースだと、gcc/config/i386/i386.h の
CALL_USED_REGISTERS の値かね。

こういうのって、Intel が決めたのかなあ?
0590デフォルトの名無しさんNGNG
>>589
ふつうCPUメーカが決める。大抵CPUのマニュアルに書いてあるよ。
0591デフォルトの名無しさんNGNG
>>589
なんてコッタ、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
位置独立コードってなんでしょうか?(-fPIC)
いまいち意味がわかりません。
0593デフォルトの名無しさんNGNG
>592
その名の通り、メモリ上のどのアドレスにロードされても問題ないような
コード。通常実行効率が微妙に悪くなるが、代わりに同一のバイナリ
イメージを複数のプロセスで共有できるようになる。

DLL とか共有ライブラリを作るときに使う。
0594592NGNG
>>593
>その名の通り、メモリ上のどのアドレスにロードされても問題ないような
>コード。通常実行効率が微妙に悪くなるが、代わりに同一のバイナリ
>イメージを複数のプロセスで共有できるようになる。
>DLL とか共有ライブラリを作るときに使う。
Thanx.
もし仮りに、共有ライブラリ生成時に-fPICしなかった場合は、
そのライブラリを使用した時に落ちてしまうんでしょうか?
0595デフォルトの名無しさんNGNG
.oにrelocatableって書いてないと、ldが怒るから.soは作れない。
0596592NGNG
>>595
なるほど、ようやくわかりました。
Thanx
0597592NGNG
現在、オーバレイ技術に関する勉強している者です。
オーバレイ技術って仮想メモリ全盛の今となっては、
もはや使用されないのですか、あるいは必要ないのですか?
それと、コンピュータの階層上(レイヤ)では、オーバーレイは
どのレイヤで実行されるのですか?
0598デフォルトの名無しさんNGNG
まずはあんたの言ってる「オーバーレイ技術」とは何?
GCCスレで聞くからには、LDのOVERLAY指定のこと?

使用例や必要性を知らずに勉強してるの?想像しにくい状況だな。
さしあたってあんた本人が必要としてるわけじゃないのか?

どのレイヤと聞くからには、あんたの考えてるレイヤを列挙してもらわないと。
しかし、どんなレイヤがあるかは、マシン、システム、ソフトごとで様々なはずだ。
0599デフォルトの名無しさんNGNG
どなたか、-fasynchronous-unwind-tables って何するものだか教えてくださいませんか?
0600デフォルトの名無しさんNGNG
>>599
http://gcc.gnu.org/ml/gcc-patches/2001-10/msg00800.html
0601592NGNG
>>598
>まずはあんたの言ってる「オーバーレイ技術」とは何?
>GCCスレで聞くからには、LDのOVERLAY指定のこと?
そのとおりです。

>使用例や必要性を知らずに勉強してるの?想像しにくい状況だな。
わからないからこそ調べてるんです。

>さしあたってあんた本人が必要としてるわけじゃないのか?
さしあたって必要ではないです。でも、さしあたらないとだめなんでしょうか?

>どのレイヤと聞くからには、あんたの考えてるレイヤを列挙してもらわないと。
>しかし、どんなレイヤがあるかは、マシン、システム、ソフトごとで様々なはずだ。
様々なレイヤで存在することすらわからなかったものですから。
マシンとシステムの区別がよく分からないんですが。
レイヤがソフトであるなら、やはりローダがオーバレイ作業をするのが一般的なんですか?
0602デフォルトの名無しさんNGNG
>597
オーバーレイが有効に使えるのは、

1 主記憶が狭い
2 仮想記憶がない
3 主記憶と比べて大きな二次記憶がある (これは read only のことが多い)

という場面。小さな RAM と、それより大きめの ROM で構成されてるシステムだと
使い道があるが(ゲーム機とか)、最近はハードウェア資源が豊富になってきて
るから、使う場面は少なくなってきてるんじゃないかなぁ。

メモリが増える割合に比して、コード量の増加って緩やかだから。あと、オーバーレイ
で解決せずに実行時リンク (Win32 だと DLL, UNIX なら *.so) で対応する方法も
ある。こっちの方が柔軟。
0603592NGNG
>>602
ありがとうございます。

>1 主記憶が狭い
>2 仮想記憶がない
>3 主記憶と比べて大きな二次記憶がある (これは read only のことが多い)
なるほど。
これを見てて思いついたのは、組み込み系で使われる可能性がありますね。

>メモリが増える割合に比して、コード量の増加って緩やかだから。あと、オーバーレイ
>で解決せずに実行時リンク (Win32 だと DLL, UNIX なら *.so) で対応する方法も
>ある。こっちの方が柔軟。
オーバーレイで解決せずに実行時リンク?動的ライブラリのことですかね。

そもそもgcc環境では、オーバーレイor実行時リンクの作業はカーネルがするって事?
0604デフォルトの名無しさんNGNG
オーバーレイの言葉の定義をしてくれー
0605592NGNG
>>604
>オーバーレイの言葉の定義をしてくれー
自分がいろいろ調べて見てわかっているオーバーレイの定義は、
「少ないメモリ上で、ある関数をコールする度にオーバレイマネージャ等が
実行ファイル等から読み込み、メモリに再配置して効率的にメモリ割り当てを扱う事」
という認識でいます。間違ってますでしょうか?
0606デフォルトの名無しさんNGNG
>>603
> そもそもgcc環境では、オーバーレイor実行時リンクの作業はカーネルがするって事?

gccは中立です。
0607デフォルトの名無しさんNGNG
>605
> 「少ないメモリ上で、ある関数をコールする度にオーバレイマネージャ等が
それは GNU LD で実現してるオーバーレイとは違うぞ。

関数呼び出しの度に自動的にファイルを読み込むのではなく(それは遅すぎ)、
手作業で

 これから foo(), bar() を読み込むから、foo(), bar() を含むコードを
 メモリ上に読み込み

 完了後に foo(), bar() をコール

とする。

オーバーレイを有効に使うためには、プログラムを同じタイミングで呼ばれる
可能性がある複数の部分に *手作業で* 分割し、さらに読み込みタイミングを
自分で制御する必要がある。

メモリ上に読み込んでない関数をコールすると、プログラムが実行時に
吹っ飛ぶか、もしくはメモリ上に展開されている別のコードを実行して、
謎の挙動を示すことになる。
0608デフォルトの名無しさんNGNG
>>605
> ある関数をコールする度にオーバレイマネージャ等が
> 実行ファイル等から読み込み、

これはある実装の機構であって、オーバーレイの定義ではないのでは?

> メモリに再配置して

ほとんどの場合、実行時に再配置もしないのでは?
再配置できるくらいなら"OVERLAY"する必要がないからね。

メモリ上のある領域をモジュール同士で共有して、排他的に利用するのが、
(たぶんあなたの言っている)オーバーレイだと思います。

オーバーレイをgccで行う方法の話じゃないんならば、
くだ質にいった方がいいんじゃない?
0609592NGNG
>> 「少ないメモリ上で、ある関数をコールする度にオーバレイマネージャ等が
>それは GNU LD で実現してるオーバーレイとは違うぞ。
え、そうなんですか。もう一度GNU LDのオーバーレイを調べてみます。

>オーバーレイを有効に使うためには、プログラムを同じタイミングで呼ばれる
>可能性がある複数の部分に *手作業で* 分割し、さらに読み込みタイミングを
>自分で制御する必要がある。
これは、そのプログラム作成者がその作業をするってことですか?

>これはある実装の機構であって、オーバーレイの定義ではないのでは?
すいません。オーバーレイの定義についてまだあやふやでした。

>メモリ上のある領域をモジュール同士で共有して、排他的に利用するのが、
>(たぶんあなたの言っている)オーバーレイだと思います。
その通りです。

>オーバーレイをgccで行う方法の話じゃないんならば、
>くだ質にいった方がいいんじゃない?
そうですね。もう一度調べなおします。

Thanxでした。>>607,>>608
0610デフォルトの名無しさんNGNG
> >>605
> > ある関数をコールする度にオーバレイマネージャ等が
> > 実行ファイル等から読み込み、
>
> これはある実装の機構であって、オーバーレイの定義ではないのでは?

昔アセンブラで書いたプログラムを自動的に↑とするリンカ使ったことある。
L80の互換リンカで、P?L80って名前…
LINK86互換のもあったはず。
0611デフォルトの名無しさんNGNG
>>608
> オーバーレイをgccで行う方法の話じゃないんならば、
> くだ質にいった方がいいんじゃない?

って書いたけど、
Linker && Loader
http://pc5.2ch.net/test/read.cgi/tech/1033403294/
ってスレがあるね。過疎スレだけどね。
0612!599NGNG
>>600
>http://gcc.gnu.org/ml/gcc-patches/2001-10/msg00800.html
↑をざっと読んだけど-fasynchronous-unwind-tablesの説明がないような気がする。
0613592NGNG
>>611
実はこの本を読みながら↓質問してました。
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-06437-9
リンカ&ローダって難しい....使って天国、作って地獄って奴ですか。
関連ドキュメントが少なすぎるぅぅぅ(泣
0614デフォルトの名無しさんNGNG
>>612
http://www.cqpub.co.jp/interface/column/freesoft/2004/200401/0.htm
http://www.cqpub.co.jp/interface/column/freesoft/2004/200402/0.htm
0615612NGNG
>>614
サンク
0616592NGNG
>>611
ここ↓見たけど途中から誤爆スレみたいなんですけど..sigh
Linker && Loader
http://pc5.2ch.net/test/read.cgi/tech/1033403294/
0617デフォルトの名無しさんNGNG
>>613
この本はベストセラーだね。いい本だ。翻訳は良くできてるのかな?
この本を読んで全部理解するにはかなりの基礎知識を必要とするよ。
0618デフォルトの名無しさんNGNG
>>616
あっち移ったら、あっちでお付き合いするけど
こっちはスレ違いだからね。
0619デフォルトの名無しさんNGNG
>>613
>関連ドキュメントが少なすぎるぅぅぅ(泣
確かに少ないな。特に日本語のドキュメントで探すのは皆無に近い。
欧米では関連ドキュメントを探すとちゃんと見つけ出せるけど日本特有の現象なのかわからんが、
ある技術(例えばLinker & Loader)を使っているなら、その概念や動作や設計とかの資料があってもいいはずなのに、
「車輪の再発明なんかやるんじゃない」的な考えで、その関連資料を作成すること自体しなくなるのは
とてもよくない現象だと思う。
長々とスマソ。
0620デフォルトの名無しさんNGNG
GCCは(・∀・)イイ!
ヽ(゚∀゚)ノGCCバンザイ!!!!
0621デフォルトの名無しさんNGNG
最近、typeofが手放せなくなりつつあるんだが、
これなんとか標準C++の範囲で実現する方法はないの?
ちょっとすれ違いか。
0622デフォルトの名無しさんNGNG
あの、すいません
gccのコンパイルオプションを紹介しているサイトを
教えていただけませんか?
0623デフォルトの名無しさんNGNG
>622
info 読め
0624デフォルトの名無しさんNGNG
>>622
googleでgcc infoを検索すれば、gccのinfoの日本語訳が見付かることだろう。
0625デフォルトの名無しさんNGNG
>>614も読めよー
0626デフォルトの名無しさんNGNG
隠しオプション

-fno-gates

MSVC用のpragmaを発見するとそのソースファイルを削除する
0627デフォルトの名無しさんNGNG
-fno-stallman
GPL/LGPLライセンスのソースファイルを(ry
0628デフォルトの名無しさんNGNG
しばらくは3.3をずっと使い続けるかな
0629デフォルトの名無しさんNGNG
昔のgccでpragma使うとゲームを起動するって本当だろうか……。
0630デフォルトの名無しさんNGNG
hack -> rogue -> ハノイの塔
ってやつか。
オレも気になる。
0631デフォルトの名無しさんNGNG
今gcc-1.42落としてみたらcccp.cに例のコードがあったよ。
0632デフォルトの名無しさんNGNG
execってオーバーレイみたいなもんだよね??
0633デフォルトの名無しさんNGNG
でもinfoの説明と食い違ってるoptionあったりするしな。>gcc
info読んでも変だと思ったらsource読んで確認するのを勧める。
0634デフォルトの名無しさんNGNG
>632
なにをもって「みたい」とするかに依るが。内部実装は天と地ほど違う。
0635デフォルトの名無しさんNGNG
>>631
マジなんだ……。さんきゅ。俺も落としてみるか。
0636デフォルトの名無しさんNGNG
>>635
俺も思わず確認してしまった。
1.42の頃はstallmanがガンガンいじってたのねぇ。
0637デフォルトの名無しさんNGNG
あるソースを見てたら以下のコードがありました。
これってどういう意味ですか?
"!!"って使用できましたっけ?

if (!!var1 == !!var2)
 return 0;
0638デフォルトの名無しさんNGNG
>>637
C言語くだ質スレが適当だと思うが一応。

!e → (e) ? 0 : 1
!!e → (e) ? 1 : 0

つまり!!は、0(false), それ以外(true)の0, 1への正規化。
その使い方だと、var1とvar2の(C言語的)真偽が同じならです。

flag | (!!(式) << 4)

なんてのは良く使います。
0639デフォルトの名無しさんNGNG
>>637
素直にこう書いた方が判りやすいと思うのだが・・・

if(var1 && var2)
 return 0;

0640デフォルトの名無しさんNGNG
>>639
それだと
var1 が 0 かつ var2 が 0 の場合に動作が異なる。
0641デフォルトの名無しさんNGNG
>>639
本当にプログラマですか? (w
0642デフォルトの名無しさんNGNG
if (!var1 == !var2)
return 0;
これでいいような気がする。
違うのかな?
0643デフォルトの名無しさんNGNG
>>642
本当にプログラマですか? (w
0644デフォルトの名無しさんNGNG
>>643
プログラマじゃないけど本当に分からない。
違い教えて。
0645デフォルトの名無しさんNGNG
>>644
じゃあプログラマになれるよう、勉強しようね(w
0646デフォルトの名無しさんNGNG
>>645
いいから教えろ
0647デフォルトの名無しさんNGNG
>>645
おれも分らない。int型みたいな0(false)とそれ以外(true)の
{0,1}への正規化なら、>>642でいいように思うんだけど。
0648デフォルトの名無しさんNGNG
>>642 はあってるぞ。
自身を持て。
0649デフォルトの名無しさんNGNG
>>647
真偽が逆転するので、正規化目的なら!!だろう。
ただ、件の場合は比較しているだけなので、真偽逆でも問題なし。
0650デフォルトの名無しさんNGNG
>>645
早く教えてください

if (!var1 == !var2)
if (!!var1 == !!var2)

この違いを教えてください。漏れには真偽が逆になっていて
見難いから、!!としているだけにしか見えません。
0651デフォルトの名無しさんNGNG
ああ、正規化、という意図を表現したいなら!!がいいね
でもそれならマクロか何かにしてほしい
0652デフォルトの名無しさんNGNG
>>651
単にあなたが見慣れてないだけじゃない?
!!というのは特徴的だし昔から使われているから、
イディオムとして受け入れる方が変なマクロ定義するよりいいと思うけど。

俺は (var?1:0) をするイディオムとして !!var を認識しているので、
if (!var1 == !var2)
よりは
if (!!var1 == !!var2)
の方が素直に読める。
0653デフォルトの名無しさんNGNG
>!!というのは特徴的だし昔から使われているから、

はつみみです:-)
0654デフォルトの名無しさんNGNG
652みたいなのがロートルって呼ばれるようになるんだろうナァ
0655211NGNG
gcc-3.4.0 で、 gcc ディレクトリで grep -n '!!' * とかやった結果、

c-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デフォルトの名無しさんNGNG
たったそんだけ?
0657デフォルトの名無しさんNGNG
もちつけ

ロートル呼ばわりされかねないのは、
「昔から使われているから、イディオムとして受け入れろ」
という下りのところだろ。
0658デフォルトの名無しさんNGNG
ロートルって何だと思ったら
中国語で老人の事なんだ(;´Д`)
0659デフォルトの名無しさんNGNG
!!x って、 x != 0 と全く同じ(xが整数型の場合)でしょ?
正規化する場合でも、x != 0 が使われる場合の方が多いんじゃないかな。
少なくとも、俺はそうしてる。
俺はその方が読み易い(理解しやすい)し。
0660デフォルトの名無しさんNGNG
君は、ね。
0661デフォルトの名無しさんNGNG
一般的に目的がはっきりしている方が読み易いと言える

目的が0との比較なのか正規化なのかよく考えて使い分けるべし
0662637NGNG
>>638-660
また一つ賢くなりました。ありがとうございました。
0663デフォルトの名無しさんNGNG
D言語ってサポートされるの?
0664デフォルトの名無しさんNGNG
外国人と仕事するようになって どっちも英語が出来ないので
仕方なくコードで会話するんだが 相手に意図を伝えられるコードを
意識して書くようになると それだけでバグって減るモンなんだね
0665デフォルトの名無しさんNGNG
>>663 来週あたりにはサポートされます
0666デフォルトの名無しさんNGNG
#define fuck head
0667↑NGNG
ダミアソ
0668デフォルトの名無しさんNGNG
fuck head って、どじなやつという訳なんだな。
0669652NGNG
うーん、ロートルと言われればロートルなのかも。
Cとは12のころからかれこれ15年くらいつきあってるからなあ。
0670ロートル2号NGNG
>>655
そう言えば、!!を始めて見たのはgccだった。
gcc-1.2くらいだったか?
0671デフォルトの名無しさんNGNG
!!についての話題は直接gccに関係ないので、他のスレでやってくだされ。
0672デフォルトの名無しさんNGNG
!!うるせーぼけ!!
0673デフォルトの名無しさんNGNG
まだ、夏休みじゃないよな。
0674俺も含めてな。NGNG
最近は、常時夏休みみたいな奴がいるからな。
0675デフォルトの名無しさんNGNG
MinGWとこれの配布元が提供しているbinutil、gccのソースコードと
レッドハットのnewlibのソースコードをターゲットM68000でコンパイル
して、クロスコンパイル環境構築できますか?
(やったことのある人がいれば教えてください)

H8のクロスコンパイル環境の情報は多いんですが、M68000の
情報がほとんどないもので。

よろしくお願いします。
0676デフォルトの名無しさんNGNG
ttp://www.pcs.usp.br/~jkinoshi/bs/b030722.html

--target=m68k-coff か --target=m68k-elf を指定すれば
できるじゃねえの?
0677デフォルトの名無しさんNGNG
>MinGWとこれの配布元が提供しているbinutil、gccのソースコードと
Win32上でbuildしてる奴ほとんどいねぇと思う。
オレがやってみた感想。
だってあそこのbison使い物にならんし、
素直にコンパイル通すだけでもツール類自力でmakeしないといかんし。
0678675NGNG
>>676

情報サンキューさんです。
多分これと同じ要領でコンパイルできそうですね。

MinGWというのが気になっているんですが、実際にやってみれば
どうなのかわかるかな?
0679675NGNG
>>677

そうですか。クロスコンパイル環境を整えるにはやっぱり
UNIXやLinuxつかったほうがいいんですかね...。
0680デフォルトの名無しさんNGNG
>>679
cygwin でもいけるんじゃない?
0681デフォルトの名無しさんNGNG
bison1.8が改悪なんだなぁ。Win32上でのmake失敗の原因はこれだし。
スケルトンファイルをsendmail.cf化しようなんて何考えてんだか。
設計を改めず拡張してどんどこ改悪していくのはGNUの悪い癖。
0682どんどこNGNG
どんどこ
0683デフォルトの名無しさんNGNG
>>675
聞くばっかりじゃなくて、実際にやって見れば
痛い目にあった方がスキルが上がる気がするけど
0684デフォルトの名無しさんNGNG
>>681
>bison1.8が改悪なんだなぁ。Win32上でのmake失敗の原因はこれだし。
「最初からWinなんて眼中無かった。」に500000カノッサ
0685675NGNG
>>683

そうですね。実際にやってみたほうがいいですね。
週末になれば時間が確保できるのと、試せる環境が
つかえるようになるのでやってみようと思います。

MinGWでだめだったらCygwin、それでもだめだったら
最後の手段でLinux...といきたいところですが、色々な
都合でそんなに時間がかけられないかもしれないです。

本当は市販のコンパイラを買ってもいいんですが、
gccを使うのはスキルアップも目的です。本当は
少し時間をかけてチャレンジしたいんですけどね。
0686デフォルトの名無しさんNGNG
漏れも最近MinGW相手にクロスコンパイラ編成しますた。
ぶっちゃけ、イバラの道ですた。
Cygwinと比べてコミュニティの規模が小さいせいか、自前で解決しなきゃ
ならんネタが多いんですよ。
MinGWのダウンロードページから落とせるtar玉には大抵MinGW用のパッチが
あたってるので、迂闊にGNUのページとかから落としてくるより楽なんだけど、
それでもビルドできないシチュとかが結構ある。
特にクロスコンパイル編成だと、configureが混乱するのか、時々わけのわからん
ヘッダを持ってこようとしたりして、激しく混乱が加速するです。
ビルド済みパッケージには、大抵ポーティングリスト(元のパッケージから
何を変えたか)が添付されてるので、使わなくても落としてくるのが吉。
/usr/doc以下にドキュメント追加されます。
gdbがシリアル接続受け付けなかったり、明らかに消しちゃいかん機能を
消して無理矢理ビルド通してたりするので、いまいち信用ならないけど。

漏れ的に困ったのは、gccがfork等posixの関数を要求してくるところとか。
collect2とかが引っかかるので、Makefileから外してしまうので一応解決するます。
0687675NGNG
>>686

本家MinGWのメーリングリストでも
「collect2でひっかかるけどどうすんの?」
「collect2はMinGWのパッケージには公式に入ってないよ。
これをどうするかどうかは過去に何回か議論しているからログ読め」
というやりとりがあったようですね。

あの、ついでにmakefileの修正箇所なぞを大雑把に
晒してもらえると大変助かるんですが。
だめですかね?
0688675NGNG
ああ、英語の意味がやっといまわかりました。
過去ログ読めってことか。

うっかり、collect2が公式パッケージに入っていない
理由について述べられているんだと勘違いしてしま
いました。
0689デフォルトの名無しさんNGNG
まったく関係ないが、C++ の場合、
bool operator!() const をクラスに定義して、
if( !!obj ) と使うことがある。

0690デフォルトの名無しさんNGNG
>>689
メンバ関数ポインタを使う手もある。これだと整数型への暗黙の型変換が
できないから、ケアレスミスを防げるし。

class foo
{
  void dummy();
public:
  typedef void (foo::*unspecified_bool_type)();
  operator unspecified_bool_type() const {
    return xxx ? &foo::dummy : NULL;
  }
};
0691デフォルトの名無しさんNGNG
>>690
ところでなんでC++ってNULLを予約後にしなかったんだろう。
0692デフォルトの名無しさんNGNG
>>691
×予約後
◯予約語
0693デフォルトの名無しさんNGNG
null(NULLではない)を予約語にする動きはまだある。
0694デフォルトの名無しさんNGNG
gccのオプション-fomit-frame-pointerについて質問です.
gccのマニュアルを見ると
(例えば,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デフォルトの名無しさんNGNG
環境依存でそうだった
0696695NGNG
>>694
つーか,お前さんの示してるgcc-3.3.3のマニュアルでも,まだ,環境依存じゃん(w
>on machines where doing so does not interfere with debugging
ダマサレター
0697694NGNG
>>695
x86では,-fomit-frame-pointerを有効にするのに
-Oと別に,明示的に指定する必要があるのでしょうか?
0698デフォルトの名無しさんNGNG
>>694
> 最適化オプション-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
>>697
オプションの指定を最適化したいのか ?

フレームポインタ付けたくないなら指定すればいいと思うが。
0700694NGNG
>>698
あぁ,すみません.
上の方にはそう書いてありますね.
もっと下の-fomit-frame-pointerの項目の
> Enabled at levels -O, -O2, -O3, -Os.
ばっかり見てました.
697の質問については,多分,
-Oと-fomit-frame-pointerを併記するソースが多いということが
その答えを物語ってるんでしょうね.
0701694NGNG
>>699
> オプションの指定を最適化したいのか ?
はい.
CPUはPentium3で,今んとこ,
-O3 -march=pentium3 -msse -mfpmath=sse -fforce-addr -funroll-loops -fomit-frame-pointer
を付けてコンパイルしています.
やっているのは浮動小数点演算中心の計算です.
他にお勧めとかあったら,是非お教えて下さい.
0702デフォルトの名無しさんNGNG
>>701
厳密なエラー処理が必要ない場合は -ffast-math も利く。
0703694NGNG
>>702
-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
>>703
-fno-trapping-math
IEEE 754 では、演算結果が非数 (0/0 とかの場合) や無限大など「ふつー
じゃない数」になった場合に割り込みを発生させ、事前に登録した割り込み
ハンドラに制御を移すことが可能になっている。

この割り込み処理がないことを前提にして最適化を行う。

-ffinit-math-only
演算結果が非数や無限大にならないことを前提にして最適化を行う。

-fno-signaling-nans
これは -fno-trapping-math のサブセットで、非数の場合に割り込みが
発生しないことを前提とする。無限大などでは割り込み発生させても OK。
0705694NGNG
>>704
丁寧なレスをどうもありがとうございます.
> -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
> 演算結果が非数や無限大にならないことを前提にして最適化を行う。
これがまだ分かりません.
結果が変わってくるような例ってないですか?
0706694NGNG
>>705がなんか変なコードになっている.
for (;;)は抜いて下さいまし.
0707デフォルトの名無しさんNGNG
>>705
> まぁ,いずれにしても事前に割り込みハンドラを登録したプログラムでない限り,
> -fno-trapping-mathの有無で動作が変わることはないということですよね.
確か OS によりけりだった気がするけど、694 の環境ではその理解で問題ない
かと。あとシグナルハンドラ中で呼べる関数には厳しい制約があるので、stream
とか操作すると不味いです。念のため。

> 結果が変わってくるような例ってないですか?
b = a + 1.0 - 1.0;

a が極めて大きな数の場合 a + 1.0 の段階で +Inf になってしまい、
結果的に b = Inf ( != a) ってケースがありえる。無限大にならない
と仮定すれば a = b; と最適化しちゃって OK。
0708675NGNG
みなさんのアドバイスのおかげで無事、M68Kクロスコンパイル
環境が構築できました。ありがとうございました。

どうやらcollect2問題はMinGWで配布されている3.4系には
パッチがあたっているようです。

その他にも色々問題はありましたが、基本的にMinGWの
メーリングリストとgoogleで解決しました。

bisonやflex、gettextやlibiconvといったものは、
http://sourceforge.net/project/showfiles.php?group_id=23617
からダウンロードしました。
(これらをインストールするときはインストール先のパスにスペースが
入っていると駄目なのにはまりましたが)

0709694NGNG
707様,レスをどうもありがとうございます.
>>704
> IEEE 754 では、演算結果が非数 (0/0 とかの場合) や無限大など「ふつー
> じゃない数」になった場合に割り込みを発生させ、事前に登録した割り込み
> ハンドラに制御を移すことが可能になっている。
環境依存の話になってくるかも知れませんが(もし,他に適切なスレがあれば誘導をお願いします.),
このような数学的例外が起こった場合に実行する割り込みハンドラって
どうやって登録するのでしょうか? ご存知の方いらっしゃいますでしょうか?
ぐぐってみたらmatherrってのがそれっぽい感じがするのですが,使い方が分かりません.
0710デフォルトの名無しさんNGNG
man feenableexcept
C99 floating point rounding and exception handling
0711694NGNG
>>707
> 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;
}
(続く)
0712694NGNG
(711の続き)
int 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
>>711
確かに。+1.0 ではなく + FLT_MAX / 2 ぐらいにしたほうが現実的だったかも。
0714694NGNG
本当はこれで結果に差が出てくれば,納得するんですが....
$ 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デフォルトの名無しさんNGNG
>>714
x87 だと FPU は 80bit あるののに double は 64bit だから、マジメに
計算しても FPU 内部ではオーバーフローしないような気がする。
FPU を 64bit モードにするか拡張精度浮動小数点数 (long double)
で試してみては?

あと gcc はマニュアルに書いてあることが完全に実装できてないことも
あるので、これで動作に疑問があるようなら gcc のソースを読んだ方が
良いかも。
0716694NGNG
>>715
> 拡張精度浮動小数点数 (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デフォルトの名無しさんNGNG
0718デフォルトの名無しさんNGNG
サンクスコ
0719デフォルトの名無しさんNGNG
gccの最適化オプションで-march=pentium4としたら-mmmx、-msse、-msse2も自動的にONになるんですか?
0720デフォルトの名無しさんNGNG
それはさすがにならんだろ
cmovとかは使うだろうけど
0721デフォルトの名無しさんNGNG
なる
0722デフォルトの名無しさんNGNG
>>720-721
どちらが正しいのですか?
0723デフォルトの名無しさんNGNG
-fverbose-asm
0724デフォルトの名無しさんNGNG
gcc-3.3.1
gcc/config/i386/i386.c
{"pentium4", PROCESSOR_PENTIUM4, PTA_SSE | PTA_SSE2 |
PTA_MMX | PTA_PREFETCH_SSE},

バージョンによっては違うかもしれないので
ttp://gcc.gnu.org/cvs.html
で確認してみては?
0725719NGNG
>>722-724
なるほど、ソースコード読んでみるという手がもっとも確実ですね。
ありがとうございます。
0726デフォルトの名無しさんNGNG
>>721 「なる」ってなるほどのことかと思ったよ。
0727デフォルトの名無しさんNGNG
なる
0728デフォルトの名無しさんNGNG
で、結局の所どーだったのよ。
0729デフォルトの名無しさんNGNG
「バージョンによって違うかもしれない」
0730デフォルトの名無しさんNGNG
その日の天気による
0731デフォルトの名無しさんNGNG
晴れの日はコンパイルしよう
0732デフォルトの名無しさんNGNG
WindowsXPのコマンドプロンプトから
c:\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
とでてコンパイルできないのですが、何がいけないのでしょうか?
以前はこれでできていたはずなのですが...。
0733694NGNG
>>732
c:\cygwin\bin\ls ..
は?
0734732NGNG
>>733
動きました。
実行しているディレクトリ名に日本語が含まれていたのが
原因だったみたいです。
0735デフォルトの名無しさんNGNG
>>734
今の最新版だとそうなる。1.5.9-1までならOK。
0736735NGNG
おっと。cygwinのバージョン、な。
0737732NGNG
>>735
>>733,735さん ありがとうございます。
なるほどそういうことでしたか。

もうバージョンあげちゃったんで
次期バージョンでは直っててホスィ
0738デフォルトの名無しさんNGNG
構造体の配列がグローバル変数で定義されているとして、別のソースファイル中で
その配列を参照する場合には、まずそのファイル中で配列をextern宣言しますよね。
このとき、extern struct foo[3]と配列の個数を明示してやらないと、
参照した時点でSIGSEGVを食らいます。(少なくともgcc-3.2.2の場合)

単にextern struct *fooでも良いと思ってたんですが、これってgcc-3.2.2のバグ
ですか、それともCの仕様ですか? 少なくともextern struct *fooでもコンパイル
オプションに-Wallとか付けても問題なく通ります。
0739デフォルトの名無しさんNGNG
>>738 ここにもポインタ変数と配列を混同している人が。。。
0740デフォルトの名無しさんNGNG
>>738 頭の悪い脊髄反射レスは要らない。
extern struct foo[]としても、SIGSEGVを食らう。
なぜ、構造体のアドレスが正常に渡されないかが問題なのだ。

例えば、配列中の構造体の大きさが、実際に宣言されるまで不定で
あるような場合(構造体内部にchar *のような文字列のポインタを含む場合)、
コンパイラは間違ったポインタを渡してしまう可能性が考えられる、
とかそういうふうな答えを期待した。
0741デフォルトの名無しさんNGNG
C言語スレに池
0742デフォルトの名無しさんNGNG
答える知識がないなら黙ってればいいのに。
0743デフォルトの名無しさんNGNG
>>740
煽るんなら、アンカーぐらいちゃんとしないと、自分で自分が「頭の悪い脊髄反射」とカミングアウトしてることになってるぞ。(藁

それはそれとして、

extern struct foo[3];
extern struct *foo;
extern struct foo[];

でコンパイルエラーにならない、GCC のバージョンを教えてくれ。

手元の、2.95.4 は全部シンタックスエラーにしやがるからな。(藁
0744デフォルトの名無しさんNGNG
>>743
gcc-3.2.2と書いてあるが…。
0745sageNGNG
>>743
君も配列とポインタ変数を混同していないかい?
0746デフォルトの名無しさんNGNG
gccにはバージョン3以降で構造体(あるいはそのメンバ)のアドレス計算を間違うバグがあったんだがね。
それを知っていれば、配列とポインタ変数をどうこうなんてレスは返さないと思われ。

例えばfoo[2].bar.len++とすると、関係ないメモリをインクリメントしようとしていた
事がある。これをfoo[2].bar.len += 1と書くとなぜか回避できた。

答えられないなら、黙ってていいよ。
0747デフォルトの名無しさんNGNG
>>744
こりゃ失礼。
って言うか、そういう問題じゃないんだけどね。

>>745
そういう問題じゃなくて、一体 foo の型って何 ? って言う話なんだけどな。
(わざわざ「シンタックスエラー」とまで書いてあるのにわからんかな...。)

>>746
そういう個別のバグ ? の話までするんであれば、問題のソースと -S の結果を貼った方が早いと思うが。
0748デフォルトの名無しさんNGNG
>>746
はぁ?
配列を外部参照しにいくにもかかわらず、extern struct *fooと
書いてることが問題であって、アドレス計算は関係ないと思うのだが?
0749デフォルトの名無しさんNGNG
>>746
「答えられないなら、黙ってていいよ」
こんな台詞吐くやつは大概厨房と決まってるんだがな。
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
>>750
少なくとも、そのソースは 2.95.4 なら問題はない。
他のまともなコンパイラでも問題はないはず。
お前の使ってるバージョン固有の問題、もしくはお前の環境の問題と思う。
もしこのソースでエラーになるなら、sample2.c の -S の結果を貼ってくれ。

>>751
> ある程度のメモリ容量が必要だったり

何が言いたいのかよくわからん。
日記なら、ご自分の日記帳にでも書いておけよ。
0753デフォルトの名無しさんNGNG
大量の配列を宣言するくらいなら、ポインタで変数を宣言してmalloc()でメモリを
割り当てるでしょうな。

「ポインタと配列は違…」とか叫ばれてもね。そんなことは聞いてないし、言わ
なくていい。それは今問題にしてない。問題かもしれないが。

構造体の配列をextern宣言する時に配列数を含めておかないと正しい参照が
出来ないのはどういうことなのか、を気にしているの。
コンパイル時にアドレスが不定で決定できないならば、エラーなりワーニングを
出せば済む事なのだが、-Wallなどを付けても問題なく通る。
0754デフォルトの名無しさんNGNG
>>753
>>751のソースは問題ない。それで動かないならコンパイラのバグ。
* fooで動かないのは当り前。それで動くと思うのはおまえの頭のバグ。
0755デフォルトの名無しさんNGNG
>>753
> コンパイル時にアドレスが不定で決定できないならば、エラーなりワーニングを
> 出せば済む事なのだが
リンク時の話だからコンパイラには何もできないでしょ。
0756デフォルトの名無しさんNGNG
>>750のソースと違うのかと>>754の耳に息を吹きかけながら囁いてみるテスト

なんでもいいが、>>753はそろそろ黙っとけ。
0757デフォルトの名無しさんNGNG
しかし>>738にextern struct *fooとはっきり書いてるし。

>>738
> 単にextern struct *fooでも良いと思ってたんですが、

配列の不完全型を理解してないんでしょうね。
0758デフォルトの名無しさんNGNG
言語を知らんヤツがコンパイラを語るってイタイよな。
0759デフォルトの名無しさんNGNG
ポレは、警告を「ワーニング」って呼ぶ奴を、「あぁ、ばかなんだな」と思うことにしてるんだが。
0760デフォルトの名無しさんNGNG
>>759
なぜ?
「ワーニング」ではなくて何と呼ぶんだ?
まさかとは思うが「ウォーニング」とか言うなよ。
0761デフォルトの名無しさんNGNG
放置でおながいします
0762760NGNG
>>761
>放置でおながいします
当たったのかよ。藁
0763デフォルトの名無しさんNGNG
「わーん」の方がアップアップしてる感じが良いなぁ。
0764デフォルトの名無しさんNGNG
ワーンヽ(`Д´)ノing
0765デフォルトの名無しさんNGNG
ウォーヽ(`Д´)ノning
0766デフォルトの名無しさんNGNG
アハーンヽ(`Д´)ノping
0767デフォルトの名無しさんNGNG
>>766
>アハーンヽ(`Д´)ノping
ムシロ意味がわからん。
0768デフォルトの名無しさんNGNG
エロ画像
0769デフォルトの名無しさんNGNG
gccとは直接関係ないのですが、お願いします。
clispというパッケージをコンパイルしていて以下のようなエラーが出ました。

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
-E
プププ...Makefileから渡される変数など存在しない
0771デフォルトの名無しさんNGNG
make -n とかやって眺めるのが簡単じゃないの?
0772GentooLinux glibc-2.3.4です。NGNG
clispのlinux.cはこのようになっています。

#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
signal.hのsigpauseに関する場所はこのようになっています。
ここにコピペした場所以外には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デフォルトの名無しさんNGNG
>>773
770が言うように-Eしてみたら手掛かりになるのでは?
0775デフォルトの名無しさんNGNG
Glibc-2.3.2では上の__FAVOR_BSDのところが__USE_BSDになっています。
これって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デフォルトの名無しさんNGNG
どっちか define しないと sigpause が宣言されないんなら、clisp の
Makefile (or configure) が悪い、ってことになるかね。

なんにしても、gcc はまるで関係ない。

0777デフォルトの名無しさんNGNG
>>760
http://dictionary.goo.ne.jp/voice/w/00090699.wav
0778デフォルトの名無しさんNGNG
>>777
もしも、君の書き込みが
『ほら、やっぱりウォーニングじゃん!』
という意図ならば、相当痛いぞ。
0779デフォルトの名無しさんNGNG
clispの全てのヘッダーファイルの中から#undefしてるところを探しても、
__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デフォルトの名無しさんNGNG
補足ですが、
gcc-3.3.3のspecsには以下のようなものも含まれていましたが、
%{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3}
自分のところの3.4にはこれすらなくなっていました。
0781デフォルトの名無しさんNGNG
gccと関係ないって。だから犬厨しつこいって言われるんだよ。

森へお帰り
0782デフォルトの名無しさんNGNG
このスレはワーニング派が多いの?
0783デフォルトの名無しさんNGNG
ホントシツコイナ、答えはもう出てるだろ

These are defined by the user

お前は盲目か?ベンダ依存の制御マクロだろこれ
文句があるなら、GCCじゃなくてディストリビューターに言え
0784デフォルトの名無しさんNGNG
>>782
正直どっちでもいいの

日本人じゃちゃんと発音できないから
0785デフォルトの名無しさんNGNG
発音と日本語での書き方は別物。
warpをウォープとかwarrantyをウォーランティとか言う奴はアホ。
0786デフォルトの名無しさんNGNG
カタカナ語にいちいちつべこべ言う香具師は


            け い こ く


とでも言い直せよヴォケ
日本語の会話中に突然 warning って発音の単語が出てきたらふつー引くだろ?
0787アルロビュー ポッキュ ヤングギゴッポム!!!NGNG
白人に劣等感丸出しの朝鮮人が一人紛れ込んでヲメくヌレはここでつか?

「マクドナルドは」「メッドゥネルドゥ」じゃないから
チォックバリドル英語下手ニダとかほざく連中と変わらんて




virus を「ヴァィラス」に近い発音されてきちっと理解できる奴どれくらいいるんだ?
しかも日本語の会話の文脈で
0788デフォルトの名無しさんNGNG
面接中にイオナズンとかもな
0789759NGNG
こんなポレでも、cosは「コサイン」って読んじゃうけどな。
0790デフォルトの名無しさんNGNG
>>780
3.4では__GNUC__等はgcc内部で定義されてるよ。

よくわからんが
linux.cの先頭で
#define __USE_XOPEN
とすれば、エラーは無くなるんじゃない。

0791デフォルトの名無しさんNGNG
読み方なんてどうでもいいじゃん。
それよりも、gccのオプションを1つでも覚えれば。
0792デフォルトの名無しさんNGNG
おまいら -Werror がコンパイル通るまで帰しませんよ
0793デフォルトの名無しさんNGNG
>おまいら -Werror がコンパイル通るまで帰しませんよ
先生!通ったんで、もう帰っていいですか?
0794デフォルトの名無しさんNGNG
>>793
キャストの嵐かよ!!!
0795デフォルトの名無しさんNGNG
>>794
>キャストの嵐かよ!!!
ちがうよ。人聞きが悪いこと言うなぁ。
もともとのコードが良いからさ。
0796デフォルトの名無しさんNGNG
>>790 ありがとうございます。

linux.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
半可通なGCC廚が多いな。
答えられないなら黙ってりゃいいのに。一生ビルドだけしてろ。
0798デフォルトの名無しさんNGNG
お前が黙ってろw
0799デフォルトの名無しさんNGNG
>>797
>>797>>797>>797
>>797>>797
0800デフォルトの名無しさんNGNG
ソースとアセンブリの混合リスティング出すオプションは無いの?
0801デフォルトの名無しさんNGNG
gcc --help
gcc -v --help
0802デフォルトの名無しさんNGNG
発音と日本語での書き方は別物。
warming upをワーミング・アップとかStar Warsをスター・ワーズとか言う奴はアホ。
0803デフォルトの名無しさんNGNG
おとうちゃん!
クロスコンパイラビルドしてみたんだけど、ブートストラップのcrti.oを作ってくれないよ!
crtbegin.oとかは作ってくれるのに、何故ぇ??
0804デフォルトの名無しさんNGNG
>>803
クロスで、とくにカナディアンで、ライブラリ作るの、
けっこうノウハウいるから苦労するよ。

俺なんて、cc1 とかのコンパイル成功した時点で、それ使っちゃうからな(w
0805800NGNG
>>801
探しても無いんだけど。。
0806デフォルトの名無しさんNGNG
>>805
じゃ、無いってことだろ。あきらめたら。
0807デフォルトの名無しさんNGNG
開発者の人はどうやってデバッグしてるんだろう。
ソースとアセンブラ(もしくは他の内部的な中間コード)の
リストあったら見やすくない?
0808デフォルトの名無しさんNGNG
>開発者の人はどうやってデバッグしてるんだろう。
gdbでデバッグしている。といいたいところだけど。

制御系だとターゲットが常に手元にあるわけではないし
問題が発生しても、エンドユーザの環境でデバッグするわけにもいかない。

そこで例外発生時のバックトレース情報
(例外が発生したアドレスと、その呼び出し元のアドレスの一覧)
から調査を始めるわけなんだけど

ldの吐き出したマップファイルからアドレスと関数の対応はわかるものの
ソースのどの行かまではわからないんだよね。

アセンブリリストは -S で出るから、そのリストを見て、おそらくこの行だろう
と推測するしかないという状況。

外部ツールでもいいから、ソースとアセンブリの混合リストを吐く方法は無いだろうか?
デバッグ情報付きのオブジェクトから作れそうなものだけど。
0809デフォルトの名無しさんNGNG
仕事上、生粋のエイゴリアンともよく話すんだけど
連中にもワーニングって言って通じたよ
「ウォー」より「ウヮー」って発音だったけどね
0810デフォルトの名無しさんNGNG
warm と worm のどっちがワームなのか知らない奴が沢山いる予感・・・
0811デフォルトの名無しさんNGNG
いつまでくだらんネタやってんの?
0812デフォルトの名無しさんNGNG
>>805
objdump にそういう機能がある。

--source
Display source code intermixed with disassembly, if possible.
Implies -d.
0813デフォルトの名無しさんNGNG
>>812
ありがとうございます。
objdumpとは、言われて見ればああなるほど。

これで仕事が進みます。
0814デフォルトの名無しさんNGNG
>>813
>これで仕事が進みます。
それが、2chサーチエンジン。まれに嘘を吹き込まれるが。(藁
0815デフォルトの名無しさんNGNG
>>734-737
Cygwinで日本語PATH問題は、Win板のこちらへ。
http://pc5.2ch.net/test/read.cgi/win/1052361218/933-940

もとはUNIX板のCygwinスレで出てきた話だけど、まとまってないし、dat落ち中だし。
0816デフォルトの名無しさんNGNG
hoge
と表示してくれるのを期待したのに、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デフォルトの名無しさんNGNG
あ、スペースが詰まってインデントが見難い…
0818デフォルトの名無しさんNGNG
$gcc --version
gcc (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デフォルトの名無しさんNGNG
あ、ファイル名違ったままだった。スマソ。
0820デフォルトの名無しさんNGNG
_main:
pushl %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デフォルトの名無しさんNGNG
gccのおせっかい機能だった気がせんでもない
0822デフォルトの名無しさんNGNG
-Oをはずせばprintfになる。
GCCの最適化処理が、不変な文字列出力であった場合、
puts等に置き換えるがその影響かも。
これは、既知の問題なのか?
まぁ、通常こんな書き方するやついないが。
0823デフォルトの名無しさんNGNG
>>819
ANSIはしらんが、最新のJIS C(=ISO C)ではライブラリの識別子は予約とされていて、
同じ識別子を使うと未定義となる。C89でも同じだと思う。
だからこの動作でもOK。

JIS X 3010 2003(ISO/IEC 9899: 1999) 126ページ 7.1.3 予約済み識別子
0824デフォルトの名無しさんNGNG
>>819でなくて>>816だった。

しかしJISCのサイトはなんでアイコンがネットスケープなのかな?
0825デフォルトの名無しさんNGNG
>>824
>しかしJISCのサイトはなんでアイコンがネットスケープなのかな?
ワロタ
鯖は、Solarisだがな。
0826デフォルトの名無しさんNGNG
自作putcharを作成したんですけど、以下の警告が出てしまいます。
この問題を回避する方法ってあるのでしょうか?
hoge.c:28: warning: conflicting types for built-in function `putchar'

gcc version 3.3.3です。
0827デフォルトの名無しさんNGNG
putcharという名前に拘るのをやめる
0828デフォルトの名無しさんNGNG
>>826
1. 自作putcharの名前を変える.
2. built-inのputcharが宣言してあるheaderを読み込まない.
3. c++にして名前空間を利用する.
くらいでしょうか.
0829デフォルトの名無しさんNGNG
普通は1、正しいのは3、2を選ぶ奴はドンキホーテ
0830デフォルトの名無しさんNGNG
>>823
7.1.3 予約済み識別子 だけだと、
ライブラリの extern な識別子は、extern な識別子として使うのは予約済みだけど、
>>816みたいに、static な識別子として使うのは予約されてない。
けど、6.2.2 識別子の結合 で、
翻訳単位の中で同じ識別子が内部結合と外部結合の両方で現れた場合、その動作は未定義とする
となっているので、動作は未定義になる。
という理解であってる?

>>820
最適化すると、printf("hoge\n"); が puts("hoge"); に置き換えられたり、
printf("%s\n", s); が puts(s); に置き換えられたりするみたい。
(ただし、返却値を使ってない場合)
0831デフォルトの名無しさんNGNG
>>818-8223
printf が最適化で puts に置き換えられるのは、
ちょっと余計なお世話なような気はするけど、通常は問題なさそうなので許すとして、
int puts(const char *);
static void puts(void) {}
が、型が違うぞゴルァと言われずにコンパイルできてしまうのは、ちょっと気持ち悪いかな。
0832デフォルトの名無しさんNGNG
Use either of -fno-builtin-printf or -fno-builtin
0833826NGNG
>>832
Thanx
0834デフォルトの名無しさんNGNG
局所的なstatic変数の動的な初期化をスレッドセーフに行わせるための
オプションってありますか?C++です。

void foo(void) {
static int bar = baz(); // ここ
return ++bar;
}
0835デフォルトの名無しさんNGNG
排他制御しろ。
0836デフォルトの名無しさんNGNG
main()に入る前(にstatic storageの変数の初期化が行われる)はシングルスレッド。
0837デフォルトの名無しさんNGNG
>>835
> 排他制御しろ。
チーム全体に周知するのが困難で。

>>836
局所変数だからmainの前には初期化されまへんね。ゼロクリアは保証されてるけど。
0838デフォルトの名無しさんNGNG
static __thread int bar = baz();
とすると、何が変わるの?
0839834NGNG
とおもったがやっぱり排他制御しますー。
0840デフォルトの名無しさんNGNG
>>838
TLSあたりでぐぐってみる。
0841デフォルトの名無しさんNGNG
>>839
>とおもったがやっぱり排他制御しますー。
それが一番無難だ。
0842デフォルトの名無しさんNGNG
>>837
> チーム全体に周知するのが困難で。

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デフォルトの名無しさんNGNG
張り間違えた…
http://developer.apple.com/documentation/DeveloperTools/gcc-3.3/gcc/Thread-Local.html
0844834NGNG
>>838
> static __thread int bar = baz();
> とすると、何が変わるの?
動的初期化はできないですよん
0845デフォルトの名無しさんNGNG
>>844
>動的初期化はできないですよん
起動時に一度だけ初期化したいってことか?
なら、フラグを持って排他制御だな。
0846デフォルトの名無しさんNGNG
排他制御の徹底をチーム全体に伝えれないのに、スレッドとか使うのは
なんだか凄く危険な予感がするんだが。
0847デフォルトの名無しさんNGNG
>>846
人のことなんてしったことではありません
0848デフォルトの名無しさんNGNG
動的初期化って言葉あまり言わないなぁ。
0849デフォルトの名無しさんNGNG
>>848
JISの用語だろうなJISX3014の3.4.2とか見てみれ。
0850デフォルトの名無しさんNGNG
VC++で書いたコードをg++でコンパイルしたら
ファイルサイズが結構でかくなったんだけど、
これは仕様ですか?
0851デフォルトの名無しさんNGNG
>>850
stripした?
0852デフォルトの名無しさんNGNG
>>851
は?ストリップ?
0853デフォルトの名無しさんNGNG
>>851
-Osでコンパイルして、stripしたら、70KBくらい減った。
ありがとー
0854デフォルトの名無しさんNGNG
質問しといて「は?」は無いよな・・・
0855デフォルトの名無しさんNGNG
厨房だろ
0856850,853NGNG
>>854,>>855
一応だけど、>>852は漏れじゃないです。
0857デフォルトの名無しさんNGNG
>>854

>>852 は多分成りすまし。
ID 無い板でよく行われる。
0858デフォルトの名無しさんNGNG
gccで以下のように宣言できるんですけど
いったいどうなるんですか?

struct hoge;
0859デフォルトの名無しさんNGNG
g++で以下のように宣言できるんですけど
いったいどうなるんですか?

class hoge;
0860デフォルトの名無しさんNGNG
これってどういう意味?
__attribute__((noderef, hogehoge(1)))
0861デフォルトの名無しさんNGNG
>>858
gccさんが、(´・∀・`) ヘェーって思う。

>>859
g++さんが、(´・∀・`) ヘェーって思う。
0862デフォルトの名無しさんNGNG
http://www.sra.co.jp/wingnut/gcc/gcc-j.html#Function%20Attributes
これ見ても載ってないね。noderefってなんだろう。
0863デフォルトの名無しさんNGNG
>>861
糞ワロタ
0864デフォルトの名無しさんNGNG
>>860
gccのバージョンとターゲットは何?
3.3.2のソースを眺めでみたが、見当たらん。
0865デフォルトの名無しさんNGNG
>>858,859

C++だと時々使うよ、Cでも通るんだな struct hoge は初めてだ

後でちゃんとしたの宣言するから、とりあえず通せって考えてるけど
実際どうなんしょ?

0866デフォルトの名無しさんNGNG
>>858,>>859
何のメリットがあるんだろう..
0867デフォルトの名無しさんNGNG
相互参照する構造体での前方宣言ですよ。
struct foo;
struct bar {
struct foo *p;
};
struct foo {
struct bar *p;
};
0868デフォルトの名無しさんNGNG
struct __foo {
struct __foo * p;
};
というのもある意味前方参照?
0869デフォルトの名無しさんNGNG
>>867
2パス通せばいいと思うんだが。
コンパイル高速化の為?
0870デフォルトの名無しさんNGNG
>>869
それもあるが、実態を隠したいわゆる ADT (抽象データ型) を実装する
ためにも使う。
0871デフォルトの名無しさんNGNG
>>870
>それもあるが、実態を隠したいわゆる ADT (抽象データ型) を実装する
>ためにも使う。
なるほ。
0872デフォルトの名無しさんNGNG
struct foo;
こういうのは不完全型という。
0873デフォルトの名無しさんNGNG
class foo; //class header
class foo {}; //class body

と、C++では言います
0874デフォルトの名無しさんNGNG
>>873
聞いたことねーな。誰が言ってるの?
0875デフォルトの名無しさんNGNG
>>874
lippman
0876デフォルトの名無しさんNGNG
>>873
"class header"というと、ほとんどが「クラス定義を含むヘッダファイル」を指して言うみたいなんだが、
その意味で使われている例をWeb上の文書で示せるか?
0877デフォルトの名無しさんNGNG
876
C++Primerに載ってただけ。便利だから俺はよく使ってる。
0878デフォルトの名無しさんNGNG
ごめん今ちゃんと読んだら、class headだったし、
全然違う意味だった。逝って来る。
0879デフォルトの名無しさんNGNG
>>877
たぶん一般的じゃないからやめたほうがいいと思う。
>876のような意味に勘違いされる可能性が高い。

関数の場合を考えると、
 void foo(); // 関数宣言
 void foo() {} // 関数定義
この使い分けは一般的だから、
 class foo; // クラス宣言
 class foo {}; // クラス定義
こう使い分けるのがすっきりしてるかも知れない。
ただ、「クラス宣言」が「クラス定義」の意味で使用されることが多いので、
これも誤解を生まないわけではない。

現状で最も誤解が少ないのは、
 class foo; // クラスの前方宣言(forward declaration)
 class foo {}; // クラス定義
と使い分けることだろう。
0880デフォルトの名無しさんNGNG
lippmanのいうclass head,class bodyとは

class CLASS //この部分がclass head
{
  //この部分がclass body
  ...

ということ。汗かいちゃった。
0881デフォルトの名無しさんNGNG
>>860
ttp://lists.gnu.org/archive/html/tinycc-devel/2003-04/msg00094.html
0882デフォルトの名無しさんNGNG
>>879
> この使い分けは一般的だから、
一般的というか、規格書で使ってる用語そのまま。
0883デフォルトの名無しさんNGNG
>>881
ああ、NO DEREFerenceなのか。
0884デフォルトの名無しさんNGNG
・"noderef"を付けるとデータを参照してないポインタに警告を出す。
・address_space(N)データへのポインタは、同じaddress_spaceへのポインタと型が互換になり、そうでなければ警告を出す。
ってこと?
なんだかよくわからんが。
0885デフォルトの名無しさんNGNG
>>884
逆でしょ。

dereferenceしようとすると警告になるんでしょ。
使い方としては「カーネル空間からユーザ空間にアクセスしようとすると警告」など。

0886デフォルトの名無しさんNGNG
>>885
うむ。なるほど。
0887デフォルトの名無しさんNGNG
ソース見てたら以下の文字列がありました。
#pragma pack(1)
#pragma pack()
これってなんすか?

ネットで調べるとpragmaは古い仕様なことがありましたが。
0888デフォルトの名無しさんNGNG
>>887
http://www1.kcn.ne.jp/~robe/cpphtml/html03/cpp03014.html
0889887NGNG
>>888
さんくすです。paddingか。
__attribute__ ((aligned (1), packed))ってことか。

pragmaってよく使用するんですかね。attributeを使えばいいような気もしますが。
0890デフォルトの名無しさんNGNG
attributeはgccの拡張仕様だから。
文法的にはattributeの方がわかりやすくでいいけど。
0891デフォルトの名無しさんNGNG
DLL作りでメモリ共有する時にもgccではattribute shared使うけど、MSだとpragma使うから
コンパイラ非依存にするには#ifdefでごちゃごちゃやってやらないといけないのが面倒。
0892デフォルトの名無しさんNGNG
>>889
http://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
>>892
該当するページが見つかりませんでした。

検索のヒント

- キーワードに誤字・脱字がないか確かめてください。
- 違うキーワードを使ってみてください。
- より一般的な言葉を使ってみてください。
- キーワードの数を少なくしてみてください。
0894デフォルトの名無しさんNGNG
>>890,>>891
なるほど、attributeってGCC依存なのか。知らんかった。Thx
0895デフォルトの名無しさんNGNG
>>892さんは以下を言いたかったに違いない。
http://www.kab-studio.biz/Programing/Dictionary/Words.html#__s__pragma
0896デフォルトの名無しさんNGNG
それにしても、3.0 以降はバージョン番号がさくさく進むね。
なんか 2.95.2 のときの停滞がうそのようだ。
0897デフォルトの名無しさんNGNG
>>896
前は人手が足りないようなことを言ってけど、
開発メンバが増えたのかな。
0898デフォルトの名無しさんNGNG
エンタープライズ向けのみになって暇になったRedhat内の開発者がまたいじってるんじゃないかと推測
0899デフォルトの名無しさんNGNG
GCC 3.5 Release Series
Changes, New Features, and Fixes
http://gcc.gnu.org/gcc-3.5/changes.html
0900デフォルトの名無しさんNGNG
【gccの最適化オプション一覧】
-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デフォルトの名無しさんNGNG
>>899
3.5出たのん?
0903デフォルトの名無しさんNGNG
>>901
strength reduction
0904デフォルトの名無しさんNGNG
>>901
コンパイルにコストがかかるってことだろ。
0905901NGNG
>>904
>コンパイルにコストがかかるってことだろ。
Oh, I see.
0906デフォルトの名無しさんNGNG
>>902
まだ出てない。
>>899は、GCC 3.5を作成するにあたって行われる変更、新機能、修正一覧を知らせてるだけ。
0907デフォルトの名無しさんNGNG
>>901
-fexpensive-optimizations
 Perform a number of minor optimizations that are
 relatively expensive.

意訳すると「時間もメモリも喰うワリに効果の薄い最適化を行う」だ。
gcc-2 の頃からあったような希ガス
0908デフォルトの名無しさんNGNG
>>907
希ガスって風俗板方面の用語だっけ?
0909デフォルトの名無しさんNGNG
gccではなくg++で、トランポリンのコードが生成されるシチュエーションってありますか?
ネストした関数はg++だとコンパイルできません。
0910デフォルトの名無しさんNGNG
>>900
-Oはいっぱいあって、-O999あたりまでいける。意味は皆無だと思うが。
0911デフォルトの名無しさんNGNG
>>910
昔、某ディストロは「-O99」なんてやってたね。今はどうだか知らないけど。
0912デフォルトの名無しさんNGNG
プリコンパイルヘッダをもう少しだけなんとかしてくれんか脳…
そういやx86用ならIntelのC++コンパイラはGCC完全互換+ごっつい
プリコンパイラヘッダ対応らしいが、GCCとどう違うんだろう。
0913デフォルトの名無しさんNGNG
>>912
どういうところが難アリとお考えで?
0914デフォルトの名無しさんNGNG
よく聞きますけど、
「トランポリンコード」って何ですか?
0915デフォルトの名無しさんNGNG
>>914
よく聞く ?
俺は初めて聞くが、どうも Linux 関係らしいから、それ以上調べるのはやめた。
0916デフォルトの名無しさんNGNG
>>909はLinuxなのか?
0917デフォルトの名無しさんNGNG
>>909は何のことか分からないけど、
Linuxのトラノポリンはスタック領域の移動に使うコード。
シグナルハンドラで使われる。
二つのトランポリンを横移動ってイメージの命名だと思う。
0918デフォルトの名無しさんNGNG
clock()で秒以下の数値が戻ってこないのですが、
なにかオプションの指定が必要なのでしょうか?
gcc 3.2.3 20030502(Red Hat Linux 3.2.3-20) を使用しています。
0919デフォルトの名無しさんNGNG
gccの問題なのか?
0920デフォルトの名無しさんNGNG
ははは
いいつっこみだ。
0921デフォルトの名無しさんNGNG
>>914
gcc のマニュアルの nested function の項に書いてあるよ。
あとはここにも。

ttp://www.shiro.dreamhost.com/scheme/docs/cont-j.html
0922デフォルトの名無しさんNGNG
>>918
gccとは無関係だからLinux板で。
まぁ、gettimeofday()でも使っとけってことで。
0923デフォルトの名無しさんNGNG
以下のソースで、
int 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
>>923
可変長引数に short 型の変数を渡すときには、暗黙の内に int にキャスト
(格上げ)されるから。
0925デフォルトの名無しさんNGNG
3.4.1 age
0926923NGNG
>>924
うぉーそうだったんですか!
何年もC使ってたけど知らなかった。 _| ̄|○
逝ってくる。
0927デフォルトの名無しさんNGNG
日本人でGCCデベロッパな方っているんでしょうか?
自分もGCCデベロッパに入りたい。けど、技術力がないからだめか。
やはり、コンパイラの勉強しないとだめですか?
0928デフォルトの名無しさんNGNG
Kに弟子入りすれば大丈夫
0929デフォルトの名無しさんNGNG
たまに開発MLに日本人らしき名前で投稿があっても、しょっちゅうスルーされてた。
0930デフォルトの名無しさんNGNG
英語の下手な香具師はコミュニケーションとれないからな。
技術力以前の問題というか。
0931デフォルトの名無しさんNGNG
ゾウさんが好きです。けど、gnuさんがもっと好きです。
ttp://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
>>932
コーディングだけならね。パッチ送って採用されたとか
そのレベルでしょ。
0934デフォルトの名無しさんNGNG
>>933
それ以上になにかあるのか?
目的は達成されているような気がするが。

それとも相手の家にでも遊びに行くのか?
0935デフォルトの名無しさんNGNG
>>934
どのバージョンでどの機能を入れるか、みたいなプロジェクトの
方針や決定に関われるようなヤシはいないって事でしょ。

もっともそこまでやるなら、それこそRedHatみたいな会社でフル
タイムのhackerとして雇ってもらうとかじゃないと時間的に無理
だろうが。
0936デフォルトの名無しさんNGNG
>>933
それくらいでも、
hogehogeがおかしいので直して見たけど、これどうよ?
てな事をちゃんと説明しないとスルーされるわけですが。

それなりの実績があれば一行説明でもわかってくれるが。

>>934
commit権もらうとか。
0937デフォルトの名無しさんNGNG
>>936
>commit権もらうとか。
ワロタ
0938デフォルトの名無しさんNGNG
3.4.1の出来はどうですか?
0939デフォルトの名無しさんNGNG
>>938
上々の出来
0940デフォルトの名無しさんNGNG
GCCじゃなくってGDBの話なんだけど、Cygwin、MinGW用のビルドは
常にスレッド対応してないのかな??
クロス開発で不自由で。
5.2.1〜6.1までをぽつぽつと試してみたんだけど、info thread(s)で
どれもRMT ERRORとでるか、最初のスレッドの情報が中途半端に
帰ってくるだけで、2つめ以降のスレッドの情報は出てこない。
break置いても止まらないし、あまつさえメインのスレッド止めても
それ以外のスレッドは走りっぱなしなのでデバッグにならん。
gdbserverのバージョン変えても駄目だし、--enable-threads付けて
ビルドしても駄目だし、どうしたものか。
0941デフォルトの名無しさんNGNG
んーgdbをデバッグするってのはどう?
0942デフォルトの名無しさんNGNG
>>940
CygwinやMinGW等ではなくて素のOSに入れてもなるのならGDBを疑う。
0943940NGNG
>>942
手元のLinuxで同じコードをでビルドした時にはならなかった…。

info threadが何も返さない、RMT ERRORが出る、
最初のスレッドの情報しか返してよこさない、というのは、
GNUのページ見てると、Win環境に留まらず、時々報告されてる
バグ?ではあるみたい。

GDBのスレッド対応はターゲット次第らしいので、仕方ないっちゃあ
仕方ないけど、思ったよりも気にしてる人少ないのかな。
0944940NGNG
>>942
手元のLinuxで同じコードをでビルドした時にはならなかった…。

info threadが何も返さない、RMT ERRORが出る、
最初のスレッドの情報しか返してよこさない、というのは、
GNUのページ見てると、Win環境に留まらず、時々報告されてる
バグ?ではあるみたい。

GDBのスレッド対応はターゲット次第らしいので、仕方ないっちゃあ
仕方ないけど、思ったよりも気にしてる人少ないのかな。
0945名無しさん@そうだ選挙に行こうNGNG
各アプリケーションの初期設定では、最適化オプション
-O2
であることがほとんどですが
-O3
にすると問題は多いのでしょうか?
房な私にアドバイスお願いします。
0946名無しさん@そうだ選挙に行こうNGNG
多くない。
0947名無しさん@そうだ選挙に行こうNGNG
多いって言うかどんな問題があるのか知りたい
0948名無しさん@そうだ選挙に行こうNGNG
-O2にすると偶然動くバグとかあるじゃん。
そういう意味で-O3は問題だ。
0949名無しさん@そうだ選挙に行こうNGNG
http://gcc.gnu.org/testing/
http://gcc.gnu.org/ml/gcc-testresults/
0950デフォルトの名無しさんNGNG
酸素とオゾンは大違いだしな
0951デフォルトの名無しさんNGNG
>>940
Cygwin で GNU gdb 2003-09-20-cvs (cygwin-special) を使ってますが、
今のところ、マルチスレッドでおかしな現象には出会ったことないですよ。

自分が不自由してるのは、detach が効かないこと。
他のバージョンではどうなんだろう、試したことないけど。
0952デフォルトの名無しさんNGNG
そろそろ128bitCPU用にlong long longが欲しいな。long long long long かもしれないが。
0953デフォルトの名無しさんNGNG
コンパイル時の定数計算のために、long long(uint64_t)が導入されたが、
ILP64の環境の場合にはuint128_tが必要にならないんだろうか。
0954デフォルトの名無しさんNGNG
GCCの最適化オプションは数あれど
基本的には -O* を指定しておけば、必要に応じて
-fstrength-reduce等のオプションが設定されると考えて良いのでしょうか?

要するに -O3等はオプションの総合オプションのように機能しているのでしょうか?

素人な私にアドバイスをお願いします。
0955デフォルトの名無しさんNGNG
んじゃ適切なアドバイスを。info読め。ちゃんと書いてあるから。

0956デフォルトの名無しさんNGNG
info読むためにはemacsの使い方を(略
0957デフォルトの名無しさんNGNG
#include <iostream>
すると、
/usr/include/c++/3.4.0/backward/iostream.h
が読み込まれてしまうみたいなんだけど、
/usr/include/g++-3/iostream{,.h}
を使いたい場合はどうしたらいいでしょう?
0958デフォルトの名無しさんNGNG
>>954>>956
http://gcc.gnu.org/onlinedocs/gcc-3.4.1/gcc/Optimize-Options.html#Optimize%20Options
0959デフォルトの名無しさんNGNG
>>954
その認識であってる思います.
最近どっかのスレで見掛けたのだけど,
-vと-Qを同時に指定すると, 実際に有効にされたオプションが表示されるようです.
0960959NGNG
突っ込まれそうなのでもう一言.

>>954
あなたの言う「総合オプションのような機能」以外のなんらかの最適化を
更に-O*が行なうかどうかを私はよく知りません.
それはソースを当たって下さい.
0961デフォルトの名無しさんNGNG
>>959>>960
変わった人…
0962959NGNG
>>961
???
何か良いこと知ってるんなら教えて下さい.
0963デフォルトの名無しさんNGNG
ソース読む前にinfoでしょ。
0964デフォルトの名無しさんNGNG
gcc hoge.c -lm 等、ライブラリを使用してコンパイルするときに
この'-lm'で具体的にどこのライブラリを参照するかはどのように指定するのでしょうか?
0965デフォルトの名無しさんNGNG
-L/home/foo/lib -L/usr/local/lib -L/opt/bar/lib
0966959NGNG
>>963
それには異存ないんですが,
infoの説明では,
-O*にいくつかの-f*をまとめて指定する「総合オプションのような機能」があることは分かりますが,
-O*が,指定した-f*以外にも何らかの最適化を行なうのか,-f*の指定だけなのかちょっと不明だったもので.
読み落してたら御指摘下さい.
0967959NGNG
-O2を指定して959に書いた-vと-Qを使うと,
「渡されたオプション」には-O2が表示されるけど,
「有効オプション」には-O2が表示されないところをみると,
-O*は「総合オプションのような機能」だけなのかも.
0968デフォルトの名無しさんNGNG
$ gcc -O3 -v -Q test.c > o3.txt 2&>1
$ gcc -O2 -v -Q test.c > o2.txt 2&>1
$ diff o2.txt o3.txt

何もでないよ(^^;
0969デフォルトの名無しさんNGNG
2&>1 じゃなくて 2>&1 だったよ(^^;

diff を見るに
-frename-registers
だけ違うように見える。

gcc version 3.3.1 (cygming special)
0970デフォルトの名無しさんNGNG
古い記憶なんだが、そもそもO3が有効なのはx86系だけなんじゃなかったっけ。
0971デフォルトの名無しさんNGNG
バージョンにより違うんじゃないの?
0972デフォルトの名無しさんNGNG
>>970
sparcでも使えてたよ
0973デフォルトの名無しさんNGNG
info も嘘っつーか、source に追いついてなかったりするから
しょうがなく gcc/toplev.c と md 部分の *.c や *.md 見て確かめてるな。
0974デフォルトの名無しさんNGNG
-finline-functionsはO2にあるはず無いし、O3に無いはずが無いだろう
0975959NGNG
>>974
manによるとそうなんですけど,
gcc -v -Q -O3 hoge.cpp
だと,-finline-functionsが出ません.
やっぱgccはソースを見るしかないのか.
0976デフォルトの名無しさんNGNG
-v -Qが壊れてるんじゃないの?
0977959NGNG
gcc -v -Q -O3 -finline-functions hoge.c
としても,有効オプションに-finline-functionsは表示されないので,
-v -Qは指定された有効なオプション全部を表示しているわけではない
みたいです.
失礼致しました.
0978959NGNG
>>976
壊れてるっていうか,
-v -Qに全部の有効オプションの表示を期待した私が間違ってたってことです.
0979デフォルトの名無しさんNGNG
gcc -S -O2とgcc -S -O3でコード比較すれば
インライン展開してる事なんてすぐ分かるじゃん。
アセンブラも読めないのに最適化についてなんて語るなよ。
0980959NGNG
>>979
それはそうなんだろうけど,
最適化はインライン展開以外にもたくさんあるわけだし,
全部の有効オプションを表示する機能はあれば便利なのでは?
0981デフォルトの名無しさんNGNG
正論だ。


ところで次スレは?
0982西安(UCK 3.13.8) ◆CYANlp4LPo NGNG
立てた

GCCについて part4
http://pc5.2ch.net/test/read.cgi/tech/1090062751/
0983デフォルトの名無しさんNGNG
>>980
そう思ったら-v -Qのコード直すなりしてパッチ送りなよ。どうしてそうしないの?
0984デフォルトの名無しさんNGNG
>>983
思った瞬間にスレに書き込んだんでしょ。きっと、もうパッチ作って送ってるヨ。
0985959NGNG
「おまえら次のリリース楽しみにしておけよ!」
と書き込みたいところだけど.

>>983,984
そうやってひとを追い込まない.(苦笑)
私はgccのコード把握してないんで,そう簡単に直せないヨ.
0986959NGNG
>>975
どうやら,
c-opts.cのbool c_common_post_options ()で,
flag_inline_functions = 0;
しているからというのは分かったんですが,
flag_inline_functionsは,あとの処理で参照しているので安易に変更できないし.
ちょっと簡単ではなさそう.
0987デフォルトの名無しさんNGNG
煽りに耐えてよくがんばった!感動した!

調査が進んだらまた報告しれ。
0988デフォルトの名無しさんNGNG
gcc/toplev.cのf_optionsで定義されてるものしか表示してないだけのような?
0989959NGNG
>>988
flag_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デフォルトの名無しさんNGNG
すみません。そんなに根が深かったとは思いませんでした。
0991デフォルトの名無しさんNGNG
age
0992デフォルトの名無しさんNGNG
しつこくてすみません。こんな変更じゃ駄目でしょうか?

gcc/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;
0993959NGNG
>>992
私のいじってるのと関数の名前が若干違ってますが(バージョンが違う?私は3.3.4見てます.),
たぶん,それで望みの動作になるでしょうし副作用もないでしょうね.
0994992NGNG
すみません。3.4.xを使ってます。3.3.xと関数名が違うとは思っていませんでした。

3.3.xだと

parse_options_and_default_flags (argc, argv);
+ flag_inline_functions_959 = flag_inline_functions;

こうなるようです。実際の動作は確認できていません。
0995959NGNG
>>994
いえ,私こそ新しいものを前提にするべきでした.

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デフォルトの名無しさんNGNG
gcc -O3 -o 1000.exe 1000.c
0997デフォルトの名無しさんNGNG
gcc -O3 -o 1000.exe 1000.c -Wall
0998デフォルトの名無しさんNGNG
997
0999デフォルトの名無しさんNGNG
gcc -O3 -o 1000.EXE 1000.c -Wall
1000デフォルトの名無しさんNGNG
$ make love
error: Permission denied.
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。