Untuk pemahaman saya (terbatas - saya bukan C developer biasanya), ini berakar pada C. Ingat bahwa C tidak tahu apa itu kelas atau namespace, itu hanya satu program yang panjang. Selain itu, fungsi harus dideklarasikan sebelum Anda menggunakannya.
Misalnya, berikut ini akan memberikan kesalahan kompiler:
void SomeFunction() {
SomeOtherFunction();
}
void SomeOtherFunction() {
printf("What?");
}
Kesalahannya adalah "SomeOtherFunction tidak dideklarasikan" karena Anda memanggilnya sebelum deklarasinya. Salah satu cara untuk memperbaikinya adalah dengan memindahkan SomeOtherFunction di atas SomeFunction. Pendekatan lain adalah mendeklarasikan tanda tangan fungsi terlebih dahulu:
void SomeOtherFunction();
void SomeFunction() {
SomeOtherFunction();
}
void SomeOtherFunction() {
printf("What?");
}
Hal ini memungkinkan kompilator mengetahui: Lihat di suatu tempat di kode, ada fungsi bernama SomeOtherFunction yang mengembalikan void dan tidak mengambil parameter apa pun. Jadi jika Anda encouter kode yang mencoba memanggil SomeOtherFunction, jangan panik dan cari saja.
Sekarang, bayangkan Anda memiliki SomeFunction dan SomeOtherFunction dalam dua file .c yang berbeda. Anda kemudian harus #memasukkan "SomeOther.c" di Some.c. Sekarang, tambahkan beberapa fungsi "pribadi" ke SomeOther.c. Karena C tidak mengetahui fungsi privat, fungsi itu akan tersedia di Some.c juga.
Di sinilah File .h masuk: Mereka menentukan semua fungsi (dan variabel) yang ingin Anda 'Ekspor' dari file .c yang dapat diakses di file .c lainnya. Dengan begitu, Anda mendapatkan sesuatu seperti cakupan Publik / Pribadi. Selain itu, Anda dapat memberikan file .h ini kepada orang lain tanpa harus membagikan kode sumber Anda - file .h juga dapat digunakan pada file .lib yang dikompilasi.
Jadi, alasan utamanya adalah untuk kenyamanan, untuk perlindungan kode sumber dan untuk memiliki sedikit pemisahan antara bagian-bagian aplikasi Anda.
Itu C sekalipun. C ++ memperkenalkan Classes dan pengubah privat / publik, jadi meskipun Anda masih bisa menanyakan apakah mereka diperlukan, C ++ AFAIK masih memerlukan deklarasi fungsi sebelum menggunakannya. Juga, banyak Pengembang C ++ adalah atau merupakan pengembang C juga dan mengambil alih konsep dan kebiasaan mereka ke C ++ - mengapa mengubah apa yang tidak rusak?