Manuel de suivi dynamique Solaris

Inlines

Vous pouvez également définir les constantes nommées en D à l'aide de directives inline. Ces dernières fournissent une méthode plus générale de création d'identificateurs qui sont remplacés par des valeurs ou des expressions prédéfinies pendant la compilation. Les directives intégrées constituent une forme plus puissante de remplacement vertical que la directive #define fournie par le préprocesseur C, le type de remplacement étant réel et le remplacement étant exécuté au moyen de l'arborescence de syntaxe compilée au lieu de l'être tout simplement au moyen d'un ensemble de jetons lexicaux. Vous spécifiez une directive intégrée à l'aide d'une déclaration comme suit :

inline type name = expression ;

type correspondant à la déclaration de type d'un type existant, name à un identificateur en D valide non précédemment défini en tant que variable intégrée ou globale et expression à une expression en D valide. Une fois la directive intégrée traitée, le compilateur D substitue la forme compilée de expression de chaque instance ultérieure de name dans la source du programme. Par exemple, le programme en D suivant doit suivre la chaîne "hello" et la valeur entière 123 :

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

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

Vous pouvez utiliser un nom intégré chaque fois que vous pouvez utiliser une variable globale du type correspondant. Si vous pouvez évaluer l'expression intégrée en une constante de chaîne ou entière au moment de la compilation, vous pouvez également utiliser le nom en ligne dans des contextes nécessitant des expressions constantes, comme les dimensions de tableau scalaire.

L'expression intégrée est validée pour les erreurs de syntaxe dans le cadre de l'évaluation de la directive. Le type qui résulte de l'expression doit être compatible avec le type défini dans la variable intégrée, conformément aux règles appliquées à l'opérateur d'affectation en D (=). Une expression intégrée peut ne pas référencer l'identificateur intégré lui-même : les définitions récursives ne sont pas autorisées.

Les packages logiciels de DTrace installent plusieurs fichiers sources en D dans le répertoire système /usr/lib/dtrace qui contient les directives intégrées que vous pouvez utiliser dans vos programmes. Par exemple, la bibliothèque signal.d comprend des directives qui se présentent comme suit :

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

Ces définitions intégrées permettent d'accéder à l'ensemble actuel des noms de signaux Solaris décrits dans signal(3HEAD). La bibliothèque errno.d contient, de façon similaire, des directives intégrées pour les constantes errno en C décrites dans Intro(2).

Par défaut, le compilateur D intègre automatiquement tous les fichiers de bibliothèque en D fournis de sorte que vous pouvez utiliser ces définitions dans n'importe quel programme en D.