El lenguaje de programación C utilizado para la definición de interfaces de sistema Solaris incluye un preprocesador que realiza un conjunto de pasos iniciales en la compilación de un programa C. El preprocesador C suele utilizarse para definir sustituciones de macro en las que un símbolo de un programa C se sustituye por otro juego de símbolos predefinido, o para incluir copias de los archivos de cabecera del sistema. Es posible utilizar el preprocesador C junto con sus programas D mediante la especificación de la opción dtrace -C. La opción provoca que dtrace ejecute en primer lugar el preprocesador cpp(1) en su archivo de programa fuente, para posteriormente trasladar los resultados al compilador D.. El preprocesador C se describe de una forma más detallada en El lenguaje de programación C.
El compilador D carga automáticamente el conjunto de descripciones de tipo C asociadas a la implementación del sistema operativo, pero puede utilizar el preprocesador para incluir otras definiciones de tipo, como por ejemplo tipos utilizados en sus propios programas C. También es posible utilizar el preprocesador para realizar otras tareas, como la creación de macros que se amplíen hasta paquetes de código D y otros elementos de programas. Si utiliza el preprocesador con su programa D, podría incluir sólo archivos que contengan declaraciones D válidas. Los archivos de cabecera C habituales incluyen únicamente declaraciones externas de tipos y símbolos, que interpretará correctamente el compilador D. El compilador D no puede analizar archivos de cabecera C que incluyan elementos de programa adicionales, como código fuente de funciones C, y devolverán el mensaje de error pertinente.