İşaretçi sürekli geçici olarak ilan etti
Okurken bildirimi ve aşağıdaki satırı - bu tür rastladım
const volatile char *p=(const volatile char *) 0x30;
P değeri dış koşullar tarafından değiştirilir
Ne dış koşullar anlamıyorum. Ve ayrıca bu tip pratik kullanımbeyannamesi?
CEVAP
const
program akışı p
ile işaret ne değişiklik olmadığını söyledi. İşaretçi kaldırma sonra değeri değiştirmek için herhangi bir girişim, bir derleme zamanı hatası neden olur:
*p = 'A'; // will not compile
Bu özellikle güçlü bir sözleşme değil, unutmayın; bir yerde değeri 0x30
hala olmayan sabit aliasing bir işaretçi, p
Diğer ile değiştirilebilir:
volatile char *q = 0x30;
*q = 'A'; // will compile
Bu Sözleşme kırmak için başka bir yol p
12 *döküm uzakta
*(volatile char *) p = 'A'; // will compile
Başka bir iş parçacığı, çekirdek, asenkron sinyal işleyicisi veya aynı bellek alanı erişimi olan bir harici bir cihaz neden olabilir volatile
ancak, herhangi bir değişiklik dışında bırakmaz. Bu şekilde derleyici olamaz değeri p
ile gösterilen ve her zaman başvurulan bellekten yükle: değişmeyen yanlış varsayım yapmak
/*
The character at 0x30 will be read on every iteration,
even if the compiler has proven that the program itself
doesn't modify the value at that address.
*/
while (*p) {
...
}
Eğer derleyici yanlışlıkla optimize böyle bir yapı olsaydı, değeri sadece bir kez bellekten yük olan talimatlar yayarlar ve bir kayıt tutmak olabilir. Kayıt aslında bağımsız bir kopya ve orijinal konumuna herhangi bir değişiklik yok yansımaz, ve, söylemeye gerek yok, bu çok kötü bazı hatalar neden olabilir.
Nakavt Görünüm Modelleri arasındaki fa...
Geçici olarak devre dışı auto_now / au...
Nasıl geçici olarak vim çıkmak ve geri...
&; Güvenli olmayan JavaScript URL ile ...
Kullanarak bir IIS Web sitesi (geçici ...