информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Передача параметров в функции ... опять 01.09.05 19:05  
Автор: void <Grebnev Valery> Статус: Elderman
Отредактировано 01.09.05 20:20  Количество правок: 1
<"чистая" ссылка>
Сходный вопрос уже обсуждаля. Вот наткнулся опять. Мой начальник пишет приблизительно такие функции...

typedef struct
{
// members - variables
int m_member1;
....

// members -nonvirtual functions
void func1( void );
....
}
HisClass;

//---------------------------------------

void SetData( HisClass inst )
{
HisClass a;
....
memcpy( & a, & inst, sizeof( HisClass ) );
...
}

//---------------------------------------------------------

void GetData( HisClass & inst )
{
HisClass a;
...
memcpy( & inst, & a, sizeof( HisClass ) );
...
}

Вопрос не в том, что это не работает (конечно, это работает), а в чистоте и надёжности кода... Cомнения такие:

1) В первой функции мне не понятно, насколько корректно (имеется ввиду компиллеро-независимо) всегда будет передаваться верный указатель & inst. На что будет указывать & inst - на облаcть памяти в стеке?

2) Во второй функции мне непонятно - корректно ли для всех компиллеров будет разрешаться указатель & inst (там объявленассылка)

3) Пока нет в HisClass виртуальных функций. Поэтому sizeof будет корректно определять размер копируемого буфера. Но вопрос чистА остаётся ... есть ли подводные камни при использовании разных компиллеров.

Спасибо.
===========================
Редакт.
Я это к тому, что функции будут лучше смотреться, на мой взгляд, как:

void SetData( HisClass & inst )
{
HisClass a = inst;
....
}

void GetData( HisClass & inst )
{
HisClass a;
...
inst = a;
...
}
struct.. HisClass.. memcpy.. кшмар.. надеюсь там полей типа... 01.09.05 22:19  
Автор: Killer{R} <Dmitry> Статус: Elderman
<"чистая" ссылка>
> Сходный вопрос уже обсуждаля. Вот наткнулся опять. Мой
> начальник пишет приблизительно такие функции...
>
> typedef struct
> {
> // members - variables
> int m_member1;
> ....
>
> // members -nonvirtual functions
> void func1( void );
> ....
> }
> HisClass;

struct.. HisClass.. memcpy.. кшмар.. надеюсь там полей типа char * или std::string нету? Ж)


> //---------------------------------------
>
> void SetData( HisClass inst )
> {
> HisClass a;
> ....
> memcpy( & a, & inst, sizeof( HisClass ) );
> ...
> }
Ужасно. Если уж захотел быстродействия то сделал бы лучше -
void SetData(const HisClass &inst )
Иначе все равно при вызове SetData создается локальный inst.


> //---------------------------------------------------------
>
> void GetData( HisClass & inst )
> {
> HisClass a;
> ...
> memcpy( & inst, & a, sizeof( HisClass ) );
> ...
> }
>
> Вопрос не в том, что это не работает (конечно, это
> работает), а в чистоте и надёжности кода... Cомнения такие:
дааа... тут еще надо поискать чистое место. А работать.. Скорее будет делать вид что работает. Пока ему не надоест Ж)

> 1) В первой функции мне не понятно, насколько корректно
> (имеется ввиду компиллеро-независимо) всегда будет
> передаваться верный указатель & inst. На что будет
> указывать & inst - на облаcть памяти в стеке?
_Память_ будет корректной.

> 2) Во второй функции мне непонятно - корректно ли для всех
> компиллеров будет разрешаться указатель & inst (там
> объявленассылка)
Вполне.

> 3) Пока нет в HisClass виртуальных функций. Поэтому sizeof
> будет корректно определять размер копируемого буфера. Но
> вопрос чистА остаётся ... есть ли подводные камни при
> использовании разных компиллеров.
Уже обсуждалось. А подводные камни... Тут скорее дно усыпанное битыми бутылками Ж)

> Спасибо.
> ===========================
> Редакт.
> Я это к тому, что функции будут лучше смотреться, на мой
> взгляд, как:
>
> void SetData( HisClass & inst )
> {
> HisClass a = inst;
> ....
> }
>
> void GetData( HisClass & inst )
> {
> HisClass a;
> ...
> inst = a;
> ...
> }
угу
Спасибо за реакцию. Правда щас другой вопрос остаётся.... 01.09.05 23:31  
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
> > void SetData( HisClass & inst )
> > {
> > HisClass a = inst;
> > ....
> > }
> >
> > void GetData( HisClass & inst )
> > {
> > HisClass a;
> > ...
> > inst = a;
> > ...
> > }

> угу

Спасибо за реакцию. Правда щас другой вопрос остаётся... Наверное надо в "разное" перенести - как программировать тогда, чтобы не выгнали. ;) Там ишо не такие перлы. Исправить-то легко. На работе потом удержаться трудно ;) Тут с критикой плохо.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach