LINUX.ORG.RU

[C] Бесполезные типы данных?

 


0

1

Поясните, зачем нужны типы short и long?

Тип int я использую, если мне просто нужна целая переменная, неважно, какой ширины. int - самый эффективный на любой платформе, это удобно. А что известно про long int? Только гарантированная ширина 32 бита. Но если мне нужно 32 бита, я возьму int32_t, это логично, и я не получу сюрпризов на 64-битной машине То же самое относится и к short int, и к long double.

В общем, не вижу смысла в типах, для которых не описано однозначно множество допустимых значений (int - исключение, как уже сказал).

Есть ситуации, когда они всё-таки полезны?

★★★★

>А что известно про long int? Только гарантированная ширина 32 бита.

4.2. Учи матчасть.

int - самый эффективный на любой платформе

4.2

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

Вижал студия не знает про твой int32_t, например.

у нее есть свой вел __int32,

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

А что известно про long int? Только гарантированная ширина 32 бита.

4.2. Учи матчасть.

long int -2147483647 to +2147483647

Что не так?

int - самый эффективный на любой платформе

4.2

An int was originally intended to be the «natural» word size of the processor.

int - целый тип по умолчанию, поэтому под него естественно выбрать самый эффективный тип. Хотя, возможно, на 64-битных это уже не так из-за нехватки типов?

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

Вижал студия вообще отстала от C. Хотя проблема здесь именно в C.

unsigned ★★★★
() автор топика

Так вопрос-то в чём? Юзай, в чём видишь смысл, не юзай в чём не видишь. Другие смысл увидят и заюзают.

kiverattes ★☆
()

ну например затем, чтобы экономить память (конкретно - short)

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

Хотя это в общем случае зависит от компилятора.

staseg ★★★★★
()

int - самый эффективный на любой платформе, это удобно

эх... я тоже хочу в этот мир розовых слоников, где все однозначно... :) в зависимости от платформы int может быть от 16 бит до 64 бит... в зависимости от процессора, компилятора и его режима... и из за этого большая попаболь постоянно чтобы все хоть как-то работало на разных платформах (DSP, etc...) даже с int... лучше бы в Си было просто тупо int8 uint8 ... int64 uint64 и усё... и лишь как исключение пусть было бы int и другие...

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от staseg

Уже понял, теперь и int испорчен :(

unsigned ★★★★
() автор топика

> int - самый эффективный на любой платформе

А что известно про long int? Только гарантированная ширина 32 бита

Это ложь. В стандарте написано лишь то, что sizeof(short) <= sizeof(int)<= sizeof(long) <= sizeof(long long).

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

А про limits.h там точно ничего не говорится? Стандарта нет под рукой.

unsigned ★★★★
() автор топика
Ответ на: а мне нра stdint.h от anonymous

А мне вот не нравится, что для примитивных типов нужно подключать файл, которого еще и нет у некоторых компиляторов, не будем показывать пальцем.

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

Это точно. Вариантов уйма. ИМХО, самый приличный - short - 16бит, int - 32бита, long - 64бита, long long - 128бит.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от unsigned

>Спасибо за содержательную дискуссию.

Пока ты не прочитаешь хотя бы букварь, дискутировать не о чем

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

Кстати да. Не шибко уж часто его используют. Я вот вообще не использую)

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

> Только гарантированная ширина 32 бита. Но если мне нужно 32 бита, я возьму int32_t, это логично,

Не логично сравнивать int32_t b long int

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

> Ну то есть костыли из-за того, что сразу не сделали правильные типы.

Ну да, почему тебя не спросили - ты бы точно сделал всё правильно.

Кстати, размер void * тоже не специфицирован в стандарте.

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

Вещественные типы эффективнее, чем целые? Очень сомнительно.

Я когда-то ускорил свою программу раза в два, только перейдя с single на integer. Правда, это был Basic на i386.

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

Вещественные типы эффективнее, чем целые? Очень сомнительно.

Могут быть быстрее, т.к. их можно выполнять параллельно на сопроцессоре.

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

Ну да, почему тебя не спросили - ты бы точно сделал всё правильно.

Я о том и прошу: объясните правильность этих типов? Если они нужны только для stdint.h, то я не вижу этому другого названия, как плохой дизайн. Если это правильно - то приведите пример использования.

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

> Вещественные типы эффективнее, чем целые? Очень сомнительно.

Не всё так просто, ИМХО. Хочу послушать, что скажут дипломированные специалисты и эксперты

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