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

Я пишу этот код C, который предполагает передачу множества указателей на функции, а иногда запись всех аргументов, которые принимает указатель на функцию при определении функции, которая принимает его в качестве аргумента, может значительно увеличить длину определения функции и, таким образом, уменьшить его читабельность. Например, скажем, у меня есть функция, которая принимает триints и указатель на функцию для выполнения определенной операции. Типичный способ объявления функции типаfooэто что-то вроде:

      int foo(int a, int b, int c, int (*operation) (int, int, int));

Мне было интересно, есть ли способ избежать избыточности, связанной с повторным упоминанием типов переменных еще раз в типе указателя функции.

Ответ на этот вопрос предполагает, что можно использовать только пустые круглые скобки.(), что в приведенном выше примере переводится как:

      int foo(int a, int b, int c, int (*operation) ());

Однако в комментарии к тому же сообщению говорится, что такой синтаксис будет удален в C23:

В качестве примечания: это устаревший язык C с 1989 года. Пустую скобку () ни в одном стиле прототипа использовать нельзя. И его наконец-то уберут в предстоящем C23.

1 ответ

Итак, просто создайте псевдоним. Мне нравятся псевдонимы функций, а не псевдонимы указателей функций, так что я знаю, что это указатель.

      typedef int operation_t(int, int, int);
int foo(int a, int b, int c, operation_t *operation);
Другие вопросы по тегам