Есть ли цель определения типа функции в C, кроме использования с указателем на функцию? - PullRequest
0 голосов
/ 03 марта 2019

Следующий код действителен C:

typedef int math_op(int, int); // Function type definition

Единственный раз, когда я когда-либо видел тип функции, объявленный и затем использованный, это в случае, когда мы делаем оператор, подобныйследующее:

math_op *mOp = add;

, где add может быть:

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

Следующие компиляции также с учетом первоначального объявления: math_op mOp;

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

Мой вопрос, есть ли другие использование для функции typedef помимо использования ее в качестве указателя на функцию типа этого?Обратите внимание, что я уже знаю об альтернативном синтаксисе типа указателя на функцию typedef int (*math_op)(int,int);, который создает указатель на функцию типа, тогда как мой оригинальный синтаксис выше создает тип функции , на который мы позже укажем.

1 Ответ

0 голосов
/ 03 марта 2019

Согласно clang:

ошибка: необъектный тип 'math_op' (он же int (int, int) ') не может быть назначен: math_op tee = 0;

Так что это действительно ограничивает наши возможности.

Единственное, что я могу найти - это если вы хотите переслать объявление группы функций с одинаковой сигнатурой типа.Это, вероятно, не очень хорошая идея и, вероятно, увеличит WTF / строку вашего кода.

math_op tee;
int tee (int x, int y) {
    return x + y;
} 
...