質問の意味を誤解して回答してしまったかもしれません。
質問の「externで宣言しなくても」というのを、
コード:
extern void sub();
int main()
{
sub();
return 0;
}
を
コード:
void sub();
int main()
{
sub();
return 0;
}
と書いてもコンパイルできたと言っているのだと解釈していました。
これは、C でも C++ でも同じです。
ところが、C では、
コード:
int main()
{
sub();
return 0;
}
と書いてもコンパイルできます。C++ではできません。
そういう質問だったのでしょうか?
C(++)言語という曖昧な表記ではなく、
具体的なコードで、質問してもらいたかったと思います。