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

FB_QUERY_SYMBOL

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

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

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

コンパイラによって実行される組み込み定義 (マクロ) と、それに関連付けられたサブマクロ。

構文:
__FB_QUERY_SYMBOL__( what, sym )

用法:
./inc/fbc-int/symbol.bi ヘッダーは、組み込みマクロ __FB_QUERY_SYMBOL__ を通じて fbc コンパイラの内部を公開します。
さらに、名前の接頭辞として 'is' を持つ多くの便利なサブマクロ (ファイル ./inc/fbc-int/symbol.bi にも定義されています) は、ユーザーが一般的な組み込みマクロ __FB_QUERY_SYMBOL__ を間接的に呼び出すのに役立ちます:

#include once "fbc-int/symbol.bi"
using FBC

' then:
Dim b As Boolean
...
b = isXXXXX( sym )

パラメータ:
sym
symbol name to query
b
boolean to store the return value from the macro
XXXXX
body of the sub-macro name standing the kind of query

記述:
__FB_QUERY_SYMBOL__ は、fbc シンボルの内部を照会するための汎用組み込みマクロです。

ファイル ./inc/fbc-int/symbol.bi では、'is' を名前のプレフィックスとして持つ ('isXXXXX') 、便利で特殊なサブマクロも多数定義されています ('XXXXX' はクエリの種類を表します)。
これらは、ユーザーが最初のパラメーターとその戻り値のエンコーディングを知らずに、汎用組み込みマクロ __FB_QUERY_SYMBOL__ を間接的に呼び出すのに役立ちます。しかし、sym パラメーターを、-1 (True の場合) または 0 (False の場合)のみを返すサブマクロに渡すだけです。

クエリ タイプのうち 3 種類については、便利で特殊なサブマクロを使用できます:
- 「シンボルのクラス」 (変数、定数、手続き、名前空間など)、
- 「データのクラス」(整数、浮動小数点数、文字列、UDT など)、
- 「データの型」(boolean、byte、ubyte、short など)。
シンボルが、考慮されているファミリーの要素と一致するかどうかをテストするために。

例:
./inc/fbc-int/symbol.bi ファイルから便利なサブマクロを使う (__FB_QUERY_SYMBOL__ を間接的に呼び出す)
#include once "fbc-int/symbol.bi"
Using FBC

Type T
    i As Integer
End Type
Dim x As T

Print isUDT( T )       '' returns -1 (true)
Print isVariable( T )  '' returns 0 (false)
Print isUDT( x )       '' returns 0 (false)
Print isVariable( x )  '' returns -1 (true)

Sleep

直接 __FB_QUERY_SYMBOL__./inc/fbc-int/symbol.bi ファイルからのいくつかの宣言を使って、シンボルのデータ クラスを出力します:
#include once "fbc-int/symbol.bi"
Using FBC

Function dataclassToStr( ByVal classid As fbc.FB_DATACLASS ) As String
    Static As ZString Ptr classnames _
        ( FB_DATACLASS.FB_DATACLASS_INTEGER To FB_DATACLASS.FB_DATACLASS_UDT ) _
        = { @"integer", @"float", @"string", @"udt" }
       
    Select Case classid
    Case LBound(classnames) To UBound(classnames)
        Return *classnames(classid)
    Case Else
        Return "*invalid*"
    End Select
End Function

#macro show_dataclass( sym )
    Scope
        Var classid = __FB_QUERY_SYMBOL__( FB_QUERY_SYMBOL.dataclass, sym )
        Print Left( "   [" & classid & "] " & dataclassToStr(classid) + Space(16), 16 ) & ": ";
        Print #sym  
    End Scope
#endmacro

Dim As Byte b
Dim As Double d
Dim As String s

Type T
    Dim As Long l
End Type
Dim As T t1

Print "EXAMPLES OF '__FB_QUERY_SYMBOL__( FB_QUERY_SYMBOL.dataclass, sym )':"

show_dataclass( b )
show_dataclass( d )
show_dataclass( s )
show_dataclass( T )
show_dataclass( T.l )
show_dataclass( t1 )
show_dataclass( t1.l )

Sleep

__FB_QUERY_SYMBOL__./inc/fbc-int/symbol.bi ファイルからのいくつかの宣言を直接使用して、型名をテキストとして出力します。型名を特殊文字を '_' に置き換えたテキストとして出力し、シンボルの型名 (WIP )を装飾して (マングルして)出力します:
#include once "fbc-int/symbol.bi"
Using FBC

Namespace NS
    Type T
        Dim As Const String Const Ptr Ptr pps
    End Type
End Namespace

#print TypeOf(NS.T.pps)

Print "type name    : " & __FB_QUOTE__( __FB_QUERY_SYMBOL__( FB_QUERY_SYMBOL.typename, NS.T.pps ) )
Print "type name id : " & __FB_QUOTE__( __FB_QUERY_SYMBOL__( FB_QUERY_SYMBOL.typenameid, NS.T.pps ) )
Print "mangled id   : " & __FB_QUOTE__( __FB_QUERY_SYMBOL__( FB_QUERY_SYMBOL.mangleid, NS.T.pps ) )

Sleep

バージョン:
QBからの違い:
組み込み定義 に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2023-01-09 11:06:55
日本語翻訳:WATANABE Makoto、原文著作者:fxm

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

表示-非営利-継承