Compartilhar via


Parâmetros posicionais printf_p

Os parâmetros posicionais fornecem a capacidade de especificar o número de argumentos deve ser substituído em um campo em uma cadeia de caracteres de formato. As seguintes funções de printf de parâmetro posicional estão disponíveis:

Especificando parâmetros posicionais

Indexação de parâmetro

Por padrão as funções posicionais se comportam não idêntica à posição, se nenhuma formatação posicional estiver presente. Os parâmetros posicionais forem especificados usando o formato “%m$x”, onde m denota um número ordinal numérico que indica a posição do parâmetro na lista de parâmetros, precedendo a cadeia de caracteres de formato e x indica o tipo de caractere do campo do tipo especificado na função de printf . Os parâmetros da lista são iniciar indexado no valor 1 para o primeiro elemento na lista e assim por diante. Para obter informações adicionais quanto aos caracteres de campo de tipo, consulte Caracteres de campo de tipo printf.

Para obter um exemplo desse comportamento:

_printf_p("%1$s %2$s", "November", "10");

imprimirá

November 10

A ordem dos números usados não precisa corresponder à ordem dos argumentos determinados. Portanto o seguinte é válida:

_printf_p("%2$s %1$s", "November", "10");

imprimirá

10 November

O parâmetro pode ser usada mais de uma vez, diferentemente ao formatar nas cadeias de formato tradicionais, de modo que

_printf_p("%{1$d times %1$d is %2$d", 10, 100);

imprimirá

10 times 10 is 100

No entanto, os argumentos devem ser usados pelo menos uma vez em algum lugar da cadeia de caracteres de formato.

O número máximo de parâmetros posicionais permitidos em uma cadeia de formato é determinado por _ARGMAX.

Largura e previsão

Quando o símbolo * é usado para especificar que a largura ou precisão devem ser determinada de um argumento, a posição da largura ou do valor de previsão deve aparecer imediatamente depois do símbolo *. Por exemplo,

_printf_p("%1$*2$s","Hello", 10);

ou

_printf_p("%2$*1$s",10, "Hello");

Argumentos posicionais e não posicionais da combinação

Os parâmetros posicionais não podem ser combinados com os parâmetros posicionais não na mesma cadeia de formato. No entanto, printf_s e as funções relacionadas ainda não oferecem suporte a parâmetros posicionais nas cadeias de formato que não contêm nenhum parâmetro posicional.

Exemplo

// positional_args.c
// Positional arguments allow the specification of the order
// in which arguments are consumed in a formatting string.

#include <stdio.h>

int main(int argc, char *argv[])
{
    int     i = 1,
            j = 2,
            k = 3;
    double  x = 0.1,
            y = 0.2,
            z = 0.3;
    char    *s1 = "abc",
            *s2 = "def",
            *s3 = "ghi";

    // If positional arguments are unspecified,
    // normal input order is used.
    _printf_p("%d %d %d\n", i, j, k);

    // Positional args are numbers indicating the
    // argument enclosed in curly braces.
    _printf_p("%3$d %1$d %2$d\n", i, j, k);

    // The same positional argument may be reused.
    _printf_p("%1$d %2$d %1$d\n", i, j);

    _printf_p("%1$s %2$s %3$s\n", s1, s2, s3);

    _printf_p("%3$s %1$s %2$s\n", s1, s2, s3);
}
  

Consulte também

Referência

Caracteres de campo de tipo printf

Especificação de largura printf

Especificação da precisão