Как избежать упоминания аргументов указателя функции внутри определения функции, которая принимает его в качестве аргумента?
Я пишу этот код C, который предполагает передачу множества указателей на функции, а иногда запись всех аргументов, которые принимает указатель на функцию при определении функции, которая принимает его в качестве аргумента, может значительно увеличить длину определения функции и, таким образом, уменьшить его читабельность. Например, скажем, у меня есть функция, которая принимает триint
s и указатель на функцию для выполнения определенной операции. Типичный способ объявления функции типа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);