Ответ 1
Он утверждает, что C имеет только пять типов данных; int, float, double, char и _Bool.
Это довольно упрощение. Может быть, намеренно, если книга нацелена на новичков.
Если вы перейдете через C11 6.2.5, в нем перечислены следующие различные типы данных:
Типы символов (6.2.5/15)
char
signed char
unsigned char
Стандартные стандартные целочисленные типы (6.2.5/4)
signed char
short int
int
long int
long long int
Стандартные беззнаковые целочисленные типы (6.2.5/5)
_Bool
unsigned char
unsigned short int
unsigned int
unsigned long int
unsigned long long int
Реальные плавающие типы (6.2.5/10)
float
double
long double
Сложные типы (6.2.5/11)
float _Complex
double _Complex
long double _Complex
Перечислимый тип (6.2.5/16)
enum {}
void type (6.2.5/19) (тип void является неполным)
void
Производные типы (6.2.5/20)
- Тип массива
- Тип структуры
- Тип соединения
- Тип функции
- Тип указателя
- Атомный тип
Формально термин является спецификатором типа 6.7.2:
type-specifier:
void
char
short
int
long
float
double
signed
unsigned
_Bool
_Complex
atomic-type-specifier
struct-or-union-specifier
enum-specifier
typedef-name
В заявлении должен быть указан хотя бы один спецификатор типа спецификаторов в каждом объявлении и в списке спецификаторов-классификаторов в каждое объявление структуры и имя типа. Каждый список спецификаторов типа должен быть одним из следующих мультимножеств (разделенных запятыми, когда существует более одного мультимножества на элемент); спецификаторы типа могут происходят в любом порядке, возможно, смешанные с другим выражением спецификаторы.
- void
- char
- подписано char
- unsigned char
- короткий, подписанный короткий, короткий int или подписанный короткий int
- unsigned short, или unsigned short int
- int, подписанный или подписанный int
- unsigned, или unsigned int
- длинный, подписанный длинный, длинный int или подписанный long int
- unsigned long, или unsigned long int
- длинный длинный, подписанный длинный длинный, длинный длинный int или подписанный long long int
- unsigned long long, или unsigned long long int
- float
- двойной
- длинный двойной
- _Bool
- float _Complex
- двойной _Complex
- длинный двойной _Complex
- спецификатор атомного типа
- struct или union specifier
- спецификатор перечисления
- typedef name
Как мы видим, long
является спецификатором типа. Это не определение типа.