Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

Как работает typedef в этом коде?

#функции #typedef #cpp


#include 
using namespace std;

typedef int (*func)(int a, int b);

int call_func(int a, int b)
{
    return a + b;
}

void function(int a, int b, func f);

int main ()
{

    function(5, 2, &call_func);
    system("pause");
}

void function(int a, int b, func f)
{
    int sum = (*f)(a, b);
    std::cout << "Sum = " << sum << std::endl;
}

typedef вводит новое имя для типа, и примеры вида typedef int int32 думаю понятны
любому. Ну а что с typedef int (*func)(int a, int b); в этом коде, он же должен вместо
func f подставить int (int a, int b) f, а подставляет int f(int a, int b), хотя я не
только это не понимаю, а и то, откуда он знает что заменять нужно func, ведь это неполный
тип или имя. Описание typedef в интернете заканчиваются на typedef int int32 или же
просто с примером структур и функций или ещё каких сложных типов, но без объяснений.
Я уже не знаю что думать, с дефайном было как-то проще.    


Ответы

Ответ 1



typedef -- не просто текстовая подстановка. Он работает следующим образом: если X -- имя typedef-типа, объявление переменной X x; работает как будто бы на этом месте стоит описание типа в typedef, где X заменено на x. То есть typedef int (*func)(int a, int b); func f; работает как int (* /*было func, стало*/ f )(int a, int b);

Комментариев нет:

Отправить комментарий