eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: SaLvaTruCha (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Оффтоп —› С-- С С++ -> ...
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 4 марта 2016 12:14 · Поправил: 4 марта 2016 12:15 VodoleY New!
Цитата · Личное сообщение · #1

В общем. а хочу задать вопрос, который меня волнует уже давно. Видимо в основном это вопросы к гуру наСИльников. Где можно почитать/узнать классификацию СИ с ньюансами разных компиллеров. Т.е якобы стандарт есть.. но чтоб чтото на сях скомпилить местами этот секс с припрыжками.
Или так.. как так кодить.. чтоб компилилось везде.
ЗЫ. я по этой причине давно сижу на 6ой делфе. ибо совместимость снизу вверх там все еще актуальна.. ну почти.. в сях.. чтото совсем печально

Ранг: 60.6 (постоянный)
Статус: Участник

Создано: 4 марта 2016 12:27 New!
Цитата · Личное сообщение · #2

VodoleY пишет:
классификацию СИ с ньюансами разных компиллеров

Нужно отдельно открывать документацию по каждому интересующему компилятору и смотреть интересующие моменты.

VodoleY пишет:
Т.е якобы стандарт есть.. но чтоб чтото на сях скомпилить местами этот секс с припрыжками

Проблемы, когда используются системозависимые инклюды/типы/функции или собственные фишки компиляторов, также, компилятор запросто может не обладать всем набором фич, которые есть в стандарте, особенно в случае с С++ актуально...

VodoleY пишет:
Или так.. как так кодить.. чтоб компилилось везде.

ifdef, использовать библиотеки, проблема как и во всех относительно низких языках - стандартная библиотека мало чего дает

VodoleY пишет:
ибо совместимость снизу вверх там все еще актуальна.. ну почти.. в сях.. чтото совсем печально

У того же gcc есть флажки компиляции для поддержки старых стандартов. Другое дело зачем вам совместимость, например, с C89...

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 4 марта 2016 12:50 · Поправил: 4 марта 2016 12:52 VodoleY New!
Цитата · Личное сообщение · #3

Kaimi пишет:
ifdef,

вот за эту конструкцию.. я б чесно.. просто расстрелял
с подмножеством подверсий СИ я вообще склоняюсь к мнению.. что мы сами создаем проблемы.. потом ожесточенно с ними боремся.


Ранг: 122.7 (ветеран)
Статус: Участник
Qt Developer

Создано: 4 марта 2016 14:47 New!
Цитата · Личное сообщение · #4

Совсем недавно искал почему один и тот же участок кода правильно работал в Windows, но неправильно в OSX.
Причина - разный размер wchar_t.

| Сообщение посчитали полезным: DenCoder


Ранг: 60.6 (постоянный)
Статус: Участник

Создано: 4 марта 2016 15:49 New!
Цитата · Личное сообщение · #5

Так это, надо четко писать uint8_t, uint16_t, etc чтобы без таких сюрпризов. С little endian - big endian еще веселее.. В общем если хочется кроссплатформенности без заморочек, то либо скриптовые языки, либо Java, C# и прочее


Ранг: 220.6 (наставник)
Статус: Участник

Создано: 4 марта 2016 16:07 · Поправил: 4 марта 2016 16:51 HandMill New!
Цитата · Личное сообщение · #6

Флодотопик какой-то: один_ЯП_name vs другой_ЯП_name и никакой конкретики о проблемах. ТС, что ж у тебя случилось то такого что язык тебе чем-то неугодил? Напиши что именно у тебя не получается - может сможем помочь чем-то.

| Сообщение посчитали полезным: Dart Sergius, hors



Ранг: 122.7 (ветеран)
Статус: Участник
Qt Developer

Создано: 4 марта 2016 16:40 · Поправил: 4 марта 2016 16:41 hors New!
Цитата · Личное сообщение · #7

Kaimi пишет:
В общем если хочется кроссплатформенности без заморочек, то либо скриптовые языки, либо Java, C# и прочее


На С/С++ прекрасно пишутся кросплатформенные приложения.

Kaimi пишет:
С little endian - big endian еще веселее.


Если программа напрямую не работает с raw data, то разница между BE и LE незаметна.

| Сообщение посчитали полезным: HandMill



Ранг: 256.3 (наставник)
Статус: Участник
Advisor

Создано: 4 марта 2016 17:02 New!
Цитата · Личное сообщение · #8

HandMill пишет:
что ж у тебя случилось то такого что язык тебе чем-то неугодил?

VodoleY пишет:
чтоб компилилось везде.

Из знакомства с гитхабом,... бывает частенько, что сорцы с плюсов хер слинкуешь...)))
Может это имелось в виду. В дельфях с подобным конечно разбираться проще, дпр пас и форма.


