Каково стандартное определение printf в C? - PullRequest
3 голосов
/ 19 июня 2011

Какое определение функции функции printf() определено в стандартной библиотеке C?

Мне нужно определение, чтобы решить следующий вопрос:

Дайте выводиз следующего:

int main()
{
   int a = 2;
   int b = 5;
   int c = 10;
   printf("%d ",a,b,c);
   return 0;
}

Ответы [ 6 ]

9 голосов
/ 19 июня 2011

Стандарт языка C объявляет printf следующим образом:

int printf(const char *format, ...);

Возвращает целое число и принимает первый параметр указателя на постоянный символ и произвольное число последующих параметров произвольного типа.

Если вам случится передать больше параметров, чем требуется для строки формата, которую вы передаете, то дополнительные параметры игнорируются (хотя они все еще оцениваются).Из стандарта C89 § 4.9.6.1:

Если для формата недостаточно аргументов, поведение не определено.Если формат исчерпан, а аргументы остаются, избыточные аргументы оцениваются (как всегда), но в противном случае игнорируются.

4 голосов
/ 19 июня 2011

Вы передаете массив символов (или указатель) в качестве первого аргумента (который включает в себя заполнители формата ) и дополнительные аргументы для замены в строке.

Вывод для вашего примерабудет 2  1 к стандартному выводу.%d является заполнителем для десятичного целого числа со знаком.Дополнительное место будет взято буквально, поскольку оно не является допустимым заполнителем.a передается в качестве первого аргумента-заполнителя и ему присваивается 2.Дополнительные аргументы не будут рассматриваться (см. Ниже).

printf() - это переменная функция , которая знает количество дополнительных аргументов только путем подсчета заполнителей в первом аргументе.

1 Уценка не допускает конечные пробелы в примерах встроенного кода.Мне пришлось использовать альтернативный пробел, но пробел, который вы увидите, будет нормальным (ASCII 0x20).

1 голос
/ 19 июня 2011

man 3 printf дает ...

int printf(const char *restrict format, ...);
0 голосов
/ 19 июня 2011
printf("%d ",a,b,c);

Для каждого %(something) необходимо добавить одну ссылающуюся переменную, поэтому

printf("%d ",a+b+c);       //would work (a+b+c), best case with (int) before that

printf("%d %d %d",a,b,c);  //would print all 3 integers.
0 голосов
/ 19 июня 2011

Его

int printf(const char *format, ...);    
  • format - указатель на строку формата

  • ... - это оператор многоточия, с помощью которого вы можете передать переменное число аргументов, которое зависит от того, сколько заполнителей у нас в строке формата.

  • Возвращаемое значение - количество напечатанных символов

Посмотрите здесь об операторе эллипса: http://bobobobo.wordpress.com/2008/01/28/how-to-use-variable-argument-lists-va_list/

0 голосов
/ 19 июня 2011

Записывает в стандартный вывод (stdout) последовательность данных, отформатированную в качестве аргумента формата.После параметра формата функция ожидает как минимум столько же дополнительных аргументов, сколько указано в формате.

% d = знаковое десятичное целое число

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...