Guia de rastreamento dinâmico Solaris

In-lines

As constantes nomeadas de D também podem ser definidas usando-se diretivas in-line, que fornecem um meio mais geral de criar identificadores que são substituídos por expressões ou valores predefinidos durante a compilação. As diretivas embutidas são uma forma de substituição lexical mais eficiente que a diretiva #define fornecida pelo pré-processador de C porque um tipo real é atribuído à substituição e ela é realizada usando-se a árvore de sintaxe compilada e não simplesmente um conjunto de símbolos lexicais. Uma diretiva in-line é especificada usando-se uma declaração da seguinte forma:

inline type name = expression ;

onde tipo é uma declaração de tipo de um tipo existente, nome é qualquer identificador válido de D que não tenha sido definido anteriormente como uma variável in-line ou global e expressão é qualquer expressão válida de D. Quando a diretiva in-line é processada, o compilador de D substitui a forma compilada da expressão de cada instância subseqüente de nome na origem do programa. Por exemplo, o programa em D a seguir faria o rastreio da seqüência "olá" e do valor de inteiro 123:

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

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

Um nome in-line pode ser usado em qualquer lugar que uma variável global do tipo correspondente pode ser usada. Se a expressão in-line puder ter como valor uma constante de seqüências ou de inteiro na compilação, então o nome in-line também poderá ser usado em contextos que requeiram expressões de constante, como dimensões de matriz escalar.

A expressão in-line é validada quanto a erros de sintaxe como parte da avaliação da diretiva. O tipo de resultado da expressão deve ser compatível com o tipo definido pela diretiva in-line, de acordo com as mesmas regras usadas para o operador de atribuição de D (=). Uma expressão in-line não pode fazer referência ao próprio identificador in-line: definições recursivas não são permitidas.

Os pacotes de software do DTrace instalam inúmeros arquivos de origem de D no diretório do sistema /usr/lib/dtrace que contém diretivas in-line que você pode usar em seus programas em D. Por exemplo, a biblioteca signal.d inclui diretivas no formato:

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

Estas definições in-line fornecem acesso ao conjunto atual de nomes de sinal do Solaris descritos em signal(3HEAD). Semelhantemente, a biblioteca errno.d contém diretivas in-line das constantes errno de C descritas em Intro(2).

Por padrão, o compilador de D inclui automaticamente todos os arquivos de biblioteca de D fornecidos para que você possa usar estas definições em qualquer programa em D.