Especificação de arquivo
Em uma especificação de formato, o quarto campo é um modificador de comprimento do argumento para o especificador de conversão. Os prefixos de campo size para o campo type — h, l, w, I, I32, I64 e ll — especificam o "tamanho" do argumento correspondente - longo ou curto, caractere de único byte, de 32 bits ou 64 bits ou caractere largo, dependendo do especificador de conversão que eles modificam. Esses prefixos de tamanho são usados com caracteres type nas famílias printf e wprintf das funções para especificar a interpretação dos comprimentos de argumento, conforme mostrado na tabela a seguir. O campo size é opcional para alguns tipos de argumento. Quando nenhum prefixo de tamanho é especificado, o formatador consome argumentos inteiros — por exemplo, assinados ou não assinados char, short, int, long, e tipos de enumeração — como 32 bits int tipos e argumentos de ponto flutuante são consumidos de 64 bits double tipos. Isso corresponde às regras de promoção de argumento padrão para listas de argumentos variáveis. Para obter mais informações sobre a promoção do argumento, consulte Reticências e argumentos padrão. Em sistemas de 32 bits e 64 bits, a especificação de formato de um argumento de inteiro de 64 bits deve incluir um prefixo de tamanho de ll ou I64. Caso contrário, o comportamento do formatador é indefinido.
Alguns tipos são tamanhos diferentes no código de 32 bits e 64 bits. Por exemplo, size_t é de 32 bits em código compilado para x86 e 64 bits no código compilado para x64. Para criar o código de formatação independente de plataforma para tipos de largura variável, você pode usar um modificador de comprimento do argumento de largura variável. Como alternativa, use um modificador de comprimento do argumento de 64 bits e promover explicitamente o tipo de argumento de largura variável 64 bits. Específicos do Microsoft I argumento modificador de comprimento lida com argumentos inteiros de largura variável.
Dica
Os prefixos do modificador de comprimento I, I32 e I64 são extensões da Microsoft e não são compatíveis com ANSI.O prefixo h quando usado com dados do tipo char, o prefixo w quando usado com dados do tipo wchar_t e o prefixo l quando usado com dados do tipo double são extensões da Microsoft.Não há suporte para prefixos de comprimento hh, j, z e t.
Prefixos de tamanho para especificadores de tipo de formato printf e wprintf
Para especificar |
Usar prefixo |
Com o especificador de tipo |
---|---|---|
long int |
l (minúsculas L) |
d, i, o, x ou X |
long unsigned int |
l |
o, u, x ou X |
long long |
ll |
d, i, o, x ou X |
short int |
h |
d, i, o, x ou X |
short unsigned int |
h |
o, u, x ou X |
__int32 |
I32 |
d, i, o, x ou X |
unsigned __int32 |
I32 |
o, u, x ou X |
__int64 |
I64 |
d, i, o, x ou X |
unsigned __int64 |
I64 |
o, u, x ou X |
ptrdiff_t (ou seja, __int32 em plataformas de 32 bits, __int64 em plataformas de 64 bits) |
I |
d, i, o, x ou X |
size_t (ou seja, unsigned __int32 em plataformas de 32 bits, unsigned __int64 em plataformas de 64 bits) |
I |
o, u, x ou X |
long double (no Visual C++, embora long double seja um tipo diferente, ele tem a mesma representação interna que double.) |
l ou L |
a, A, e, E, f, g ou G |
Caractere de byte único com as funções printf e wprintf. (Um especificador de tipo hc ou hC é sinônimo de c em funções de printf e com C em funções de wprintf.) |
h |
c ou C |
Caractere largo com as funções printf e wprintf. (Um especificador de tipo lc, lC, wc ou wC é sinônimo de C em funções de printf e com c em funções de wprintf.) |
l ou w |
c ou C |
Cadeia de caracteres de byte único com as funções printf e wprintf. (Um especificador de tipo hs ou hS é sinônimo de s em funções de printf e com S em funções de wprintf.) |
h |
s, S ou Z |
Cadeia de caracteres largos com as funções printf e wprintf. (Um especificador de tipo ls, lS, ws ou wS é sinônimo de S em funções de printf e com s em funções de wprintf.) |
l ou w |
s, S ou Z |
Consulte também
Referência
printf, _printf_l, wprintf, _wprintf_l
Sintaxe de especificação de formato: funções printf e and wprintf