Спецификация индекса в спецификаторе формата printf

В следующей программе функция printf() печатает в соответствии со спецификацией индекса аргумента.

#include <stdio.h>

int main()
{
        printf("%3$d  %4$f  %2$d  %1$d\n", 1,  2,  3,  4.5);
}

Вывод:

3  4.500000  2  1

Итак, у меня есть вопрос: Действительно ли это для любого компилятора или поддерживает только компилятор GCC?


person Jayesh    schedule 14.06.2017    source источник
comment
stackoverflow .com/questions/6322540/   -  person BLUEPIXY    schedule 14.06.2017
comment
Компилятор gcc не предоставляет стандартной библиотеки помимо заголовков для автономной среды. Итак, какую реализацию стандартной библиотеки вы используете?   -  person too honest for this site    schedule 14.06.2017
comment
Действительно ли это для любого компилятора? Да, как показала ваша собственная компиляция - это действительно по крайней мере для одного компилятора. поддерживает только компилятор GCC? это широкий вопрос. Чтобы ответить «да», нужно изучить множество компиляторов, чтобы найти еще один, который его поддерживает. Чтобы ответить «нет», может потребоваться опрос всех компиляторов.   -  person chux - Reinstate Monica    schedule 14.06.2017
comment
чтобы увидеть, является ли это расширением GCC, включите опцию -pedantic при компиляции   -  person user3629249    schedule 14.06.2017


Ответы (1)


Как вы подозреваете, спецификации преобразования числовых аргументов (то есть n$) не требуются Стандарт C. Но они не уникальны для реализации Gnu; они требуются стандартом POSIX (спецификация здесь) и существуют как минимум с версии 2 1997 года.

Большинство Unix и Unix-подобных реализаций имеют некоторую меру соответствия Posix, а спецификации нумерованных аргументов появились не так давно. Таким образом, вы, вероятно, найдете поддержку в большинстве современных Unix и Unix-подобных платформах, включая те, которые используют стандартную библиотеку C Gnu (Linux) или стандартную библиотеку C FreeBSD (Mac OS X). Однако (собственная) стандартная библиотека Windows C не совместима с Posix и не содержит поддержки спецификаций нумерованных аргументов (по крайней мере, на сегодняшний день: см. здесь.)

person rici    schedule 14.06.2017