LINUX.ORG.RU

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

 


0

1

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

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

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

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

★★★★

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

> когда компьютеры были большими и слабыми, а 32-битная адресация была редкостью, модно было размеры переменных на стеке, размеры структур, и другого, задрач^W оптимизировать вплоть до отдельных байтов

и даже более того — у mysql имеется 3-байтовый целый тип

так что до отдельных байтов опускаются не только сишники, и *дальше* будет то же самое — даже экономия 1 байта из 4

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

> да, давай попробуй докажи мне, нафига на современных системах нужен зоопарк char(название вообще смешное, с учетом реальности, т.е. юникода в т.ч.), short, long, int и прочего говна

Не. Давай ты мне объяснишь, почему языки, в которых реализовано твое предложение, умерли.

Потом объясни мне, чем (на 32-бит платформе) int отличается от word, char - от byte, и кто заставляет тебя использовать остальные типы.

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

щас вот пришел этот школьник Doug, и начнется обсуждение вопросов из детского сада, вместо интересного вопроса, поднятого топикстартером

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

> интересного вопроса, поднятого топикстартером

Топикстартеру уже ответили - так получилось в основном по историческим причинам.

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

> Топикстартеру уже ответили - так получилось в основном по историческим причинам.

ну так тогда встают дальнейшие вопросы — может тогда надо short за-depracate-ить, выдавать на него варнинги, и лет через 10 исключить из языка?

кстати, этот Doug с вероятностью 99% это love5an, вот http://www.linux.org.ru/jump-message.jsp?msgid=5847751&cid=5853028

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

Надо Си за-deprecate-ить, и всех его пользователей сжечь на костре. И написать ОС на менеджед языке - тут одна надежда - на MS, как сказали выше уже.

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

> Надо Си за-deprecate-ить

deprecate-илка не отросла еще

И написать ОС на менеджед языке - тут одна надежда - на MS, как сказали выше уже.

а ты понимаешь, что та ОС совсем не на лиспе, а на языке со статической типизацией где вааще никакой свободы?

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

За short могу сказать следующее - мы его эпизодически юзаем. Для достижения экcтремальной производительности приходится делать стуркутры макс. компактными, борьба идет за буквально за каждый байт (это кластере с 64-битной ОС, и про выравнивание я знаю;-)). Поэтому если целая цифирь в short влазит - там ее и хранить. Ну а про разработчиков софта под микроконтроллеры и про всякие биосы я вообще не говорю...

PS 2Doug

Молодой человек, с Вашей категоричностью бы в спикеры Госдумы... ;-)))

Вы никогда не задумывались о том, что Ваш опыт ниразу не всеобъемлющ (я не думаю есть хоть один чел с таки опытом, включая Торвальдса со Столлманном и Кнутом), и что в разных задачах востребованы разные средства разработки? Нравится CL - и пишите себе на ем, коли выходит... но с подобными заявами «депрекатить... закопать» на чужие полянки не лазьте - самого задепрекатят и закопают, и будут абс. правы!;-)

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

>Вы никогда не задумывались о том, что Ваш опыт ниразу не всеобъемлющ (я не думаю есть хоть один чел с таки опытом, включая Торвальдса со Столлманном и Кнутом), и что в разных задачах востребованы разные средства разработки? Нравится CL - и пишите себе на ем, коли выходит... но с подобными заявами «депрекатить... закопать» на чужие полянки не лазьте - самого задепрекатят и закопают, и будут абс. правы!;-)

Я чойто не понял, а вот кроме перехода на личности не нашлось аргументов?

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

Ты не понял, никто и не говорит, что 2байтовые типы не нужны. Проблема в том, что этот ваш short таковым не является.

Конечно, если не собираешься менять железо/ОС/компилятор, то можно надеяться, что ваши структуры не расползутся. Но не слишком ли много «если»? А у int16_t, между тем, никаких проблем нет.

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

Ты не понял, никто и не говорит, что 2байтовые типы не нужны. Проблема в том, что этот ваш short таковым не является.

Вот уж насчет short я всегда считал, что он в любой архитектуре 16-битный...

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

> Вот уж насчет short я всегда считал, что он в любой архитектуре 16-битный...

согласно стандарту он может быть больше 16 бит

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

для char, допустим, есть отмазка, что это якобы размер одного символа

Это не отмазка, и это уже перетиралось.

(что не мешает его иметь (по слухам) кое-где в 4 байта)

Отдельные октеты могут и не адресоваться на данной архитектуре, а отдельные символы адресовать таки надо.

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

была бы моя воля - я бы в сях оставил четыре целочисленных типа: byte

И имел бы стопицот диалектов Си вида C-${arch}?

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

Кроссплатформенности в нем и так никакой.

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

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

да какая там кроссплатформенность если в стандарте ровным счетом нихера не сказано о размерах целочисленных типов, кроме того, что один из них меньше другого? Мы даже не знаем, какой у нас тип за указатель можно использовать. Нет, понятное дело, что на x86-32 на ОС, работающих в protected mode, я прекрасно в курсах, какой это тип, но если пошел разговор про кроссплатформенность.

Да, а если типа не полагаться на особенности архитектуры и юзать [u]int<n>_t - потом вдруг внезапно окажется, что одна платформа не поддерживает 16битный тип, другая - 64битный - весело будет.

Си слишком низкоуровневый, чтобы быть кроссплатформенным. Код на нем и так привязан к отдельной(ну, как максимум - к нескольким) платформе. И без использования особенностей архитектуры на нем писать _нельзя_.

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

Вот поэтому в кроссплатформенные приложения и пихают кучу #define'ов, [пере]определяющих нужный тип в зависимости от платформы.

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

собственно ч.т.д.

Но кто-то там возмущался что если оставить только 4 типа, а остальные - на усмотрение компиляторам отдать, будет некроссплатформенно.

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

А никакого перехожа и не было. Я просто высказал свое мнение к Вашему стилю - он конечно очень ЛОР-овский, но ИМНО неконстркутивный;-)

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

Си слишком низкоуровневый, чтобы быть кроссплатформенным.

Он так задуман - низкоуровневым и простым, как мычание. (Именно задуман.) И при этом максимально кроссплатформенным. Привязан он таки не к платформе, а изначально к группе осей. Ну, а потом «за двумя зайцами пойдёшь - ни единого не достигнешь».

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

у меня в 2008-й скомпилилось и запустилось.

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

А кроссплатформенность разве мешает иметь типы фиксированной ширины? Да, недостающие придется эмулировать, но это и так всегда было. Когда-то long, сейчас (иногда) long long.

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