Какова цель спецификатора формата "%qd " в`printf ()'?
Я видел спецификатор формата %qd
для просмотра github код. Затем я проверил компилятор GCC, он работает нормально.
#include <stdio.h>
int main()
{
long long lli=1;
printf("%qdn", lli);
return 0;
}
какова цель спецификатора формата %qd
на printf()
?
3 ответов
хотя только несколько статей приходят о %qd
в обычном поиске google, для дальнейшего использования, этот ответ является компиляцией моих собственных исследований,rspответ и небольшие обсуждения здесь, в разделе комментариев по Джонатан Леффлер и рассказчик.
%qd
был предназначен для удобной обработки 64 бит на всех машины, и изначально был bsd-ism (quad_t
).однако,
egcs
(иgcc
до этого) рассматривает его как эквивалентll
, которым не всегда эквивалентно: openbsd-alpha настроен так, чтоlong
is 64 бит, и, следовательно,quad_t
- это определение типа, объед вlong
. В этом конкретном случае атрибут printf-like не работает как предназначенный.если
sizeof(long long) == sizeof(long)
на openbsd-alpha, он должен работать во всяком случае-то есть%ld
,%lld
и%qd
должны быть взаимозаменяемыми.
несколько платформы длина опции появились до широкого использования расширений ISO C99,q
был одним из них. Он использовался для целочисленных типов, что вызывает printf
ожидать 64-разрядный (quad word) целочисленный аргумент. Он обычно встречается на платформах BSD.
однако оба C99 и C11 ничего не говорят о модификаторе длины q
. Страница руководства macOS (BSD) для fprintf()
Маркс q
как deprecated. Итак, используя ll
рекомендуется вместо q
.
ссылки:
https://gcc.gnu.org/ml/gcc-bugs/1999-02n/msg00166.html
q
означает quad word спецификатор формата в функции printf, которая используется для обработки 64 бит комфортно на всех машинах.
С Википедия:
кроме того, до широкого использования расширений ISO C99 существовало несколько вариантов длины платформы:
...
q
- для целочисленных типов printf ожидает 64-разрядный (quad word) целое число аргумент. Обычно встречается в платформах BSD
одним из наиболее интересных с языка вопрос. Символический литерал “%qd”
представляют как quad word, который указан как используемый для эффективной обработки 64 бит с printf
функции на языке программирования Си. Также просто помните, что с 1999 года издание стандарта C гласит, что sizeof(long long) >= sizeof(long)
, и можно сделать вывод, что диапазон long long
имеет размер не менее 64 бит.