Почему символьные литералы типа C вместо символов? - PullRequest
101 голосов
/ 12 января 2009

В С ++, sizeof('a') == sizeof(char) == 1. Это имеет интуитивный смысл, поскольку 'a' является буквенным символом, а sizeof(char) == 1 определено стандартом.

В С, однако, sizeof('a') == sizeof(int). То есть, похоже, что символьные литералы C на самом деле являются целыми числами. Кто-нибудь знает почему? Я могу найти множество упоминаний об этой причуде Си, но не могу объяснить, почему она существует.

Ответы [ 12 ]

0 голосов
/ 12 января 2009

Я действительно не знал этого. До появления прототипов все, что меньше, чем int, преобразовывалось в int при использовании его в качестве аргумента функции. Это может быть частью объяснения.

0 голосов
/ 12 января 2009

Я не знаю, но я собираюсь догадаться, что реализовать это было проще, и это не имело значения. Только в C ++, когда тип мог определить, какая функция будет вызвана, ее нужно исправить.

...