Размер знака в апострофах на языках C и языках C++

Размер знака в апострофах на языках C и языках C++

не могу понять, зависит от компилятора почему-то(gcc или g++), есть какое-то определение?

Для С++: 1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

Может от языка всё-таки зависит?

Для С++: 1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

спасибо, конечно, но к чему это все?

Здесь нужен разбирающийся в сишке человек. cast not_rj45

код одинаков для C89, C99, C++98, C++03, C++11, но выдает разные результаты, похоже вы правы, все зависит от языка

Здесь нужен разбирающийся в сишке человек. cast not_rj45

единственный профи по С на ЛОРе - это RazrFalcon , cast его

Тогда ещё плюсист нужен. cast eao197

Тогда ещё плюсист нужен. cast eao197

он же не разбирается, разве нет?

ISO C 6.4.4.4 Character constants/10: An integer character constant has type int.

ISO C++ [lex.ccon]/2: A character literal that does not begin with u8, u, U, or L is an ordinary character literal. An ordinary character literal that contains a single c-char representable in the execution character set has type char

В стандартах C и C++ character constant имеет разный тип. В C это int, в C++ это char так было и так будет всегда.

В стандартах C и C++ character constant имеет разный тип. В C это int, в C++ это char так было и так будет всегда.

это во всех C++ так?

Классика жанра же!

а если sizeof(char) == sizeof(int)?

IIRC, размер int может вариировать (в зависимости от платформы) от short (2) и до . long long (а тут ограничений нет). Размер char всегда 1.

IIRC, размер int может вариировать (в зависимости от платформы) от short (2) и до . long long (а тут ограничений нет). Размер char всегда 1.

нет, sizeof(int) может быть единицей

Такое в один байт не влезет.

а с чего вдруг вы взяли что один байт обязательно 8 бит? char может быть и 32-битным

Бывают специализированные платформы, на которых минимальная адресуемая ячейка памяти — это 32-х битовое значение. На таких платформах sizeof(char)==sizeof(short)==sizeof(int)==1. Сам с таким не сталкивался, но знакомый когда-то давно писал под такие платформы кастомный C++ный компилятор.

Может, но эти динозавры вымерли ещё в 70-х.

Может, но эти динозавры вымерли ещё в 70-х.

вы очень сильно заблуждаетесь: живут и пользуются спросом

«Сами топите урановые ломы в ртути!» ©

В смысле, сами пишите костыли под ваши нестандартные платформы.

«Сами топите урановые ломы в ртути!» © В смысле, сами пишите костыли под ваши нестандартные платформы.

так тебя никто и не просит писать

1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

полностью согласен. Т.ч. поправлюсь: утверждение верно для подовляюещего большинства современных архитектур. Но, могут быть и исключения.

Тот же atmel. Сам он 8-и битный, но минимально адрессуемая ячейка 16 бит (слово).

In C, the type of a character constant like 'a' is actually an int, with size of 4 (or some other implementation-dependent value). In C++, the type is char, with size of 1. This is one of many small differences between the two languages.

Будешь продолжать клоунаду - отправишься в бан.

В тех, что удовлетворяют стандарту. Если бы это было не так, то std::cout << 'a' выдавал бы 97.

Ясен пень, gcc будет трактовать пробел в апострофах как char, а вот какого черта выпендривается g++? Видимо, хочется ему все интами — коли это не string.

Бери STM8 — он честно восьмибитный. А еще не такое говно мамонта, как атмел.

Что клоунского в вопросах про действие стандартов ISO в России?

вы очень сильно заблуждаетесь: живут и пользуются спросом

Оу. А можете просветить? Здесь, либо ссылками на годные статьи.

от 0 до 255. char, но есть ещё wchar_t символы где int или long int

Это два разных языка

не могу понять, зависит от компилятора почему-то(gcc или g++), есть какое-то определение?

Вот истинное лицо специалиста по всем языкам программирования.

Причем это чудо трындело, что аж 12 ЯПов знает (правда, в реальности там получалось то ли 5, то ли 6, а фактически видно, что оно нихрена не знает вообще).

Причем это чудо трындело, что аж 12 ЯПов знает (правда, в реальности там получалось то ли 5, то ли 6, а фактически видно, что оно нихрена не знает вообще).

Угу, о том и речь.

Даже в этом топике уже писали что char - не обязательно 8 бит, к тому же char - знаковый тип, а у вас узкоспециализированный восьмибитный unsigned char. Учите матчасть, не позорьтесь.

Будешь продолжать клоунаду - отправишься в бан.

будешь как tailgunner отправишься в дурдом

Аноним. Ты не прав. Знаковый тип это signed char.

Char Может быть реализован и как signed char и как unsigned char. Читай стандарт(http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf):

If the value of an object of type char is treated as a signed integer when used in an expression, the value of CHAR_MIN shall be the same as that of SCHAR_MIN and the value of CHAR_MAX shall be the same as that of SCHAR_MAX. Otherwise, the value of CHAR_MIN shall be 0 and the value of CHAR_MAX shall be the same as that of UCHAR_MAX

будешь как tailgunner, отправишься в модераторы

А ведь можно писать ещё так:

Стандартом тоже позволяется, значение зависит от компилятора. В яблочном коде иногда такие константы используются.

Оу. А можете просветить? Здесь, либо ссылками на годные статьи.

📎📎📎📎📎📎📎📎📎📎