1 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 00:07:39 ] 史上最強かもしれないツール、GCC(GNU Compiler Collection)について語るスレ。 GNU本家のGCCページ gcc.gnu.org/ Binutils - Collection of binary utilities ←これも必要だぞ。 www.gnu.org/directory/GNU/binutils.html GNU Binutils sources.redhat.com/binutils/ GCC online documentation gcc.gnu.org/onlinedocs/ Installing GCC gcc.gnu.org/install/ GCC Timeline gcc.gnu.org/releases.html#timeline Calendar gcc.gnu.org/develop.html#timeline 前スレ GCCについて part7 pc11.2ch.net/test/read.cgi/tech/1145357824/l50
285 名前:デフォルトの名無しさん [2008/02/29(金) 02:16:52 ] 4.4forkしますた
286 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 00:53:35 ] gdbについて聞きたいんですが、 fork()のとき、どっちのプロセスも追っていきたい ときってどうすればいいんでしょうか? ただしソースコードはいじれないとします。
287 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 03:01:44 ] もういっこgdb起動してアタッチ?
288 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 03:54:21 ] GCCのマニュアルを読んでみると、-O1は -fauto-inc-decから-funit-at-a-timeまでの24つのフラグを有効にするとあるので bzip2を-O1でコンパイルしたバイナリと、-fauto-inc-dec以下24つのフラグでコンパイルしたバイナリとで、 同一のファイルを圧縮するのにかかる時間を比較したところ、同等の結果が得られませんでした。 -fauto-inc-dec以下24つのフラグでコンパイルしたバイナリは、何も最適化フラグを与えずにコンパイルしたバイナリと 同程度の結果になりました。どうしてこの様な結果になるのでしょうか。 gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options
289 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 05:51:10 ] >>288 「-Oは以下の最適化フラグを有効にする」と書いてあるけど、それしか しないとは書いてない。 gccのソースを見ると、「最適化レベルが1以上なら〜」というコードが けっこう見付かるはず。
290 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 11:59:59 ] >>288 各最適化オプション -fxxx は -O が前提となってたりする。 だから -O 指定せずに -fxxx 指定して効果がなくてもそんなもの。 最適化フラグ指定でんでんはGCCのソース嫁 でんでん…
291 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 12:02:04 ] で...云々
292 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 13:28:35 ] まさか、「云々」を「でんでん」と読んでたりしないだろうな。
293 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 13:32:22 ] >>292 本当ならガイシュツ並に痛い気がする。
294 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 13:46:50 ] ここは痛いインターネッツでつね
295 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 14:48:23 ] 「ガイシュツ」と同じくネタのつもりなんだろうけど、わざわざ読みに くく書くのは個人的には嫌いだ。
296 名前:デフォルトの名無しさん mailto:sage [2008/03/05(水) 22:58:23 ] 何年も前のネタでも反応が初々しい。このスレの住人は可愛い
297 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 01:59:27 ] >>288 実はディスクの方が律速で差が出なかったとか。 というかどうやって計って、どういう結果になったのか 書いてもらわんと難しいと思うわけで。
298 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 11:22:03 ] 4.3.0キタ━━━━━━(゚∀゚)━━━━━━ !!!!! ftp://gcc.gnu.org/pub/gcc/releases/gcc-4.3.0
299 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 14:35:38 ] mirror貼れ ftp://ftp.dti.ad.jp/pub/lang/gcc/releases/gcc-4.3.0/
300 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 15:12:45 ] GNUをミラーしてるお近くのftpサーバへどうぞ、でいいんじゃないのか。
301 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 16:07:59 ] snapshots見てたから気づかなかったぜ
302 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 22:25:45 ] 4.3の一番の売りは、主な数学関数をコンパイル時に展開してより最適化してくれるってことでOK?
303 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 13:26:47 ] -march=core2 -mtune=core2でしょ
304 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 16:13:38 ] geodeも忘れるな
305 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 05:30:08 ] で、4.1より早いの? じゃなきゃ糞だが
306 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 06:24:09 ] gcc-4.3のバイナリ実行速度は、integerについてはgcc-4.1よりも速いし、バグの数もgcc-4.1よりも少ない。
307 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 11:33:42 ] >>306 4.1から4.3で何が良くなったのか簡潔に頼む。
308 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 11:39:08 ] ggr (3バイト)
309 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 19:44:39 ] fate見ると4.3って4.1に比べて遅くなってるような。 4.1.2 fate.multimedia.cx/index.php?build_record=6158 4.2.3 fate.multimedia.cx/index.php?build_record=6169 gcc svn 133010, built 2008-03-07 fate.multimedia.cx/index.php?build_record=6163
310 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 21:56:34 ] 以前にベンチをnbenchとかbzip2とかで取ってみて比較した印象だと整数演算に関しては4.1より4.2の方が明らかに良いと 思っていて、最適化フラグが-O2の場合は4.2より4.3の方が若干良いという印象を持っていたのでそう書いたのでけど、 実は-O3の場合は事情が違って、4.2の方が4.3より良い結果になると思っています。つまり、 gcc-4.2-O2<gcc-4.3-O2<gcc-4.3-O3<gcc-4.2-O3 の順に性能が良くなると思っています。fateというベンチはstdout textを見ると-O3でコンパイルされているので 4.2の方が4.3より良い結果になるというのは順当だと思います。
311 名前:デフォルトの名無しさん mailto:sage [2008/03/08(土) 22:20:14 ] C++ヲタだから、あんまり速度比較には興味ないんだけど、 4.3はforward propagationが大幅に書き換えられているから、 4.2のの頃の結果から4.3の振る舞いを推測するのは危険だぞ。
312 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 13:19:28 ] 4.3.0今試してみたけどやっぱり4.1.2より遅いバイナリ吐いた あくまで自分が使うプログラムでってことだけど
313 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 18:47:18 ] 速い遅い以前に挙動が変わっちゃって今トレース中だよ・・・
314 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:34:14 ] それは十中八九 GCC のせいじゃない。 まあ、警告が不十分だった事に起因してる点があれば 30% 程度は GCC にも責任があるかもしれないが。
315 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:35:17 ] >>307 gcc.gnu.org/gcc-4.3/cxx0x_status.html Status of Experimental C++0x Support in GCC 4.3 Rvalue references N2118 Yes Rvalue references for *this N2439 No Variadic templates N2242 Yes Static assertions N1720 Yes Declared type of an expression N2343 Yes Right angle brackets N1757 Yes Default template arguments for function templates DR226 Yes Extern templates N1987 Yes C99 Features in C++0x __func__ predefined identifier N2340 Yes C99 preprocessor N1653 Yes long long N1811 Yes もちろんg++起動オプションでオンにしたときだけ。 gcc.gnu.org/gcc-4.3/changes.html
316 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:37:24 ] >>314 まさかgccはlintにするために作ってるわけじゃあるまいに。なんだその30%て。
317 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 19:19:11 ] Linuxで最近よく自分でアプリやカーネルをmake installします。gccの最適化フラグをつけないとつけた時に 比べてやはり遅いんだなってのは体感しました。所がアプリによりつけたフラグによっては動きが悪くなる ってのも体感。 なので自分はソースが読めないのでgcc4.2シリーズの-march=native -O2のみにして全部これでやることに しました。それなりに快適に動いてます。 少し前からgcc4.3の最適化は4.2よりいいと書いてある記事をみて開発版の4.3を入れたけど なんか動きがかなり違う。コンパイルが出来ない(一切フラグをつけなくても)物も出てきた。 それどころかある設定をしないとカーネルでさえコンパイル出来ないんですね・・・・ ググってカーネルのmakeファイルに設定を追加して出来上がった物も動きが悪いです・・・ やはり今回の正式リリースもカーネルとかそのままコンパイル出来ないんでしょうか? まあ、それは対策が解るからいいものの、使った感じちょっとソースが読めないような自分が使う物ではないな と感じたです。コンパイルエラーが出たのをネットでググる時間が(TT)
318 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:08:32 ] ソース読めない、情報拾うのが涙目、って状態で開発版を入れる神経が理解できない。
319 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:14:00 ] >>318 じゃあ正式リリース版のgcc4.3.0では何もいじらなくてカーネルコンパイルくらいは平気で出来るの? 4.2シリーズは開発版だろうがまるで神経使わなかったけど。
320 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:15:00 ] じゃあ(笑)
321 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:17:07 ] >>320 答えられないような人は黙っててよww
322 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:28:23 ] >>319 開発版を入れる神経を疑いはするが、4.3が安定しているかどうかは知らない。 私ゃ態々カーネルをコンパイルし直すほど暇じゃないんでね。
323 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 20:39:37 ] そうそう体感できるものでもないだろ 0.3秒かかってたのが0.27秒とかになったとしても
324 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 21:15:34 ] どうせGentooユーザなんだろうなぁ
325 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 22:08:50 ] 春厨だよ
326 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 22:27:47 ] >>322 安定とかの問題以前でgccサイドとカーネルサイドの意見が違っててどっちも直さないってのが ある筈なんだけど・・・ gcc4.3、カーネルと聞いて思い浮かばないようならもう話はいいですww
327 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:07:27 ] 「ある筈なんだけど」っていう程度の人は、 リリースされたばかりのコンパイラを使わない方がいいと思うよ > やはり今回の正式リリースもカーネルとかそのままコンパイル出来ないんでしょうか? あなたにはよく分からないことだから。
328 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:04:11 ] すいませんちょっとお尋ねしたいのですが、 コンパイル時に二つのオプションを使うことってできるのでしょうか? 例えば、若干スレ違い臭いのですが、質問させてください。 例えば、 `wx-config --cppflags` と `pkg-config --cflags gtk+-2.0` を同時に使いたいのです。 同時に使えるとしたらどのように書けばいいのでしょうか。 どなたかご教示頂けると幸いです。
329 名前:328 mailto:sage [2008/03/11(火) 00:05:15 ] 3行目コピペミスなので無視してください・・
330 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:10:10 ] 別スレでレスがつかなかったからこっちで・・・とか そのくらいの経緯は書いて欲しいな。 というか、向こうでレスついたぞ。
331 名前:329 mailto:sage [2008/03/11(火) 00:16:00 ] >330 すいません、そういうもんなのですか。以後気をつけます。 レスついたみたいですね。ありがとうございましたm(_ _)m
332 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 01:48:36 ] ん?GTK+スレでもwxスレでもないどこかなのかな?ま、いいか
333 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 02:30:21 ] 4.3でカーネルがビルド出来ないというのは、これです。 gcc.gnu.org/bugzilla/show_bug.cgi?id=32044#c28
334 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 02:33:55 ] カーネルに限らず、O2レベルでもミスコンパイルはよくあるから別に驚く話でもないが。 GCCコミッテーに文句つけて今の版のバグフィックスをしろよ、クソハゲドモと外人に文句垂れてくるんなら 俺は得に気に留めないよ。
335 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 02:38:16 ] 方向の違うこういうのもあるから、素人さんにはお勧めしない。 git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e40cd10ccff3d9fbffd57b93780bee4b7b9bff51 正直、コンパイル猿になるよりもずっと有意義なことがいくらでもあります。 何か一つターゲットを絞って深く追ってみるのならいいけどね。
336 名前:sage [2008/03/13(木) 10:12:58 ] int result; __asm__ ( "imull %%edx\n\t" "idivl %3\n\t" : "=a" (result) /* out */ : "a" (m1), "d" (m2), "g" (d) /* in */ : "ax", "dx" /* mod */ ); return result; } でコンパイルするとcan't find a register in class ‘AREG’ while reloading ‘asm’とのエラーが表示され、コンパイルできません。 どのように改善したら良いでしょうか。
337 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 10:35:04 ] なんか付帯情報が変な気がするんだけど、 何を参考にしました?
338 名前:sage [2008/03/13(木) 10:38:28 ] koulesっていうゲームのソースをmakeしたところエラーが発生したので ソースを見てみたらわけわからんという状態です。
339 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 12:18:37 ] 氏ね
340 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 12:44:18 ] gcc3 と 4 で変わったっけ?
341 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 23:18:52 ] g77 死亡
342 名前:デフォルトの名無しさん [2008/04/06(日) 00:24:12 ] gccのオプションで-ggdb3,-gや-O0, -O2のようにどちらかしか採用されないようなオプションを 同時に渡したときどちらが採用されるのでしょうか? gcc -ggdb3 -O0 -g -O2 -c src.c -o src.o と実行したときsrc.oは「-ggdb3 -O0」それとも「-g -O2」?
343 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 08:01:45 ] 引数の解釈する順番?
344 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 11:48:45 ] >>342 You can mix options and other arguments. For the most part, the order you use doesn't matter. Order does matter when you use several options of the same kind; for example, if you specify `-L' more than once, the directories are searched in the order specified. 機能が被る場合にどうなるかは明記されてないが 理解の一助にはなるかな?
345 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 12:36:30 ] -Qとかつければ、どう解釈されてたか見れたような?
346 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 16:25:44 ] Windowsと違って、UNIXだとsleep(0)ってやっても効果ないの?
347 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 16:44:17 ] Windowsだとどんな効果があるの?
348 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 17:19:21 ] >>346 Windowsでの効果は知らないけれど、Linuxの場合はタスクスイッチングを強制させるのに使える。 要は「最低0秒」止まるので、他に処理するべきプロセスがあればそちらを実行することになる。 # 逆に言えば、最悪何秒も止まりっぱなしになるかもしれない。
349 名前:デフォルトの名無しさん mailto:sag [2008/04/06(日) 20:31:52 ] pthread_yield
350 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 20:52:21 ] タスクスイッチというかカーネルへの制御の移行ね。 システムコールからそのまま戻るにしても既に送られたシグナルがあれば 戻る直前でシグナルハンドラが走る。 あとUNIXによってはsleepはプロセスタイマを使う可能性があるらしいので ユーザプログラム側でタイマを使う場合は注意が必要かも。
351 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 11:58:14 ] >>349 それはスレッドだから、>>348 の言っていることとは違う。 pthread実装はカーネル・スレッドばかりじゃないから。
352 名前:デフォルトの名無しさん [2008/04/07(月) 15:23:45 ] インクルードパスとライブラリのパスを環境変数で設定する方法を教えてください
353 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 15:29:27 ] 今時、その手法ははやらないんじゃないの?
354 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 15:33:12 ] CPATH LIBRARY_PATH とか?
355 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 17:50:52 ] INCLUDES LD_LIBRARY_PATH
356 名前:デフォルトの名無しさん [2008/04/08(火) 13:10:13 ] g++ で libfoo1.a と libfoo2.a をリンクしているのですが、 この2つのライブラリが相互に依存しているので、 undefined エラーになります。 libfoo1.a libfoo2.a のソースをいじることなく、 うまくリンクすることはできないでしょうか?
357 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 13:17:09 ] libfoo1.a内のどのオブジェクトがlibfoo2.a内のどのオブジェクトに依 存しているかなど、もうちょっと詳しい情報が欲しいけど、とりあえず gcc .... -lfoo1 -lfoo2 -lfoo1 のような感じでできへん? libfoo1.aとlibfoo2.aをバラして1つのlibfoo.aにしてしまうとかも。
358 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 13:44:25 ] >>356 sourceware.org/binutils/docs/ld/Options.html#index-groups-of-archives-127
359 名前:デフォルトの名無しさん [2008/04/09(水) 13:51:18 ] LIBRARY_PATHとLD_LIBRARY_PATHの違いは何ですか?
360 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 13:53:28 ] ldかld.soか 要するにコンパイル(リンク)時か、実行時か。
361 名前:デフォルトの名無しさん [2008/04/09(水) 16:39:29 ] >>352 どうやってやるの? IとかLとかでいちいち指定するの? それともmake?小さいプログラムではわざわざmakeなど使いたくないのだが。
362 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 16:41:32 ] スクリプトでやればいいじゃん
363 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 17:14:24 ] >>361 CFLAGS=-I/usr/include/foo LDFLAGS=-L/usr/include/foo -lfoo default: foo これだけ。foo.cから実行ファイルfooを作る。
364 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 10:28:43 ] /usr/lib/gcc/target/version/includeのようなgcc付属のヘッダのある ディレクトリを取得する方法はありますか? -nostdincを指定してるソースからstdarg.h等を使いたいのです。
365 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 11:13:22 ] gcc -print-search-dirs
366 名前:デフォルトの名無しさん [2008/04/10(木) 16:07:17 ] nm libhoge.a | grep hageとしたら 00001ffb t hageとでるのに int main() { return hage(); } のようにhageを呼び出してるプログラムのリンクが失敗するのですが どのような原因が考えられますでしょうか? gcc -g -O0 main.c -o huga -L. -lhoge main.c:2: undefined reference to `hage` collect2: ld はステータス 1 で終了しました
367 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 16:19:41 ] ? gcc -v -g -O0 main.c -o huga -L. -lhoge
368 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 17:02:27 ] ? gcc -v -g -O0 main.c -o huga -L. -lhoge -Wl,--verbose
369 名前:デフォルトの名無しさん [2008/04/10(木) 17:43:36 ] CとFORTRANでは最適化の方法が違うの?
370 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 22:06:32 ] >>366 t ってことはローカルシンボルじゃん
371 名前:デフォルトの名無しさん [2008/04/14(月) 20:54:13 ] Cygwin上でGCCのC,C++のクロス環境を作ってます。 newlibと組み合わせてビルドはうまくいってるんですが、 libstdc++のgchファイルがかなりサイズを食っていて扱いづらいです。 実際には、C++の言語本体の機能だけ利用できれば十分です。 configure時にうまく無効にする方法などあれば教えてください。
372 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 13:19:53 ] libstdc++で configure --help やってみたら、何か出るかも?
373 名前:デフォルトの名無しさん [2008/04/15(火) 13:22:43 ] GCCに、関数呼び出しとリターンを表示させたり記録させたりする オプションってありましたっけ? なんかあったような気もするけど、ぐぐってもヒットせんかった。
374 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 13:25:40 ] 実行時だとみれるような機能があったような?
375 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 13:35:46 ] >>373 記録させることはできないが、-finstrument-functions で hook させることはできる。 ググればいろいろ出てくるが、 www.ibm.com/developerworks/jp/linux/library/l-graphvis/index.html ここがわかりやすいな。
376 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 13:56:20 ] >>375 なにこれー!今日ほど2chが役に立った日はないわ。ちょーさんくすこ。
377 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 14:23:08 ] >>371 --enable-libstdcxx-pch build pre-compiled libstdc++ headers [default=$is_hosted]
378 名前:371 mailto:sage [2008/04/15(火) 21:11:44 ] >>372 ,377 ありがとうございます。 --disable-libstdcxx-pchを入れて試してみます。
379 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 20:53:48 ] gccで、クロージャとは言わないまでも、 ユーザーが作った関数へ、後から動的に値を埋め込む方法はありませんか? 言語処理系のコールバックの実装で、 その関数が呼び出された時に、その値を参照したいのです。 グローバル変数や、アセンブラを使えば作れるのですが、 できれば使わずに済ませたいので。
380 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:00:19 ] 任意のパラメータを受け取れる void* 型の引数を作るといいよ。
381 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:00:26 ] つ 関数へのポインタ
382 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:28:31 ] #include </dev/tty>
383 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:30:04 ] >>380-381 いやそうじゃなくて。 言い方を変えれば、関数とユーザー値を組み合わせて 新しい関数を作れるかって事です。 その新しい関数は、呼び出し時に なんらかの方法でユーザー値を受け取れる事。
384 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:31:21 ] また、誰が呼び出すかは判らないので、 ユーザー値をその関数の引数に入れる事はできません。
385 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:39:56 ] g() { return closure_ref(0) + 1; } f(pg) { return ((int (*)())pg)(); } main() { printf("%d\n", f(make_closure(g, 1))); return 0; } この場合2が表示される。 make_closureとclosure_refを作れるか fはstdlib.hのbsearchやqsortのように、 任意のライブラリの可能性もある。 (当然gはその型に合った関数型になる)