LINUX.ORG.RU
Ответ на: комментарий от KRoN73

1<=sozeof(char)


Ну, это само собой, sizeof(type) не бывает нулевым :)


А разве бывает sizeof(char) > 1? Или в C++ и C это различается?

Ибо в TC++PL Страуструп писал, что sizeof(char) == 1 на любой платформе, но это самое «1» не обязательно восемь бит, а задано каким-то дефайном.

evilface ★★
()
Ответ на: комментарий от evilface

А разве бывает sizeof(char) > 1?

Теоритически — да. Например, когда sizeof возвращает размер не в char'ах, а в байтах, но char больше байта (но навскидку такую платформу не назову, хотя почти уверен, что слышал когда-то).

Или в C++ и C это различается?

Вот тут не могу сказать. Я Си++ осваивал, когда концептуально он от Си, в базовых принципах, не отличался. В моё время даже NULL в Си++, как и в Си, далеко не всегда был равен 0 :) Кажется, это в стандарт ввели уже в самом конце 1990-х, а я тогда ушёл на Perl.

KRoN73 ★★★★★
()
Ответ на: комментарий от evilface

А разве бывает sizeof(char) > 1?

Нет, он по определению = 1. А вот что именно являет собой 1, это уже зависит от реализации.

Pavval ★★★★★
()
Ответ на: комментарий от Pavval

Ну и я о том же.

Нашёл о чём говорил:


Sizes of C++ objects are expressed in terms of multiples of the size of a char, so by definition the size of a char is 1. The size of an object or type can be obtained using the sizeof operator (§10.3). This is what is guaranteed about sizes of fundamental types:
•1 ≡ sizeof(char) ≤ sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long)
•1 ≤ sizeof(bool) ≤ sizeof(long)
• sizeof(char) ≤ sizeof(wchar_t) ≤ sizeof(long)
• sizeof(float) ≤ sizeof(double) ≤ sizeof(long double)
• sizeof(N) ≡ sizeof(signed N) ≡ sizeof(unsigned N)


И вот ещё

40.2.1 Limit Macros
...
CHAR_BIT Number of bits in a char (usually 8)

evilface ★★
()
Ответ на: комментарий от KRoN73

When applied to an operand that has type char , unsigned char , or signed char , (or a qualified version thereof) the result is 1.

Это из ANSI C. Стандартов старше 1990 года я уже не держу под рукой :).

rymis ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.