RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : Ответить на сообщение
Имя:
e-mail:
FIDO:
Home page:
сохранить данные о вас
Тема:
> > > Не компилируется. Ошибка типизации. Указатель вместо int. > > > > А у меня - компилируется. И ассемблерный листинг выдаёт, в котором видно, что программа делает именно то, что написано. > > Компиляторы иногда имеют ошибки. Как и любые другие программы. > > > > > > Объясни друзьям, что функции нужно описывать. Это несложно. > > > > Если компилятору недостаточно "int func(int x)", то откуда такая уверенность, что то же самое, написанное ещё раз, что-то изменит? > > Из стандарта. Если функция описана как имеющая параметр int, то указатель туда не пропустит компилятор. > > > Нет, если инструмент допускает такое, то его место - где-то в дальнем углу. > > (Кстати, в стандарте языка написано, что указатель не совместим с целым по присваиванию? А по подстановке параметров?) > > Написано. > > > Вот и я в прошлый раз говорил, что язык, зависящий от компилятора, это не язык уже, а семейство. > > Язык от компилятора не зависит. Ошибки в реализации языка - да, зависят. > > > > "Главная часть любого оружия - голова его владельца". > > > > Вот именно. И её, как главную часть, беречь надо, а не дуло этого же оружия к ней приставлять. > > Если голова хочет это оружие к себе приставить - вольному воля. > > > > Используй сишные битфилды. Очень удобно и код хороший получается. > > > > Максимальный размер их? А почему я ни разу не видел их ни в чьих в исходниках? Народ удобств не хочет? Или тоже компиляторо-специфичное изобретение? > > максимальный размер не ограничен, но использовать слишком длинные битфилды неудобно. Заимеешься имена битам давать. > > > > В стандарте Паскаля не аналога для сишного interrupt. > > > > (А, ты, говоря о Паскале, имеешь в виду стандарт. Я думал - что тот язык, который борландовские компиляторы используют. Ладно, запомним это на будущее.) > > Если ты про interrupt в Turbo Pascal - да, есть такое. Но не портабельное. Ни дельфя, ни VP его не понимают. Бо слишком завязано на дос. > > > А с чего ты решил, что этот аналог там нужен (в Модуле, например, без него прекрасно обходятся)? Если процедура, порождаемая компилятором, на выходе оставляет неизменными все регистры кроме тех, в которых возвращается результат, то interrupt становится не нужным (обработчик ведь результата не возвращает). Если же типовая процедура какие-то регистры гробит, то что мещает на входе в обработчик вызвать процедуру SaveState, а на выходе - RestoreState? > > Брр. Если процедура всегда сохраняет все регистры, то оно несколько неэффективно. Но в общем конечно тоже вариант. А вот как шепнуть им, чтобы команду выхода правильную поставили? > > > Ну, а если мы имеем дело с многозадачной ОС, то тут вообще задача сохранения и восстановления контекста решается самой операционкой. > > Дык вроде спич как раз об написании операционки? > > > Кстати, а в стандарте Си слово interrupt предусмотрено? А как на Си решить обратную задачу - написать участок кода, который прерывать нельзя? Так, чтобы оно гарантированно скомпилировалось любым компилятором. > > слово interrupt предусмотрено. Насчет непрерываемого участка кода - уел. Нет такого. Слишком сие платформоспецифично. > > > > Описываешь calling convention для внешней функции и все. > > > > _Как_ описываешь? Ключевым словом pascal? А кто гарантирует, что тот паскалевский компилятор, который эту библиотеку породил, использует точно такой же способ передачи параметров в процедуры? Ведь способ передачи параметров стандартом языка не регламентируется. > > Все виденные мной паскалевские компиляторы использовали один и тот же calling convention. > > > > Не иначе именно поэтому в том же самом стандарте Паскаля такие функции есть. Такой вот ненадежный стандарт. > > > > Нет их там. Есть несколько операторов языка. А операторы - совсем не то же самое, что самодельные процедуры. > > Гм, то есть writeln - оператор? Возможно... > > > Но в данном случае навязывают именно тебе - правила раздачи имён функциям в библиотеках, при несоблюдении которых огребаешь проблемы (да и соблюдение не гарантирует - потому что соблюдать их должны все, а не только ты). А у меня в этом месте - полная свобода. Язык гарантирует. > > Согласен, решение более элегантное. > > > > Стандартные библиотеки в префиксах не нуждаются, именно потому что они стандартные. > > > > Не увиливай - вопрос был не стандартных библиотеках. Они были упомянуты просто потому, что откуда среднестатичтический программист узнает о каких-то там внеязыковых соглашениях? А имена стандартных функций - вот они, перед глазами. Значит, на них он и будет равняться. > > Среднестатистический программист, не знающий о внеязыковых соглашениях не напишет ничего, пригодного для использования другими людьми. > > > Ты на вопрос не ответил. > > Я подумал, что он риторический :) Стандарт прямо и честно говорит, что результат такого действия не определен. Потому, что в зависит от процессора и компилятора. Соответственно использующим такие конструкции прямая дорога к терапевту. С другой стороны, сама по себе операция инкремента/декремента очень удобна и полезна. В частности - хорошо ложится на многие процессоры. > > >
_, _, _, _, _ _, _,_
(_ | / \ |\ | / \ |_/
, ) | , \ / | \| \ / | \
~ ~~~ ~ ~ ~ ~ ~ ~
Programmed by
Dmitri Maximovich
,
Dmitry I. Platonoff
,
Eugen Kuleshov
.
25.09.99 (c) 1999,
RU/2
. All rights reserved.
Rewritten by
Dmitry Ban
. All rights ignored.