Ранг: 105.6 (ветеран)
Статус: Участник

Создано: 4 марта 2016 17:07 New!
Цитата · Личное сообщение · #9

Bronco пишет:
что сорцы с плюсов хер слинкуешь...)))

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

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 4 марта 2016 20:55 · Поправил: 4 марта 2016 21:02 VodoleY New!
Цитата · Личное сообщение · #10

ну вот первая пачка флуда прошла. вопросы к ТС? я повторюсь. почему многие любат асм..
byte word dword qdword.. и звиздец.. какие нафиг лишние типы переменный? накой они в пень нужны?
во вторых.. с++ ... ну это отедльная тема.. многие пользуют фичи гибкости? создавая себе гимор переносимости.. создавая нечитабельный гуан? выигрывая 3 строчки кода.. проигрываеш в переносимости и читабельности...

Добавлено спустя 2 минуты
добавлю.. это же гасается делфей 8 и высше.. нахер новые конструкции налипили.. хз.. толку от них ноль.. пользы так же.. бреда.. 2 вогона
ЗЫ. повторяюсь.. есть диалект си .. желательно со средой, максимально портабельный, и желательно с описание отличий от других? или каждый частный случай частное говно?

Добавлено спустя 7 минут
я тут с недельку назад.. пытался скомпилить DosBox.. и охерел.. надо еще 11 либ тащить.. причем.. отключения либ.. не означает что ты их не должен иметь.. в конце концов.. отреверсил работающий dosbox сделал логирующий скрипт.. и с матами.. удалил студию.. или это только у меня так все через жопу?


Ранг: 105.6 (ветеран)
Статус: Участник

Создано: 4 марта 2016 21:23 New!
Цитата · Личное сообщение · #11

VodoleY пишет:
многие пользуют фичи гибкости?

смотря что пишу.
VodoleY пишет:
создавая себе гимор переносимости.. создавая нечитабельный гуан?

гемора переносимости не ощущаю. Переносимость между чем нужна?
VodoleY пишет:
есть диалект си .. желательно со средой, максимально портабельный, и желательно с описание отличий от других?

плюсы и Qt.
VodoleY пишет:
я тут с недельку назад.. пытался скомпилить DosBox..

не совутею vbox компилить :D Там ещё хуже.

Ранг: 60.6 (постоянный)
Статус: Участник

Создано: 4 марта 2016 22:01 New!
Цитата · Личное сообщение · #12

VodoleY пишет:
byte word dword qdword.. и звиздец.. какие нафиг лишние типы переменный? накой они в пень нужны?

До тех пор пока не требуется писать свой крузис3 кроссплатформенный - да, не нужны. Или взять скажем fastcall под win и nix, нормально, кроссплатформенно?

VodoleY пишет:
я тут с недельку назад.. пытался скомпилить DosBox.. и охерел.. надо еще 11 либ тащить.. причем.. отключения либ.. не означает что ты их не должен иметь.. в конце концов.. отреверсил работающий dosbox сделал логирующий скрипт.. и с матами.. удалил студию.. или это только у меня так все через жопу?

Не понимаю суть претензий. Хотите язык, где в стандартных библиотеках есть буквально все и ничего не требуется? Так не бывает, кто-то должен тащить гору абстракций для работы с конкретной ос/архитектурой. Естественно библиотеки, естественно качество, переносимость и простота библиотек на совести авторов.

Сами же говорите что у вас есть дельфи6 который отлично подходит для ваших типичных задач. У кого-то это не так. Причины разные. Дельфи6 тоже не эталон переносимости. Проблемы сборки сишных чего-то там - это обычно именно проблемы сборки/инклюдов, а не самого кода. С тем же успехом можно взять код на масм дергающий винапи, а потом говорить что ассемблер не переносим и не компилируется под линуксом, ну да, естественно.


Ранг: 256.3 (наставник)
Статус: Участник
Advisor

Создано: 4 марта 2016 22:26 New!
Цитата · Личное сообщение · #13

VodoleY, та то просто не обжился в среде.
Я со ВСтудией 2 месяца знаком, и после Дельфей, поначалу то же сыпал кирпичами на каждом шагу, а ща
не чЁ, обтёрся, много в ней сладкого, от Сишного Дебагера к примеру, ваще гарячим брыжжжжжу.

Ранг: 382.3 (мудрец)
Статус: Участник

Создано: 6 марта 2016 14:01 · Поправил: 6 марта 2016 14:12 dosprog New!
Цитата · Личное сообщение · #14

VodoleY пишет:
ну почти.. в сях.. чтото совсем печально


Никаких проблем (ну почти что).
Есть справочник от М.И.Болски ("Радио и связь", 1988) "Язык программирования Си" --> Link <--
- не выходя за его рамки всё получается вполне переносимое.
Но это командная строка со стандартным вводом-выводом. Этого не всегда бывает достаточно.

Kaimi пишет:
uint8_t, uint16_t


Это на самом деле <unsigned char> и <unsigned short int>.
Вот так она и теряется, переносимость.

Просто в используемом комплекте компилятора где-то в хидерах упомянуто:
#define uint8_t unsigned char
#define uint16_t unsigned short int
-- Или то же самое через typedef.

Никого ни к чему не обязывает кагбэ.

Ранг: 60.6 (постоянный)
Статус: Участник

Создано: 6 марта 2016 15:09 New!
Цитата · Личное сообщение · #15

Спасибо, капитан. Ага, а потом, например, int оказывается двухбайтовым, когда хотелось 4 байта и все становится просто замечательно. Или изначально писали под 64 бит, а тут опа и решили под 32 собрать.
Не, оно понятно, что в первую очередь вопрос к разработчику и его знаниям и качеству кода, но указание конкретных размеров много где может пригодиться

Ранг: 382.3 (мудрец)
Статус: Участник

Создано: 6 марта 2016 15:48 · Поправил: 6 марта 2016 15:56 dosprog New!
Цитата · Личное сообщение · #16

Kaimi пишет:
Спасибо, капитан. Ага, а потом, например, int оказывается двухбайтовым, когда хотелось 4 байта и все становится просто замечательно.


Внимательно читаем. Там есть словечко <short> - "короткое".
short - всегда двухбайтовый WORD. Как в DOS-16, так и в WIN-32.
Это же азбука..

Простой int в DOS-16 это двухбайтовый WORD, а в WIN-32 это 4х- байтовый DWORD.
Тип int (обычный) имеет по определению размер регистра целевой машины.

Для насильственного превращения в DOS-16 числа int в четырёхбайтовое нужно назвать его как long int. Или просто long.
В WIN-32 никаких уточнений не требуется - там int это DWORD (4 байта).


Ранг: 1963.6 (!!!!)
Статус: Модератор
retired

Создано: 6 марта 2016 15:57 New!
Цитата · Личное сообщение · #17

dosprog пишет:
short - всегда двухбайтовый WORD

Строго говоря, стандарт ограничивает его размер снизу, минимум 16 битов, но сверху нет. Так что ничего не мешает ему быть и 32-битным.
В таких случаях уже надо пользоваться новым стандартом и новыми типами фиксированного размера.

Ранг: 382.3 (мудрец)
Статус: Участник

Создано: 6 марта 2016 16:05 · Поправил: 6 марта 2016 16:20 dosprog New!
Цитата · Личное сообщение · #18

Archer пишет:
Строго говоря, стандарт ограничивает его размер снизу, минимум 16 битов, но сверху нет.


Честно говоря, не слышал о таком.
Вот довольно подробно об этом в педивикии:

Многие языки программирования предлагают выбор между короткими (англ. short), длинными (англ. long) и целыми стандартной длины. Длина стандартного целого типа, как правило, совпадает с размером машинного слова на целевой платформе. Для 16-разрядных операционных систем — этот тип (int) составляет 2 байта и совпадает с типом short int (можно использовать как short, опуская слово int), для 32-разрядных операционных систем он будет равен 4 байтам и совпадает с длинным целым long int (можно использовать как long, опуская слово int), и в этом случае будет составлять 4 байта. Короткое целое short int, для 16-разрядных операционных систем, 32-разрядных операционных систем, и для большинства 64-разрядных операционных систем составляет — 2 байта. Также в некоторых языках может использоваться тип данных двойное длинное long long, который составляет 8 байт.

Эти соглашения поддерживаются повсеместно, по моим наблюдениям, - и это хорошо.

Archer пишет:
В таких случаях уже надо пользоваться новым стандартом и новыми типами фиксированного размера.

"Новые" типы обычно описаны в хидер-файлах через стандартные.
Это бывает удобно и не вызывает сложностей, как правило.

Обычно это BYTE, WORD, DWORD и QWORD. (Они считаются беззнаковыми).
А в общем, дело вкуса.

Серьёзные траблы возникают, как правило, с адресной арифметикой, особенно при переносе программы из 32-бит в 16-бит систему.
Но это отдельная тема

.. И потом - интересует же "Стандартный Си"..


Ранг: 60.6 (постоянный)
Статус: Участник

Создано: 6 марта 2016 17:01 New!
Цитата · Личное сообщение · #19

dosprog пишет:
Внимательно читаем. Там есть словечко <short> - "короткое".
short - всегда двухбайтовый WORD. Как в DOS-16, так и в WIN-32.
Это же азбука..

Доводилось портировать алгоритмы из dos софта под современные системы, и с жестко прописанными размерами многих проблем не возникло бы.

dosprog пишет:
В WIN-32 никаких уточнений не требуется - там int это DWORD (4 байта).

Это конечно хорошо. Просто иногда приходится писать код который должен одинаково собираться и работать под win, nix запущеных на интелах, армах и спарках. Мне как-то проще явно размер задавать.

Ранг: 382.3 (мудрец)
Статус: Участник

Создано: 6 марта 2016 17:06 · Поправил: 6 марта 2016 23:37 dosprog New!
Цитата · Личное сообщение · #20

Kaimi пишет:
Мне как-то проще явно размер задавать.


Так на здоровье - есть typedef, как раз для этой цели.
Это во-первых - а во-вторых советуют не упоминать в таких случаях int,
а писать явно - short или long, Это и есть явное задание размера.

Ну, можно ещё для удобства себе настроить такое:
typedef short int16
typedef long int32

- Это обычно уже сделано в заголовочных файлах стандартной библиотеки используемого компилятора.
Эти все uint16_t etc. это оно и есть.

VodoleY пишет:
ifdef,
вот за эту конструкцию.. я б чесно.. просто расстрелял


На самом деле в этом ifdef как раз и спасение. Иначе бы вообще ничего не получалось.


Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 7 марта 2016 07:15 · Поправил: 7 марта 2016 07:18 VodoleY New!
Цитата · Личное сообщение · #21

ну вот мы все ближе подходим к сути вопроса изначального.
Существует ли сводная гдето сводная документация, охватывающая разницу между диалектами СИ и вариации и способы решения проблем, совместимости(я о размерности данных даже не говорю, вопрос скорее к синтаксическим конструкциям)
ЗЫ. вот года 2 назад я пытался медиану (дизасм) засунуть в QT. вот не смотря на уверения int-а.. у меня почемуто не получилось скомпилить ее.

Ранг: 30.2 (посетитель)
Статус: Участник

Создано: 7 марта 2016 08:26 New!
Цитата · Личное сообщение · #22

Нет никаких диалектов!
Есть стандарт (несколько: C++02, 98, 11, ...)
в различных компиляторах С++ (gcc/icc/ms) есть различия в виде самовыдуманных конструкций, не относящихся к стандарту.
Пишите по стандарту и будет компилироваться под любую поддерживаемую платформу.

| Сообщение посчитали полезным: Getorix



Ранг: 209.5 (наставник)
Статус: Участник
WinCE ARM M@sTeR

Создано: 7 марта 2016 10:48 New!
Цитата · Личное сообщение · #23

Вот человек awlost все правильно говорит. Если следовать стандарту и не использовать compiler-specific код, то все будет очень даже кросплатформенно, причем даже на эмбедщине.

Ранг: 382.3 (мудрец)
Статус: Участник

Создано: 7 марта 2016 11:15 · Поправил: 7 марта 2016 11:16 dosprog New!
Цитата · Личное сообщение · #24

awlost пишет:
в различных компиляторах С++ (gcc/icc/ms) есть различия в виде самовыдуманных конструкций, не относящихся к стандарту.


Ну да, - причём эти выдуманные удобняшки реализованы пользовательскими средствами в хидер-файлах - с помощью typedef'ов и define'ов.
Концы можно найти, короче, если сильно разозлиться.

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 7 марта 2016 11:32 · Поправил: 7 марта 2016 11:39 VodoleY New!
Цитата · Личное сообщение · #25

awlost пишет:
в различных компиляторах С++ (gcc/icc/ms) есть различия в виде самовыдуманных конструкций, не относящихся к стандарту.

ну вот я может все таки додавлю комьюнити.. и ктото даст ссылки на различия.. ибо главная проблема, это все таки юзать чужой код. и поэтому с этими самовыдуманными.. именно бороться и приходится
ЗЫ. т.е еще раз повторяю вопрос. нет ли где.. сводной спеки, по отличию RFC С С++ от (gcc/icc/ms) етс

Добавлено спустя 2 минуты
dosprog пишет:
Концы можно найти, короче, если сильно разозлиться.

именно об сводной спеке и речь.. чтоб с каждой задротой.. не приходилось ЗЛИТСЯ я итак зол как козел

Добавлено спустя 7 минут
Getorix пишет:
Если следовать стандарту и не использовать compiler-specific код

ну во первых тут же форум по факту не по программированию. а по реверсу. поэтому когда ты используеш ЧУЖОЙ код то тебя никто не спрашивал про придерживания стандартов

Ранг: 382.3 (мудрец)
Статус: Участник

Создано: 7 марта 2016 12:32 · Поправил: 7 марта 2016 12:58 dosprog New!
Цитата · Личное сообщение · #26

VodoleY пишет:
чтоб с каждой задротой.. не приходилось ЗЛИТСЯ


Сорри, но это неизбежно..

VodoleY пишет:
ну во первых тут же форум по факту не по программированию. а по реверсу. поэтому когда ты используеш ЧУЖОЙ код то тебя никто не спрашивал про придерживания стандартов


Обычно приходится добавлять свой инклюде-файл, где описывать все навороты и развороты, недостающие в используемом комплекте компилятора по сравнению с тем, который был у автора кода.
В таком случае очень помогает иметь хотя бы набор его "стандартых" инклюдов, из комплекта компилятора, которым он пользовался.
(Вдобавок, по наблюдениям, среди сишников примерно половина является приверженцами идеи "непонятного программирования". Есть такое..)

Описания всяких чудачеств нет как такового, стандарты же на Си/Си++, о которых тут упоминали, в компиляторах соблюдаются довольно жёстко. Может быть, даже очень жёстко.

Поскольку если в компиляторе не заявлено соответствие стандарту Си/Си++, то это сразу же ставит на нём жирный крест - никто не станет с ним возиться и успеха он иметь не будет.

| Сообщение посчитали полезным: VodoleY


Ранг: 33.0 (посетитель)
Статус: Участник

Создано: 7 марта 2016 12:40 New!
Цитата · Личное сообщение · #27

VodoleY
стандарт - и есть спека
если использовать чужой код, то чем некая база поможет? вычитывать весь чужой код или грепом искать ошибки?

Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 7 марта 2016 13:06 · Поправил: 7 марта 2016 13:23 VodoleY New!
Цитата · Личное сообщение · #28

dosprog пишет:
(Вдобавок, по наблюдениям, среди сишников примерно половина является приверженцами идеи "непонятного программирования". Есть такое..)

как же тут я хочу поставить много плюсов..
ЗЫ. я как бы вот хочу подметить. я раз 2 ставил студию.. и 2 раза QT даже по честному тратил несколько дней на попытки. но каждый раз с матами, плевал на все.. и говорил.. "мля. это в последний раз я трачу время зря" и вот неделю назад опять согрешил
ЗЫЫ вот была у меня 1ая книжка по сям.. которую я читал. гдето 88го года.. там был очень яркий пример.. как дефайнами.. сделать код.. из си.. паскаль.. т.е.
define { Begin
define } End
ну и в таком духе.. вот у меня ощущение что многие си кодеры.. так и работают.

Ранг: 382.3 (мудрец)
Статус: Участник

Создано: 7 марта 2016 13:23 · Поправил: 7 марта 2016 13:29 dosprog New!
Цитата · Личное сообщение · #29

VodoleY пишет:
я раз 2 ставил студию.. и 2 раза QT


И тем не менее, видимо, именно за этими продуктами будущее

VodoleY пишет:
.. многие си кодеры.. так и работают.

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


Ранг: 488.4 (мудрец)
Статус: Участник

Создано: 7 марта 2016 13:25 · Поправил: 7 марта 2016 13:27 VodoleY New!
Цитата · Личное сообщение · #30

dosprog ща тебя тут бить начнут сторонники Java .Net кода.. и всяких фронтэндов. и пофигу что из них 99 проц не понимает как это работает
. 1 . 2 . >>
 eXeL@B —› Оффтоп —› С-- С С++ -> ...

У вас должно быть 20 пунктов ранга, чтобы оставлять сообщения в этом подфоруме, но у вас только 0


Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS