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