FB_QUERY_SYMBOL
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgDdfbquerysymbol
- 最后更新: 2025-07-09
编译器执行的内置定义(宏)及其关联子宏。
语法
` FB_QUERY_SYMBOL( what, sym )
`
用法
./inc/fbc-int/symbol.bi 头文件通过内置宏 __FB_QUERY_SYMBOL__ 公开 fbc 编译器内部信息。
此外,文件 ./inc/fbc-int/symbol.bi 中还定义了许多以 'is' 为名称前缀的便利子宏,帮助用户间接调用通用内置宏 __FB_QUERY_SYMBOL__:
#include once "fbc-int/symbol.bi"
using FBC
' then:
Dim b As Boolean
...
b = isXXXXX( sym )参数
sym
要查询的符号名
b
用于存储宏返回值的布尔变量
XXXXX
代表查询类型的子宏名称主体
描述
__FB_QUERY_SYMBOL__ 是用于查询 fbc 符号内部信息的通用内置宏。
在文件 ./inc/fbc-int/symbol.bi 中,还定义了许多以 'is' 为名称前缀的便利专用子宏('isXXXXX',其中 'XXXXX' 代表查询类型)。
这些子宏帮助用户在不了解第一个参数编码和返回值的情况下,间接调用通用内置宏 __FB_QUERY_SYMBOL__,只需向子宏传递 sym 参数,子宏仅返回 -1(真)或 0(假)。
对于三种查询类型,提供了便利专用子宏:
'符号类别'(如变量、常量、过程、命名空间等),
'数据类别'(如整数、浮点、字符串、UDT 等),
'数据类型'(如 boolean、byte、ubyte、short 等)。
用于测试符号是否与所考虑族中的元素匹配。
示例
使用 ./inc/fbc-int/symbol.bi 文件中的便利子宏(间接调用 __FB_QUERY_SYMBOL__)
start GeSHi
#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)
Sleepend GeSHi
直接使用 __FB_QUERY_SYMBOL__ 和 ./inc/fbc-int/symbol.bi 文件中的部分声明,输出符号的数据类别:
start GeSHi
#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 )
Sleepend GeSHi
直接使用 __FB_QUERY_SYMBOL__ 和 ./inc/fbc-int/symbol.bi 文件中的部分声明,输出符号的类型名文本、特殊字符替换为 '_' 的类型名文本,以及符号的修饰(名称混淆)类型名(开发中):
start GeSHi
#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 type : " & __FB_QUOTE__( __FB_QUERY_SYMBOL__( FB_QUERY_SYMBOL.mangletype, NS.T.pps ) )
Sleepend GeSHi
版本
- 自 fbc 1.20.0 起:
__FB_QUERY_SYMBOL__扩展为返回修饰名 - 自 fbc 1.10.0 起
与 QB 的区别
- FreeBASIC 新增
返回 目录