2016-04-10 21 views
1

Bir C derleyicisi statik bir const değişkenini belleğe yerleştirmek zorunda mıdır veya başvurulan başvuru sırasında derhal komut işleneni olarak kullanılmasına izin veriliyor mu?C derleyicisi, statik bir sabit bellek yerleştirmek zorunda mı?

+3

İki sorununun, ikisi de "const" anahtar sözcüğünü içermesinin dışında, birbiriyle ilgisiz görünüyor. – hvd

+0

Neden bir statik durum int i = 5 'dış bağlantı olurdu C – tofro

+1

@tofro statik const harici bağlantı olmayacak, ancak varsayılan bağlantı c ve C++' da farklı olduğunu belirtiyorsunuz. const int i = 5; varsayılan olarak C++ ve harici bağlantıda c. – mrn

cevap

3

Hayır, aksi halde söylemediğiniz sürece olmaz. Sabitleyiciyi, montajcı talimatlarındaki gerçek (anlık) değerler olarak çok iyi kullanabilir. ilan ve/veya dereferencing yani kullanarak: ("Biz onu değişmez, ama başkası olabilir" derleyici söylemek)

    • const volatile ilan olabileceğini aksi söylemek explicitely const
  • +0

    Plus Eklentisini kullanarak. – EJP

    +4

    "' const'ı programınızdaki bir “non-'const” 'a dönüştürmek, aksi halde anlatmanın bir örneği değildir. Nesneyi değiştirmek için bir girişimde bulunursa, davranış basitçe tanımsızdır. Derleyicileri, izin vermek veya desteklemek için hiçbir yükümlülük altına girmez ve pek çoğu, nesneyi salt okunur bir bellek bölümüne yerleştirerek değildir. – hvd

    +0

    üzerinde anlaşılan, değiştirilmiş – tofro

    1

    AC derleyici şey koymak zorunda değildir değil const için işaretçi bellekte. & derleyicisinin & derleyicisinden static olmayan, & derleyicisinin bile dışardan referans alınamayacağı (ya da adresinin içsel olarak istendiği, örneğin & operatörünün kullanılması gibi) olabileceği kanıtlanmalıdır. değeri, öngörülemeyen koşullara (kullanıcı girişi gibi) bağlı değildi.

    Modern C veya C++ derleyici yanıltıcı yoksul tanıtım kitaplarında gelen açıklamalar tipik düşük seviyeli "Programınız böyle işlediğini" neden olan bu tür optimizasyon agresif gerçekleştirir ve biz anlambilim tartışmak neden Bu dillerden biri, kullanıcının bir düğmeye bastığı zaman hangi RAM parçasının üzerine takılmasından ziyade, teorik/soyut terimlerle.

    Bu en iyileştirmeye nasıl izin verildiği ile ilgili olarak, "as-if" kuralına bakın.

    +0

    Tüm doğru, ancak soru (biraz akıllıca), C ve C++ arasındaki const semantiği arasındaki farkla ilgili gibi görünüyor.C++ 'da, temel sayısal bir türün bir yapısı, adresi açıkça alınmadıkça saklanmaya sahip değildir. Bu, bir harf sabiti gibi davranır; bu nedenle, örneğin, C dilinde yasa dışı olan etiketler ve dizi boyutlarında kullanılabilir. Kavramsal olarak en az bir C const adresi hiçbir zaman alınmamış olsa bile, depolama alanına sahiptir ve bir değişmez ile değiştirilemez (dolayısıyla, kapsam kısıtlaması olmayan ve örtülü bir türe sahip ön işlemci tanımlanmış sembollerin daha fazla kullanımı). – Clifford

    +0

    @Clifford Evet, sorum şu yazdıklarınla ​​ilgili. – mrn

    İlgili konular