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
(ygcc
antes de eso) lo trata como equivalente all
, que no siempre es equivalente: openbsd-alpha está configurado de modo que ellong
sea de 64 bits, y porquad_t
tanto,quad_t
es typedef''ed along
. 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
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.