Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

178
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!