LINUX.ORG.RU

А стоит ли придерживаться такого стиля?

 ,


0

3
void CALLBACK UpdateDependentHandle(_UNCHECKED_OBJECTREF *pObjRef, uintptr_t *pExtraInfo, uintptr_t lp1, uintptr_t lp2)

//обратите внимаение на lp2

{
Object **pPrimaryRef = (Object **)pObjRef;
    Object **pSecondaryRef = (Object **)pExtraInfo;
  
LOG((LF_GC|LF_ENC, LL_INFO10000, LOG_HANDLE_OBJECT("Querying for new location of ", 
            pPrimaryRef, "to ", *pPrimaryRef)));
    LOG((LF_GC|LF_ENC, LL_INFO10000, LOG_HANDLE_OBJECT(" and ", 
            pSecondaryRef, "to ", *pSecondaryRef)));

promote_func* callback = (promote_func*) lp2; //и здесь


callback(pPrimaryRef, (ScanContext *)lp1, 0);
callback(pSecondaryRef, (ScanContext *)lp1, 0);
}

выдержка из реального кода. стоит ли продолжать писать подобным образом?

чуть не забыл, ф-ция вызывается ровно 1 раз.

функция приведена полностью, выкинул только #ifdef _DEBUG разные, чтобы не отвлекаться

★★★★★

Последнее исправление: next_time (всего исправлений: 3)

Ответ на: комментарий от next_time

Сказали же зачем. Чтобы избегать конфликта имён.

Как и любое другое решение, это размен. Теряешь немного в скорости вызова, функции не могут быть встроены (inline), зато имя для переменной, в которой лежат ссылки на функции, можно выбирать.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

писанины же больше: надо создать указатель, создать ф-цию, присвоить указателю ф-цию. ИМХО, оно того просто не стОит. тем более, что С используетсяя там, где «Теряешь немного в скорости вызова» бывает больно.

next_time ★★★★★
() автор топика
Ответ на: комментарий от next_time

писанины же больше: надо создать указатель, создать ф-цию, присвоить указателю ф-цию. ИМХО, оно того просто не стОит.

Из чего можно сделать вывод, что на Си ты пишешь мало. :-)

i-rinat ★★★★★
()
Ответ на: комментарий от next_time

чёй-то?

Не, function pointer правда нельзя кастовать в void*. У тебя может быть архитектура, где код лежит совершенно отдельно от данных.

proud_anon ★★★★★
()
Последнее исправление: proud_anon (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.