LINUX.ORG.RU

Ответ на: комментарий от CrazyAlex25

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

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

ThinkDifferent ()
Ответ на: комментарий от utf8nowhere

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

#include <stdio.h>

int main() {
    printf("%d %d %d\n", sizeof(char), sizeof(' '), sizeof(int));
    return 0;
}

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

ThinkDifferent ()

есть какое-то определение?

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

utf8nowhere ★★ ()

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

rymis ★★ ()

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

#include <stdio.h>

int
main()
{
        switch (sizeof('a')) {
        case sizeof(int):
                printf("I'm C\n");
                break;
        case sizeof(char):
                printf("I'm C++\n");
                break;
        default:
                printf("Don't know who am I\n");
                break;
        }
        return 0;
}
$ gcc sz.c -o c
$ g++ sz.c -o c++
$ ./c
I'm C
$ ./c++ 
I'm C++
beastie ★★★★★ ()
Последнее исправление: beastie (всего исправлений: 2)
Ответ на: комментарий от ThinkDifferent

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

beastie ★★★★★ ()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от beastie

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

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

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

IIUC то таки нет → http://port70.net/~nsz/c/c11/n1570.html#5.2.4.2.1p1

minimum value for an object of type int
 INT_MIN                                -32767 // -(215 - 1)
maximum value for an object of type int
 INT_MAX                                +32767 // 215 - 1
maximum value for an object of type unsigned int
 UINT_MAX                                65535 // 216 - 1

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

beastie ★★★★★ ()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от beastie

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

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

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

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

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

not_rj45 ()
Ответ на: комментарий от eao197

Исходя из

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

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

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

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

rymis ★★ ()

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

anonymous ()
Ответ на: комментарий от beastie

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

anonymous ()
Ответ на: комментарий от tailgunner

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

anonymous ()
Ответ на: комментарий от not_rj45

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

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

Uter ()

Размер знака в апострофах

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

gcc или g++

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

Dron ★★★★★ ()

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

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

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

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

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

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

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

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

от 0 до 255. char

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

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

Аноним. Ты не прав. Знаковый тип это 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

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

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

fxd

Deleted ()

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

sizeof('char') == sizeof(int)

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

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

забавная тема..

if (0xa1!='\xa1') printf("surpise!\n");
if (0xa1!=(int)'\xa1') printf("sheet\n");
if (0xa1!=(unsigned)'\xa1') printf("f@#$k\n");
тоже отчасти из оперы «как интерпретируются литералы»

MKuznetsov ★★★★★ ()
Последнее исправление: MKuznetsov (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.