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

однако, egcsgcc до этого) рассматривает его как эквивалент 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

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

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


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 бит.