Untuk menjawab pertanyaan, "apakah statik berarti hanya satu salinan VAL yang dibuat, jika header disertakan oleh lebih dari satu file sumber?" ...
TIDAK . VAL akan selalu didefinisikan secara terpisah di setiap file yang menyertakan header.
Standar untuk C dan C ++ memang menyebabkan perbedaan dalam kasus ini.
Di C, variabel cakupan file adalah eksternal secara default. Jika Anda menggunakan C, VAL bersifat statis dan ANOTHER_VAL bersifat eksternal.
Perhatikan bahwa penaut modern mungkin mengeluh tentang ANOTHER_VAL jika header disertakan dalam file berbeda (nama global yang sama ditentukan dua kali), dan pasti akan mengeluh jika ANOTHER_VAL diinisialisasi ke nilai yang berbeda di file lain
Dalam C ++, variabel cakupan file bersifat statis secara default jika konstanta, dan secara default eksternal jika tidak. Jika Anda menggunakan C ++, VAL dan ANOTHER_VAL bersifat statis.
Anda juga perlu memperhitungkan fakta bahwa kedua variabel ditetapkan sebagai konst. Idealnya kompilator akan selalu memilih untuk menyebariskan variabel-variabel ini dan tidak menyertakan penyimpanan apa pun untuknya. Ada banyak sekali alasan mengapa penyimpanan dapat dialokasikan. Yang terpikir olehku ...
- opsi debug
- alamat yang diambil dalam file
- kompiler selalu mengalokasikan penyimpanan (tipe const kompleks tidak dapat dengan mudah disisipkan, jadi menjadi kasus khusus untuk tipe dasar)