Почему `"% c "` существует в `printf`, если` char` преобразуется в `int`? - PullRequest
5 голосов
/ 21 января 2012

В C у вас есть флаги форматов "%c" и "%f" для printf - и scanf -подобных функций. Обе эти функции используют аргументы переменной длины ..., которые всегда преобразуют floats в doubles и chars в ints.

У меня вопрос: если происходит такое преобразование, почему существуют отдельные флаги для char и float? Почему бы просто не использовать те же флаги, что и для int и double?

Похожие вопросы:
Почему scanf () требует "% lf" для двойников, когда printf () в порядке с "% f"?

Ответы [ 2 ]

10 голосов
/ 21 января 2012

Потому что способ распечатки отличается.

printf("%d \n",100); //prints 100
printf("%c \n",100); //prints d - the ascii character represented by 100
0 голосов
/ 21 января 2012

Поскольку float и double имеют разные машинные представления или размеры и соглашения о вызовах: у многих процессоров есть регистры, выделенные для плавающей запятой, которые могут использоваться для передачи аргументов.

И стандарт C требует, чтобы short аргументы были преобразованы в int, а float аргументы были преобразованы в double.

...