Страницы

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

вторник, 14 мая 2019 г.

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

#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 или же просто с примером структур и функций или ещё каких сложных типов, но без объяснений. Я уже не знаю что думать, с дефайном было как-то проще.


Ответ

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

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

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