Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

188
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda