Cada especificación de conversión presenta al principio un carácter %, tras el que se incluye la siguiente información en el siguiente orden:
Cero o más indicadores (en cualquier orden), que modifiquen el significado de la especificación de conversión, como se describe en la siguiente sección.
Un ancho de campo mínimo opcional. Si el valor convertido tiene menos bytes que el ancho de campo, se incluirán de forma predeterminada espacios adiciones a la izquierda del valor, o a la derecha si se especifica el indicador de ajuste izquierdo (-). El ancho de campo también puede especificarse con un asterisco (*), en cuyo caso el ancho de campo se establecerá dinámicamente en función del valor de un argumento adicional del tipo int.
Una precisión opcional que indica el número mínimo de dígitos que pueden aparecer para las conversiones d, i, o, u, x y X (se incluyen en el campo ceros iniciales adicionales); el número de dígitos que pueden aparecer tras el carácter de base para las conversiones e, E y f, el número máximo de dígitos pertinentes para las conversiones g y G; o el número máximo de bytes que se imprimirán desde una cadena mediante la conversión s. La precisión presenta el siguiente formato: un punto (.) seguido de un asterisco ( *), que se describe a continuación, o de una cadena de dígitos decimales.
Una secuencia opcional de prefijos de tamaño que indican el tamaño del argumento correspondiente, como se describe en Prefijos de tamaño. Los prefijos de tamaño no son necesarios en el lenguaje D y se proporcionan para obtener compatibilidad con la función printf() de C.
Un especificador de conversión que indica el tipo de conversión que se aplicará al argumento.
La función printf(3C) también admite las especificaciones de conversión con el formato % n$, donde n es un entero decimal; la función printf() de DTrace no admite este tipo de especificación de conversión.