Функция typedef и вызов функции из структуры в C - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь выяснить следующий код. Особенно часть, которая относится к функции typedef.

#include <stdio.h>
void foo1(int var1, int var2); // foo1 decleration
typedef void (foo2)(int var1, int var2); // what is this exactly?

typedef struct somestruct{
    foo2* somefunc;
}SOMESTRUCT;

int main()
{
    SOMESTRUCT struct1;
    struct1.somefunc = &foo1; 
    struct1.somefunc(1,5);
    return 0;
}

void foo1(int var1, int var2){
    printf("this is function inside struct var1 = %d var2 = %d",var1, var2);
}

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Объяснение Тима Рэндалла довольно хорошее, но позвольте мне добавить это.

Ключевое слово typedef определяет новый тип данных, который можно использовать вместо его первоначальных определений. Если вы не хотите использовать typedef, структура может быть определена как:

typedef struct somestruct{
    void(*somefunc)(int a,int b);
}SOMESTRUCT;

В этом случае мы не много экономим, но если у нас было более одного указателя на функцию, использование typedef немного экономит и облегчает чтение программы.

0 голосов
/ 07 ноября 2018

Линия ...

typedef void (foo2)(int var1, int var2); // what is this exactly?

... объявляет новый тип foo2 как функцию, которая принимает два параметра int и возвращает void.

Позже в коде адрес функции foo1 (которая соответствует сигнатуре функции) сохраняется в somefunc члене struct1, а затем вызывается. с параметрами 1 и 5.

...