Solaris 动态跟踪指南

内置

也可以使用 inline 指令定义 D 命名的常量,该指令提供了一种更常规的方法来创建编译期间将替换为预定义的值或表达式的标识符。与 C 预处理程序提供的 #define 指令相比,内置指令是一种功能更强大的词法替换。内置指令使用以下格式的声明指定:

inline type name = expression ;

其中,type 是现有类型的类型声明,name 是先前未定义为内置或全局变量的任何有效 D 标识符,expression 是任何有效 D 表达式。在处理内置指令之后,D 编译器将使用程序源代码中已编译格式的 expression 替换 name 的每个后续实例。例如,以下 D 程序将跟踪字符串 "hello" 和整数值 123

inline string hello = "hello";
inline int number = 100 + 23;

BEGIN
{
	trace(hello);
	trace(number);
}

在可以使用相应类型的全局变量的任何位置都可以使用内置名称。如果在编译时内置表达式可以计算为整数或字符串常量,则还可以在要求常量表达式(如标量数组维度)的上下文中使用内置名称。

对内置表达式进行语法错误验证是计算指令过程的一部分。根据用于 D 赋值运算符 (=) 的相同规则,表达式结果类型必须与内置指令所定义的类型兼容。内置表达式不可以引用内置标识符本身:不允许使用递归定义。

DTrace 软件包在系统目录 /usr/lib/dtrace 中安装大量的 D 源文件,这些源文件中包含可以在 D 程序中使用的内置指令。例如,signal.d 库包括以下格式的指令:

inline int SIGHUP = 1;
inline int SIGINT = 2;
inline int SIGQUIT = 3;
...

这些内置定义使您可以访问当前的 Solaris 信号名称集,如 signal(3HEAD) 中所述。类似地,errno.d 库包含 C errno 常量的内置指令,如 Intro(2) 中所述。

缺省情况下,D 编辑器自动包括所提供的所有 D 库文件,以便可以在任何 D 程序中使用这些定义。