Размер знака в апострофах на языках 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, отправишься в модераторы
А ведь можно писать ещё так:
Стандартом тоже позволяется, значение зависит от компилятора. В яблочном коде иногда такие константы используются.
Оу. А можете просветить? Здесь, либо ссылками на годные статьи.