#include <stdio.h>

int hoge() {}
int hoge;

int main(void)
{
return 0;
}

これでエラーが起きるのは、
同一のメモリ領域にhoge()の実態のアドレスを指すhogeが暗黙的に定数(書き換えできない変数?)として存在しているから。
という理解でいいでしょうか?