tipos sintaxis formato especificadores datos codigos c gcc format-specifiers

formato - sintaxis de printf y scanf



¿Cuál es el propósito del especificador de formato "% qd" en `printf()`? (3)

Aunque solo unos pocos artículos aparecen %qd en una búsqueda normal de google, para futuras referencias, esta respuesta es la compilación de mi propia investigación, la respuesta de rsp y las pequeñas discusiones aquí en la sección de comentarios de Jonathan Leffler y StoryTeller .

%qd estaba destinado a manejar 64 bits cómodamente en todas las máquinas, y originalmente era un bsd-ism ( quad_t ).

Sin embargo, egcs (y gcc antes de eso) lo trata como equivalente a ll , que no siempre es equivalente: openbsd-alpha está configurado de modo que el long sea ​​de 64 bits, y por quad_t tanto, quad_t es typedef''ed a long . En ese caso particular, el atributo similar a printf no funciona según lo previsto.

Si sizeof(long long) == sizeof(long) en openbsd-alpha, debería funcionar de todos modos, es decir, %ld , %lld y %qd deben ser intercambiables.

Varias de las opciones de longitud específicas de la plataforma existieron antes del uso generalizado de las extensiones ISO C99, q fue una de ellas. Se usó para tipos enteros, lo que hace que printf espere un argumento entero de 64 bits (palabra cuádruple). Se encuentra comúnmente en las plataformas BSD.

Sin embargo, tanto el C99 como el C11 no dicen nada acerca del modificador de longitud q . La página de manual macOS (BSD) para fprintf() marca q como obsoleta. Por lo tanto, se recomienda usar ll en lugar de q .

Referencias:

https://gcc.gnu.org/ml/gcc-bugs/1999-02n/msg00166.html

https://en.wikipedia.org/wiki/Printf_format_string

https://port70.net/~nsz/c/c11/n1570.html#7.21.6.1p7

Vi el especificador de formato %qd al explorar el código github . Luego me registré en el compilador GCC, está funcionando bien.

#include <stdio.h> int main() { long long lli=1; printf("%qd/n", lli); return 0; }

¿Cuál es el propósito del especificador de formato %qd en printf() ?


Una de las preguntas más interesantes relacionadas con el lenguaje C para responder. El literal simbólico “%qd” representa como una palabra cuádruple, que se especifica como utilizada para manejar 64 bits de manera efectiva con la función printf en el lenguaje de programación C. También recuerde que, a partir de la edición de 1999 del estándar C, sizeof(long long) >= sizeof(long) , y uno puede inferir que el rango de long long tiene un tamaño de al menos 64 bits.


q significa especificador de formato de cuatro palabras en la función printf que se utiliza para manejar 64 bits cómodamente en todas las máquinas.

De https://en.wikipedia.org/wiki/Printf_format_string :

Además, existieron varias opciones de longitud específicas de la plataforma antes del uso generalizado de las extensiones ISO C99:

...

q - Para los tipos de enteros, hace que printf espere un argumento de enteros de 64 bits (palabra cuádruple). Se encuentra comúnmente en las plataformas BSD.