>> 945
そのコードはVC6だとコンパイル不可?
こんな↓WARNING&エラーが出てしまいました。
warning C4003: マクロ 'IS_NIL' に指定された実引数の数が少なすぎます。
warning C4003: マクロ 'CAT_I' に指定された実引数の数が少なすぎます。
warning C4003: マクロ 'HEAD' に指定された実引数の数が少なすぎます。
・・・ (略) ・・・
error C2065: 'TYPE_SYM' : 定義されていない識別子です。
error C2146: 構文エラー : ';' が、識別子 'IF_' の前に必要です。
error C2065: 'IF_' : 定義されていない識別子です。
error C2062: 型 'int' は不要です。
>>952 ごめん。書き忘れてた。
>>945はgccとBoost.waveで通ることを確認した。
試してないけど、DigitalMarsの最近のバージョンでも通るかも知れない。
それ以外のプリプロセッサだとたぶん通らない。
え、カスじゃん
趣旨を理解しろよ駄馬。
つまりカスだってことでしょう
プリプロセッサにコンパイラ依存なんかあるもんなのか・・・
マクロ展開できる深さに制限があるとかならともかく、そもそも展開方法が違うとは。
プリプロセッサなんてC言語のときから変わってないものと思ってた。
すごいっちゃすごいけど、あんまり使い道が無いなw
これでいいんじゃね?
#define TYPE_MAX(type) (\
strcmp(#type,"char")==0?CHAR_MAX:\
strcmp(#type,"short")==0?SHRT_MAX:\
strcmp(#type,"int")==0?INT_MAX:\
strcmp(#type,"long long")==0?LONG_LONG_MAX:\
strcmp(#type,"unsigned char")==0?UCHAR_MAX:\
strcmp(#type,"unsigned short")==0?USHRT_MAX:\
strcmp(#type,"unsigned int")==0?UINT_MAX:\
strcmp(#type,"unsigned long long")==0?ULONG_LONG_MAX:0)
typedefしてたら?
即値じゃなきゃ駄目でしょー
gccは翻訳時に関数を実行して定数化するオプションがあると聞いたことある。
例えば a = strlen("ABC") を a = 3 にしてしまうとか。
プリプロセッサより前に実行される関数はありません。
デッドロックしてねえで前に進め。
ヒント:即値
つまり
>>962では即値が取得できないから意味が無いってことだろ。
日本に来て日が浅いんだろう。
>>962 >gccは翻訳時に
プリプロセスの時点ではまだ即値になってないんだろ。
しかし、コンパイル時にはstrcmp(リテラル, リテラル) になるから
コンパイラがstrcmpの仕様を知っていれば最適化できる、ということかな。
関数を実際に実行するというのは無理だもんね。
まあ、俺の下痢便でも飲んで落ち着け。
>>974 事前にコンパイルされている関数なら実際に実行するのは無理ではないだろうね
static/グロバーバルな変数を使わずハードも叩かない関数については
純粋関数としてマークしておいて、
コンパイル時に呼び出して即値入力をさせて結果を出すとかさ
OCXとかDelphiなんかはコンパイル時ではなく設計時にコンパイル済のモジュールを実際に動かしてるよね
>>977 gccのドキュメントは読んだのか?
ぐぐったらstrcmpの最適化については書いてあったぞ。
gccの実装の話をしていたのか?
gccの最適化の話じゃないのか?
話が噛み合ってない理由がわかった希ガス
いや、だからコンパイラが関数の仕様をしらなくても
純粋な関数なら入力に対して出力は必ず一意に定まるのだから
純粋な関数に定数の入力があれば、コンパイル時にその関数を実行させて
結果を定数化する事は可能だろうという事。
純粋な関数≒状態を保持しない で
状態を保持しないかどうかはコンパイル時に判るのだから
だからおまいら何の話してるのかそれぞれ言ってみろw
gccの関数を定数に置き換える変なオプションはトリッキーってことでFA?
>>981 外部にあるライブラリ関数だから純粋関数の判定はそう簡単ではない
やるとすればいくつかの関数を決め打ちにするしかなさそうだ
しかしライブラリ関数をinlineで実装してはいけないという規定は無いわけで……。
ハァ?誰が淫乱関数の話してんだよヴォケが。
もうそろそろスレ違いだから他でやんな。
gcc固有の動作ならそういうスレがあんだろが。
*
*
*
*
※
米
(゚∀( * )
あふ
埋めますか。
まぁネタがねえならな。乙乙。
998 :
デフォルトの名無しさん:2006/04/25(火) 21:35:51
//
1000なら、オナヌーする
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。