LINUX.ORG.RU

Присваивание коллбэк функции

 


0

1

Какой из вариантов правильнее? gcc не ругается ни на какой.

#include <stdio.h>

typedef int (* Tcallback)(int);

int cb1(int a)
{
    printf("%d\n", a);
    return a;
}

Tcallback cbv;

int main()
{
    cbv = &cb1; // 1
    cbv(5);
    cbv = cb1;  // 2
    cbv(5);
    return 0;
}


★★

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

Правильнее - первый. Второй оставлен для обратной совместимости.

// А ещё можно писать *cb1 и даже *****cb1.

E ★★★
()

б-ги... когда вымрут все безграмотные, не умеющие читать стандарт, гуглить?..

anonymous
()

Я за второй.

FIL ★★★★
()

второй выглядет более логичным, учитывая что и «cbv» и «cb1» — оба являются адресами, указывающими на функцию

user_id_68054 ★★★★★
()

Первый. Вызываемое (функция) и указатель на функцию неявно кастятся друг к другу, но при этом cb1 является в первую очередь вызываемым, а cbv — указателем.

vzzo ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.