Guia de rastreamento dinâmico Solaris

Especificadores de largura e de precisão

A largura de campo mínima pode ser especificada como uma seqüência de dígitos decimais seguindo qualquer especificador de sinalizador, nesse caso, a largura do campo é definida como o número de colunas especificadas. A largura do campo também pode ser especificada como um asterisco (*), nesse caso, um argumento adicional do tipo int é acessado para determinar a largura do campo. Por exemplo, para imprimir um inteiro x em uma largura de campo determinada pelo valor da variável int w, você escreveria a declaração de D:

printf("%*d", w, x);

A largura do campo também pode ser especificada com um caractere ? para indicar que a largura do campo deve ser definida com base no número de caracteres necessários para formatar um endereço em hexadecimal no modelo de dados do kernel do sistema operacional. A largura será definida como 8, se o kernel estiver usando o modelo de dados de 32 bits, ou como 16 se o kernel estiver usando o modelo de dados de 64 bits.

A precisão da conversão pode ser especificada como uma seqüência de dígitos decimais seguindo um ponto (.) ou por um asterisco ( *) seguindo um ponto. Se um asterisco for usado para especificar a precisão, um argumento adicional do tipo int anterior ao argumento de conversão será acessado para determinar a precisão. Se a largura e a precisão forem especificadas como asteriscos, a ordem de argumentos para printf() da conversão deve aparecer na seguinte ordem: largura, precisão, valor.