【preprocessor】 Can it be used with C? C90標準に従っているコンパイラなら動くはず、と。
Cプリプロセッサ上で実装されたBrainfuckインタプリタです。 $ cat hello.txt # include "bfi.h" BFI_RUN1(x x x x x x x x x (b x x x x x x x x b x x x x x x x x x x x b x x x x x d d d _) b w b x x w x x x x x x x w w x x x w b _ w _ _ _ _ _ _ _ _ _ _ _ _ w d x x x x x x x x w _ _ _ _ _ _ _ _ w x x x w _ _ _ _ _ _ w _ _ _ _ _ _ _ _ w b x w) $ cpp -P hello.txt Hello, world! bfi-0.tar.gz 使い方 "bfi.h"で定義されているBFI_RUNマクロがインタプリタの本体で
C++0x で新しく追加されるユーザ定義リテラルはアンダースコアから始まってないとダメという制約がありますが、これがコンパイル時に問題にならないということは hito さんが書いています(本の虫: user defined literalが予約語の制約を無視できる理由)。 でもコンパイル時じゃなくてプリプロセス時ならどうなるの?という話です。 アンダースコア二つから始まる名前と、アンダースコアひとつに大文字から始まる名前は、当然プリプロセス時にも影響してきます。 ということは、 #define __hoge hage というのをコンパイラが予約していた場合、 "bjarne"__hoge というのをユーザが書いた場合、プリプロセス時に __hoge が置換されてしまって、意図しない結果になりそうです。 これは問題だなーとか思っていて、ぼけーっと仕様書を眺めていたのですが、こんなのを見つけま
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く