Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

176
Visualizações
¿Qué es la bandera 'I' (i mayúscula) en C printf?

Al compilar el siguiente código:

 #include <stdio.h> int main() { printf("99% Invisible"); return 0; }

en gcc 7.5.0 recibo las siguientes advertencias:

 test.c: In function 'main': test.c:4:16: warning: ' ' flag used with '%n' gnu_printf format [-Wformat=] printf("99% Invisible"); ^ test.c:4:16: warning: 'I' flag used with '%n' gnu_printf format [-Wformat=] test.c:4:16: warning: format '%n' expects a matching 'int *' argument [-Wformat=] printf("99% Invisible"); ~~~^

¿Que esta pasando aqui? No veo mención de una bandera " " o una bandera "I" en ninguna parte de la documentación. El código genera 99visible , esencialmente ignorando el espacio y I en la cadena de formato y siguiendo el formato %n.

editar: la gente parece estar malinterpretando la pregunta. Sé cómo imprimir un % literal y qué hace %n . Sólo tengo curiosidad por lo que está pasando aquí.

(también, para aquellos que conocen el contexto: sé que el sistema en cuestión no usó C, solo tengo curiosidad por saber qué está haciendo printf aquí).

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

La bandera I es una extensión GNU para printf . De la página del manual:

glibc 2.2 añade un carácter indicador más.

I

Para la conversión de enteros decimales ( i , d , u ), la salida utiliza los dígitos de salida alternativos de la configuración regional, si los hay. Por ejemplo, desde glibc 2.2.3, esto dará dígitos árabes-índicos en la configuración regional persa ("fa_IR").

Entonces, cuando el compilador verifica la cadena de formato, ve % In como un especificador de formato, es decir, los indicadores de espacio e I aplicados al especificador de conversión n . Dado que ninguno de los indicadores es aplicable al especificador de conversión n , el compilador emite una advertencia para cada uno.

over 4 years ago · Santiago Trujillo Relatório

0

Para imprimir el literal % , debe escribir %% .

https://en.cppreference.com/w/c/io/fprintf

I flag no está en el estándar C.

over 4 years ago · Santiago Trujillo Relatório

0

Parece que con su compilador cuando se encuentra un carácter % en una cadena de formato printf , escanea hacia adelante para encontrar un especificador de formato válido, luego interpreta todo lo que se encuentra en el medio como un modificador. Si esos modificadores no son válidos, se marca un error.

Como han señalado otros, reemplace "99% Invisible" con "99%% Invisible" para solucionar el problema.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda