Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
Погоди, ты же читаешь кусок данных из устройства. Наименьшая единица пока что у нас - это один байт. Там и буфер должен быть char * или uchar *. Если кто-то хочет прочесть в массив int - это его проблема (пусть кастует). Драйвер должен предоставлять четкие методы, а не сахарные обертки с автоматическим кастаниям в void *. Хотя это мое ИМХО.
Брр. Незнаю, сколько имел дела с разными библиотеками - всегда используется char *.
P.S. Пример с FlashDrive, разумеется, очень сильно упрощён, не нужно указывать на то, что надо начальный сектор там или ещё что передавать. Речь не об этом.
Во-во, а это в корне неверный подход. Потом весь остальной код будет переполнен этими кастованиями, зато в драйвере всё в ажуре и без этого мерзкого void*. Добавлено спустя 3 минуты, 1 секунду З.Ы. А исходный код линуха вообще на C написан, так что не надо его в пример приводить.
Member
Статус: Не в сети Регистрация: 14.03.2004 Откуда: Москва
ПРишел на работу - отпишусь
mein писал(а):
К сожалению, частенько получаются функции поразмашистее - ну не всегда можно коротко и эффективно/наглядно развернуть алгоритм.
Это очень редко. Обычно либо это драйвера, либо какие-то сверх сложные алгоритмы. И то практика оказала что в последнем случае можно разбить.
Билли Бонс писал(а):
Если ты про void*, то иначе никак - буфер-то может быть любого типа.
Использование void нужно очень редко. это как раз самый низкий уровень, выше лучше уже писать конкретные типы. Хотя это опять же зависит от языка и стиля.
Aside писал(а):
Между прочим это хороший коммерческий стандарт.
Ну я как раз и писал по нашему, комерческому стандарту: ABBYY - а это чистый С++, без примесей С. Я токо с редкими моментами у нас не согласен, но тута ничего поделать уж нельзя.
Root писал(а):
А вообще действительно void* - дурной тон.
Во-во. Хотя иногда надо, и не куда не денешься...
Билли Бонс писал(а):
Венгерская нотация маст дай!!!
Надо закладывать в название перемых достаточную информацию чтобы был понятен смысл. Например isFlag, Name, String, Buffer и тд....
Root писал(а):
в частости когда программишь какую-нибудь девайсину и возюкаешься с кучей разных переменных разных типов.
Единственая причина использвоания венгерской натации - когда тебе нужно точно знать тип, а не семантику использования переменой. А это токо дрова и железо.
Root писал(а):
GCC, консоль, MAKE и DDK рулят
emacs добавь. А тама он уже умеет и тип говорить.
Daemon писал(а):
Там и буфер должен быть char * или uchar *.
Зачем так сложно? Зачем накладывать на буфер понятие минимального адресуемого пространства?
Daemon писал(а):
всегда используется char *.
см. Posix -где тама char*. Это все пока наследие прошлого, когда не было void*
Билли Бонс писал(а):
З.Ы. А исходный код линуха вообще на C написан, так что не надо его в пример приводить.
И ужасно написан, если честно
_________________ ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо
Единственая причина использвоания венгерской натации - когда тебе нужно точно знать тип, а не семантику использования переменой.
Единственная причина использования венгерской нотации - это отсутствие нормального редактора кода, что уже лет 10 не является оправданием этого убожества.
Advanced member
Статус: Не в сети Регистрация: 30.08.2003 Откуда: Санкт-Петербург
Цитата:
Ну не скажи... По крайней мере с ней не придётся каждый раз смотреть тип переменой
сейчас он скажет, что это достигается ценой огромного гемора дописывания двух буковок )))) неправда энто Если привыкнуть, то это удобно. Если не привыкать, так и пешком ходить неприятно )))))
_________________ {:€ дед в законе :-) нородный окодемег почетный пользователь OpenSuSE 11.3 Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad
Да, да, если привыкнуть, то удобно и в блокноте писать, и в.н. юзать, и левой рукой правое ухо чесать... Вот только не надо привыкать. Абсолютно ненужная вещь, только портит названия переменных и удлинняет время их набора (даже с ассистантом, т.к. он по первым буквам делает отсечение, а пока все эти одинаковые префиксы наберёшь, все пальцы сломаешь ). Давайте префиксы по типу ставить, потом суффиксы по файлу, в котором определение находится, ну ещё и ма-аленькое такое окончание по инициалам автора (а вдруг забудешь, кто это написал, кого спрашивать, как это работает).
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
nickyoz писал(а):
Зачем так сложно? Зачем накладывать на буфер понятие минимального адресуемого пространства?
Потому что работа с железом...
nickyoz писал(а):
И ужасно написан, если честно
Ужасен код BSD, а не линуха. И почему это его в пример ставить ненадо. Билли как раз и пишет низкоуровневый код, embeded если и пользуют С++, то урезанный по возможностям (возврат кода ошибки вместо бросания эксепшена и т.д.).
Member
Статус: Не в сети Регистрация: 14.03.2004 Откуда: Москва
Daemon писал(а):
Потому что работе с железом...
Это если работа с железом. А если это сисколы, или тем более обращение к библиотекам?
Daemon писал(а):
Билли как раз и пишет низкоуровневый код, embeded
Ембадед очень разный. Тута надо говорить что именно надо? Я не придеживаюсь каких-то особых догм для любой задачи. Но надо разбирать уже конкретный случай. А работа с железом скорее исключение, чем практика в программировании.
Daemon писал(а):
Ужасен код BSD, а не линуха.
Смотри код, который когда-то писал DEC. И все остальное будет ужасно. все познаются в сравнении
_________________ ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
nickyoz писал(а):
Тута надо говорить что именно надо? Я не придеживаюсь каких-то особых догм для любой задачи. Но надо разбирать уже конкретный случай. А работа с железом скорее исключение, чем практика в программировании.
Зачастую используются структуры, которые имеют набор ф-ций для работы с ними, а прямое обращение - запрещенно.
nickyoz писал(а):
Смотри код, который когда-то писал DEC.
Самый приличный - код с копирайтами Red Hat. Но дело не в этом.
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
nickyoz писал(а):
Все равно проприетарный код часто очень хороший. когда на одну строчку идёт 2 строки коментариеив и 5 строчек документа - это хорошо.
Эммм, это не проприетарный, а идеальный код. В огромном кол-ве (возможно большенстве) коммерческих проектов комментариев ооочень мало. К примеру совсем не маленькие продукты как Q3, Q4 (доступен SDK). Ядро MacOSX и драйвера. Комментированы только хедеры, которые включены в SDK. Это уже из другой оперы Добавлено спустя 1 минуту, 17 секунд
nickyoz писал(а):
Кормить структуры на самом низком уровне имхо плохо. Потому что представление о aligne у каждого компилятора может быть своё
Обычно на низком уровне применяется один компайлер, к примеру GCC для *nix, nmake для Windows.
Member
Статус: Не в сети Регистрация: 14.03.2004 Откуда: Москва
Daemon Вот у DECа был такой. У меня просто исходники закрытые есть. Тама все лежит, почти полная ОС, которую они ставили.
Могу привести ещё несколько примеров. Но все это ужасно дорогие продукты
Да при этом иногда при открытии исходников некоторые фирмы специально вычищают когда от коментариев
У нас же рекомендуется писать код так, чтоб все было понятно без компиляторов. В результате получаются индификаторы по 10-20 символов.
_________________ ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо
по моему не большому опыту, во многих компаниях применён свой стиль программирования которого надо придерживаться. В наборах их правил указано, как создавать переменные класса, переменные в стеке, глобальные переменные, методы, объекты, классы, и многое другое. Был случай когда компания на протяжении 4 лет придерживалась симантики объявления членов класса а потом по внутренним неизвестым мне причинам поменяла их (но не всё)
вот примерно два способа между которыми была война:
FooThink.h
Код:
//comments class FooThink { public: int foo_method(); protected: int m_foo_membder; };
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения