По-видимому, законно написать:
extern "C" typedef int foo_func(int);
Однако, если я использую этот typedef для объявления функции, например:
foo_func foo;
будет foo() иметь C-связь
foo()
В стандарте есть пример (и , повторяемый для cppreference , который охватывает это. Имя foo будет иметь связь C ++, а его тип - функция C.
foo