ti-enxame.com

Mmh, quem é você PRIu64?

Eu sou novo em C e sou confrontado com:

#include <stdio.h>
#include <inttypes.h>

int main(void)
{
    uint64_t foo = 10;
    printf("foo is equal to %" PRIu64 "!\n", foo);

    return 0;
}

E funciona! Eu não entendo porque Alguém pode me ajudar sobre isso? Muito obrigado! torr

53
torr

PRIu64 é um especificador de formato, introduzido em C99, para impressão uint64_t, Onde uint64_t é (da página de referência vinculada):

tipo inteiro não assinado com largura de ... 64 bits, respectivamente (fornecido apenas se a implementação suportar diretamente o tipo)

PRIu64 é uma string (literal), por exemplo, o seguinte:

printf("%s\n", PRIu64);

imprime llu na minha máquina. Literais de strings adjacentes são concatenados, da seção 6.4.5 Literais de strings do padrão C99:

Na fase de conversão 6, as seqüências de caracteres multibyte especificadas por qualquer sequência de caracteres adjacentes e tokens literais de cadeia larga são concatenadas em uma única sequência de caracteres multibyte . Se algum dos tokens for literal de cadeia ampla, a sequência de caracteres multibyte resultante será tratada como literal de cadeia ampla; caso contrário, é tratado como uma literal de cadeia de caracteres.

Isso significa:

printf("foo is equal to %" PRIu64 "!\n", foo);

(na minha máquina) é o mesmo que:

printf("foo is equal to %llu!\n", foo);

Consulte http://ideone.com/jFvKR9 .

66
hmjd