Saya mungkin tidak akan mengatakan tidak pernah, tetapi pernyataan yang menghasilkan data dan kode seperti diuraikan seharusnya tidak dalam file .h.
Makro, fungsi inline, dan templat mungkin terlihat seperti data atau kode, tetapi makro tidak menghasilkan kode saat diuraikan, tetapi saat digunakan. Barang-barang ini sering perlu digunakan di lebih dari satu .c atau .cpp, sehingga barang-barang tersebut termasuk dalam .h.
Dalam pandangan saya, file header harus memiliki antarmuka praktis minimum untuk .c atau .cpp yang sesuai. Antarmuka dapat mencakup # definisi, kelas, typedef, definisi struktur, prototipe fungsi, dan definisi eksternal yang kurang disukai, untuk variabel global. Namun, jika deklarasi hanya digunakan dalam satu file sumber, itu mungkin harus dikecualikan dari .h dan terkandung dalam file sumber sebagai gantinya.
Beberapa mungkin tidak setuju, tetapi kriteria pribadi saya untuk file .h adalah bahwa mereka # mencantumkan semua file .h lain yang mereka butuhkan untuk dapat dikompilasi. Dalam beberapa kasus, ini bisa menjadi banyak file, jadi kami memiliki beberapa metode yang efektif untuk mengurangi dependensi eksternal seperti meneruskan deklarasi ke kelas yang memungkinkan kami menggunakan pointer ke objek kelas tanpa menyertakan apa yang bisa menjadi pohon besar file include.