Cada seqüência de caractere de conversão resulta na busca de zero ou mais argumentos. Se forem fornecidos argumentos insuficientes para a seqüência de formato, ou se a seqüência de formato estiver exaurida e os argumentos permanecerem, o compilador de D emitirá uma mensagem de erro apropriada. Se um formato de conversão indefinido for especificado, o compilador de D emite uma mensagem de erro apropriada. As seqüências de caracteres de conversão são:
O ponteiro ou argumento uintptr_t é impresso como um nome de símbolo de kernel no formato módulo`nome do símbolo mais um deslocamento de byte hexadecimal opcional. Se o valor não estiver no intervalo definido por um símbolo de kernel definido, o valor será impresso como um inteiro hexadecimal.
O argumento char, short ou int é impresso como um caractere ASCII.
O argumento char, short ou int será impresso como um caractere ASCII, se o caractere for um caractere ASCII imprimível. Se o caractere não for um caractere imprimível, ele será impresso com a seqüência de escape correspondente, conforme mostrado na Tabela 2–5.
O argumento char, short, int, long ou long long é impresso como um inteiro decimal (base 10). Se o argumento for signed, ele será impresso como um valor assinado. Se o argumento for unsigned, ele será impresso como um valor não assinado. Esta conversão possui o mesmo significado que i.
O argumento float, double ou long double é convertido para o estilo [-] d.ddde± dd, onde existe um dígito antes do caractere fracionário e o número de dígitos depois dele é igual à precisão. O caractere fracionário será diferente de zero, se o argumento for diferente de zero. Se a precisão não for especificada, o valor de precisão padrão será 6. Se a precisão for 0 e o sinalizador # não estiver especificado, nenhum caractere fracionário aparecerá. O formato de conversão E produz um número com E em vez de e introduzindo o expoente. O expoente sempre contém pelo menos dois dígitos. O valor é arredondado pra o número apropriado de dígitos.
O argumento float, double ou long double é convertido para o estilo [-] ddd.ddd, onde número de dígitos após o caractere de precisão é igual à especificação de precisão. Se a precisão não for especificada, o valor de precisão padrão será 6. Se a precisão for 0 e o sinalizador # não estiver especificado, nenhum caractere fracionário aparecerá. Se um caractere fracionário aparecer, pelo menos um dígito aparecerá antes dele. O valor é arredondado pra o número apropriado de dígitos.
O argumento float, double ou long double é impresso no estilo f ou e (ou no estilo E no caso de um caractere de conversão G), com a precisão especificando o número de dígitos significativos. Se uma precisão explícita for 0, ela é considerada como 1. O estilo usado depende do valor convertido: o estilo e (ou E) será usado somente se o expoente resultante da conversão for menor que -4 ou maior ou igual à precisão. Zeros à direita são removidos da parte fracionária do resultado. Um caractere fracionário aparecerá somente se for seguido por um dígito. Se o sinalizador # for especificado, os zeros à direita não serão removidos do resultado.
O argumento char, short, int, long ou long long é impresso como um inteiro decimal (base 10). Se o argumento for signed, ele será impresso como um valor assinado. Se o argumento for unsigned, ele será impresso como um valor não assinado. Esta conversão tem o mesmo sentido de d.
O argumento char, short, int, long ou long long é impresso como um inteiro octal não assinado (base 8). Os argumentos que são signed ou unsigned podem ser usados com esta conversão. Se o sinalizador # for especificado, a precisão do resultado será aumentada, se necessário, para forçar o primeiro dígito do resultado a ser zero.
O ponteiro ou argumento uintptr_t é impresso como um inteiro hexadecimal (base 16). D aceita argumentos de ponteiro de qualquer tipo. Se o sinalizador # for especificado, um resultado diferente de zero terá 0x anteposto a ele.
O argumento deve ser uma matriz de char ou string. Os bytes da matriz ou string são lidos até um caractere nulo de terminação ou o fim dos dados, e interpretados e impressos como caracteres ASCII. Se a precisão não for especificada, ela é considerada como infinita, sendo assim, todos os caracteres até o primeiro caractere nulo serão impressos. Se a precisão for especificada, somente essa parte da matriz de caracteres, que será exibida no número correspondente de colunas da tela, será impressa. Se um argumento do tipo char * for formatado, ele deverá ser convertido para string ou prefixado com o operador stringof de D para indicar que o DTrace deve rastrear os bytes da seqüência e formatá-los.
O argumento deve ser uma matriz de char ou string. O argumento é processado como se fosse pela conversão %s, mas quaisquer caracteres ASCII que não sejam imprimíveis serão substituídos pela seqüência de escape correspondente descrita na Tabela 2–5.
O argumento char, short, int, long ou long long é impresso como um inteiro decimal não assinado (base 10). Os argumentos que são signed ou unsigned podem ser usados com esta conversão, e o resultado é sempre formatado como unsigned.
O argumento int é convertido em um caractere extenso (wchar_t ) e o caractere extenso resultante é impresso.
O argumento deve ser uma matriz de wchar_t. Os bytes da matriz ou são lidos até um caractere nulo de terminação ou o fim dos dados, e interpretados e impressos como caracteres extensos. Se a precisão não for especificada, ela é considerada como infinita, sendo assim, todos os caracteres extensos até o primeiro caractere nulo serão impressos. Se a precisão for especificada, somente essa parte da matriz de caracteres extensos, que será exibida no número correspondente de colunas da tela, será impressa.
O argumento char, short, int, long ou long long é impresso como um inteiro hexadecimal não assinado (base 16). Os argumentos que são signed ou unsigned podem ser usados com esta conversão. Se o formato x da conversão for usado, os dígitos de letra abcdef serão usados. Se o formato X da conversão for usado, os dígitos de letra ABCDEF serão usados. Se o sinalizador # for especificado, um resultado diferente de zero terá 0x (para %x) ou 0X (para %X) anteposto a ele.
O argumento uint64_t será interpretado como o número de nanossegundos desde 00:00 Horário Coordenado Universal, 1 de janeiro de 1970, e será impresso no seguinte formato cftime(3C) form: “%Y %a %b %e %T %Z”. O número de nanossegundos desde 00:00 UTC, 1 de janeiro, 1970, está disponível na variável walltimestamp.
Imprime um caractere literal %. Nenhum argumento é convertido. A especificação de conversão inteira deve ser %%.