Это определенная часть языка C, обозначение функции (это то, что вы имеете, когда используете fun
в выражении), то есть , а не операнд sizeof
, _Alignof
или унарные - &
операторы вычисляют указатель на функцию.Таким образом, ваше объявление void (*fun_ptr)(int) = fun;
прекрасно.
fun
не может быть повторно использовано в качестве другого декларатора в области видимости файла, независимо от того, является ли это переменной или другой функцией. вы можете затенять его с помощью объявления переменной в области видимости блока, если хотите (это в равной степени относится и к объявлению переменной области файла).