Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 53 • Страница 2 из 3<  1  2  3  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Daemon Почему не char*? Ну, а если будут читать массив int'ов, кастованием заниматься? Бред.



Партнер
 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Погоди, ты же читаешь кусок данных из устройства. Наименьшая единица пока что у нас - это один байт. Там и буфер должен быть char * или uchar *. Если кто-то хочет прочесть в массив int - это его проблема (пусть кастует). Драйвер должен предоставлять четкие методы, а не сахарные обертки с автоматическим кастаниям в void *. Хотя это мое ИМХО.

Брр. Незнаю, сколько имел дела с разными библиотеками - всегда используется char *.

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Вот пишет тупой юзер загрузку своей структуры с диска:
Код:
struct StupidUserInfo
{
    // какие-то члены (может заголовок какого-то jpeg или bmp)
};

StupidUserInfo inf;
extern FlashDrive *drv;
drv->read_buffer( &inf, sizeof( inf ) );

Ну и как здесь быть без void*?

P.S. Пример с FlashDrive, разумеется, очень сильно упрощён, не нужно указывать на то, что надо начальный сектор там или ещё что передавать. :) Речь не об этом.


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
ИМХО так и не как иначе :)
drv->read_buffer( reinterpret_cast<char *>(&inf), sizeof( inf ) );
Добавлено спустя 51 секунду
Даже в BSD сокетах так:
Код:
int recv(
  SOCKET s,
  char* buf,
  int len,
  int flags
);

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Во-во, а это в корне неверный подход. :) Потом весь остальной код будет переполнен этими кастованиями, зато в драйвере всё в ажуре и без этого мерзкого void*. :)
Добавлено спустя 3 минуты, 1 секунду
З.Ы. А исходный код линуха вообще на C написан, так что не надо его в пример приводить. :D


 

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 написан, так что не надо его в пример приводить.

И ужасно написан, если честно :)

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
nickyoz писал(а):
Единственая причина использвоания венгерской натации - когда тебе нужно точно знать тип, а не семантику использования переменой.
Единственная причина использования венгерской нотации - это отсутствие нормального редактора кода, что уже лет 10 не является оправданием этого убожества. :)


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
Билли Бонс Ну не скажи... По крайней мере с ней не придётся каждый раз смотреть тип переменой

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
Цитата:
Ну не скажи... По крайней мере с ней не придётся каждый раз смотреть тип переменой

сейчас он скажет, что это достигается ценой огромного гемора дописывания двух буковок ))))
неправда энто :) Если привыкнуть, то это удобно. Если не привыкать, так и пешком ходить неприятно )))))

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Member
Статус: Не в сети
Регистрация: 14.03.2004
Откуда: Москва
Root В большинсте задач действительно тип переменых куда менее важен чем семантика её использования. Поэтому в большинстве задач это зло

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

Member
Статус: Не в сети
Регистрация: 24.12.2005
Root писал(а):
Если привыкнуть, то это удобно.
Да, да, если привыкнуть, то удобно и в блокноте писать, и в.н. юзать, и левой рукой правое ухо чесать... :) Вот только не надо привыкать. Абсолютно ненужная вещь, только портит названия переменных и удлинняет время их набора (даже с ассистантом, т.к. он по первым буквам делает отсечение, а пока все эти одинаковые префиксы наберёшь, все пальцы сломаешь :) ). Давайте префиксы по типу ставить, потом суффиксы по файлу, в котором определение находится, ну ещё и ма-аленькое такое окончание по инициалам автора (а вдруг забудешь, кто это написал, кого спрашивать, как это работает). :D


 

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.03.2004
Откуда: Москва
Daemon Кормить структуры на самом низком уровне имхо плохо. Потому что представление о aligne у каждого компилятора может быть своё

Все равно проприетарный код часто очень хороший. когда на одну строчку идёт 2 строки коментариеив и 5 строчек документа - это хорошо.

_________________
ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо


 

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;
};

main.cpp
Код:
#include "FooThink.h"
void main(void)
{
    FooThink s_foo_think;
    ...
}

вот примерно что стало:
FooThink.h
Код:
//comments
class FooThink
{
public:
    int fooMethod();
protected:
    int mFooMembder;
};
main.cpp
Код:
#include "FooClass.h"
void main(void)
{
    FooClass fooThink;
    ...
}

----
у меня есть другая проблематика написания объявлений переменных указателей

что и как используетe, хотелось бы узнать что предпочитаете:

Код:
int *c,*d;
...
c = d;

или
Код:
typedef int* PINT;
PINT c,d;
...
c = d;

ещё весьма существенная разница как писать int* a, либо int *a;
разница как понимаете стилестическая.


 

Member
Статус: Не в сети
Регистрация: 18.08.2005
Откуда: Новороссийск
mcgeenerman писал(а):
ещё весьма существенная разница как писать int* a, либо int *a;
разница как понимаете стилестическая.


Как мне кажется лучше писать int *a, поскольку так сразу видно с чем связан признак указателя, не смотря на синтаксическое безразличие.

Можно конечно и так int * a, типо не вашим не нашим :) .

А вообще я думаю, что каждая компания предерживается своего стиля!

А мне интересно другое: как правильнее писать, так:
Код:
int function(double x, double y, double z, int *ptr)
{
   return 1;
}

или так:
Код:
int function(double x,
          double y,
          double z,
          int *ptr)
{
   return 1;
}


И ещё интересно, как писать, return 0; или return(0);, самому больше нравится без скобок.


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
Цитата:
И ещё интересно, как писать, return 0; или return(0);, самому больше нравится без скобок.

пофигу. Если бы было return NULL, то лучше было бы писать для переносимости со скобками: return (NULL)
Цитата:
А мне интересно другое: как правильнее писать, так:

пофигу. зависит от вкуса. я лично пишу и так, и так - в зависимости от кол-ва параметров :)

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 53 • Страница 2 из 3<  1  2  3  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan