Для чего писать typedef в объявлении указателя на функцию?

typedef int(*Message)(const char* message);

Для чего в таких случая писать typedef?Почему нельзя без него,ведь в таком случае мы так же объявим указатель на функцию?Что происходит при данном обьявлении?


Ответы (2 шт):

Автор решения: AlexGlebe

Всё как и положено, typedef - объявляет тип, а без него будет переменная (указателя на функцию).

typedef int(*Message)(const char* message);
// Message - это тип указателя на функцию
int me(const char* message){return 0 ;}
// переменной заданного типа назначаю адрес реальной функции me
Message m = & me ;
Message m2 = me ;
// mep - это указатель на функцию
int (*mep)(const char* message) = & me;
// этому казателю присвоен адрес функции
int rp = (*mep)("");
int rp2 = mep("");
→ Ссылка
Автор решения: dIm0n

Думаю, так станет понятно:

#include <type_traits>

typedef int(*Message)(const char* message); // алиас для типа
int (*message)(const char* message);        // объявление указателя

static_assert(std::is_same_v<Message, int (*) (const char*)>);
static_assert(std::is_same_v<decltype(message), int (*) (const char*)>);

Message message_2 = message;

int main() {
    message = message_2;
}

Также, возможно, будут полезны ответы на Как прочесть запись функции с указателем.

→ Ссылка