Soruyu yanıtlamak için, "Statik, üstbilginin birden fazla kaynak dosya tarafından dahil edilmesi durumunda VAL'nin yalnızca bir kopyasının oluşturulduğu anlamına mı gelir?" ...
HAYIR . VAL, başlığı içeren her dosyada her zaman ayrı olarak tanımlanacaktır.
C ve C ++ standartları bu durumda bir farklılığa neden olur.
C'de, dosya kapsamlı değişkenler varsayılan olarak externdir. C kullanıyorsanız, VAL statiktir ve ANOTHER_VAL haricidir.
Modern bağlayıcıların, başlık farklı dosyalara dahil edilirse (aynı genel ad iki kez tanımlanır) ANOTHER_VAL hakkında şikayet edebileceğini ve ANOTHER_VAL başka bir dosyada farklı bir değere başlatıldığında kesinlikle şikayet edebileceğini unutmayın.
C ++ 'da, dosya kapsamlı değişkenler, sabit ise varsayılan olarak statiktir, değilse varsayılan olarak extern'dir. C ++ kullanıyorsanız, hem VAL hem de ANOTHER_VAL statiktir.
Ayrıca, her iki değişkenin de sabit olarak tanımlandığını dikkate almanız gerekir. İdeal olarak, derleyici her zaman bu değişkenleri satır içi yapmayı seçer ve onlar için herhangi bir depolama alanı içermez. Depolamanın tahsis edilebilmesi için birçok neden vardır. Aklıma gelenler ...
- hata ayıklama seçenekleri
- dosyada alınan adres
- derleyici her zaman depolama alanı ayırır (karmaşık sabit türleri kolayca satır içine alınamaz, bu nedenle temel türler için özel bir durum haline gelir)