Символьный литерал 0
- как и любой символьный литерал - имеет тип int
(попробуйте, например, напечатать sizeof('0')
:
int main() {
printf("sizeof '0' is ... %ld\n",sizeof('0'));
}
Вывод:
sizeof '0' is ... 4
Таким образом, выражение типа a + '0'
также даст int
. Возвращая затем int
, где функция определяет тип возвращаемого значения char
, приводит к этому предупреждению.
Так что на самом деле вы бынапишите int intToChar(int a)
, как вы предложили, и другие символьные функции, такие как tolower
, действуют аналогично.
Кстати: обратите внимание, что тип данных char
отличается от типа данных int
, поскольку char
всегда гарантированнопо определению имеет размер 1.
И обратите внимание: если у вас есть char x = 5;
, то выражение типа x + '0'
также даст тип данных int
, поскольку '0'
имеет тип int
.