FreeBASIC マニュアルのトップに戻る

FreeBASIC FB_EVAL

目次→言語文書→その他→組み込み定義__FB_EVAL__←オリジナル・サイト

__FB_EVAL__ 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

コンパイラーによって実行される固有の定義(マクロ)。

構文:
__FB_EVAL__( arg )

パラメータ:
arg
引数

記述:
コンパイル時に引数(定数式)を評価します。

引数の評価で文字列が生成された場合、__FB_EVAL__ はプリプロセッサ演算子で整形された文字列を返します:
- エスケープされていない文字列リテラル (形式: $"text")。
- または、必要に応じてエスケープされた文字列リテラル(形式: !"text")。
その他のデータ型については、プレフィックスやサフィックスを除いた単純なリテラル(整数、浮動小数点、ブール値の)が返されます。

__FB_EVAL__ マクロは、次のいずれかがある場合に役立ちます:
- 非関数表現(すなわち、副作用)、
- 渡す前に評価する必要があります(つまり、簡略化され、演算子の優先順位を尊重します)。
- fbc が式を許可しない場所で使います。

例:
#print 1 + 2
#print __FB_EVAL__( 1 + 2 )
#print 4 * Atn(1)
#print __FB_EVAL__( 4 * Atn(1) )

/' Compiler output:
1 + 2
3
4 * Atn(1)
3.141592653589793
'/

'   この例で、この「assign()」マクロでは、3つの「__FB_EVAL__」が絶対に必須です。
'   Even for '__FB_QUOTE__( __FB_EVAL__( expr ) )', because for the case of expr = cos(1/x),
'   'cos(1/x)' must be properly evaluated before be quoted (after the previous 'assign("x", x+1)'),
'   そうでなければ、この場合 'cos(1/x+1)' は、'cos(1/(x+1))' ではなく、 (giving 'cos(2)') として考慮されます。 (giving 'cos (1/2)')
'   なぜなら、'__FB_QUOTE__' では演算子の優先順位が適用されないからです。

#macro assign( sym, expr )
    __FB_UNQUOTE__( __FB_EVAL__( "#undef " + sym ) )
    __FB_UNQUOTE__( __FB_EVAL__( "#define " + sym + " " + __FB_QUOTE__( __FB_EVAL__( expr ) ) ) )
#endmacro

#define x

assign( "x", 1 )
Print x

assign( "x", x+1 )
Print x

assign( "x", Cos(1/x) )
Print x

assign( "x", "hello" )
Print x

assign( "x", x+x )
Print x

/' Output:
 1
 2
 0.877582...
hello
hellohello
'/

__FB_ARG_EXTRACT__ の例も参照下さい。

バージョン:
QBからの違い:
参照:
組み込み定義 に戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2021-10-11 09:33:39
日本語翻訳:WATANABE Makoto、原文著作者:fxm

ホームページのトップに戻る

表示-非営利-継承