Какова цель спецификатора формата "%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 настроен так, чтоlongis 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 бит.