Untuk pemirsa pertanyaan ini di masa depan, saya ingin menunjukkan bahwa Anda harus menghindari apa yang disarankan oleh monkey0506 .
File header adalah untuk deklarasi.
File header dikompilasi satu kali untuk setiap .cpp
file yang secara langsung atau tidak langsung #includes
, dan kode di luar fungsi apa pun dijalankan pada inisialisasi program, sebelumnya main()
.
Dengan memasukkan: foo::i = VALUE;
ke dalam header, foo:i
akan diberikan nilai VALUE
(apa pun itu) untuk setiap .cpp
file, dan penugasan ini akan terjadi dalam urutan yang tidak ditentukan (ditentukan oleh tautan) sebelum main()
dijalankan.
Bagaimana jika kita #define VALUE
menjadi nomor yang berbeda di salah satu .cpp
file kita ? Ini akan dikompilasi dengan baik dan kita tidak akan tahu mana yang menang sampai kita menjalankan program.
Jangan pernah memasukkan kode yang dieksekusi ke header karena alasan yang sama bahwa Anda tidak pernah #include
memiliki .cpp
file.
termasuk penjaga (yang saya setuju Anda harus selalu gunakan) melindungi Anda dari sesuatu yang berbeda: header yang sama secara tidak langsung #include
d beberapa kali saat mengkompilasi satu .cpp
file