SORU
1 AĞUSTOS 2014, Cuma


Eğer başlatıldı ise^bir ya da bir-bir tanımsız davranış mı?

Bu program göz önünde bulundurun:

#include <stdio.h>

int main(void)
{
    unsigned int a;
    printf("%u %u\n", a^a, a-a);
    return 0;
}

Onun davranışları tanımlanır?

Bunun karşısında, a . ilklenmemiş değişken. Bu tanımsız davranış gösteriyor. Ama a^a a-a a, Bu durumda bence en azından tüm değerler için 0 eşittir. Davranışları iyi tanımlanmış olduğunu iddia etmek için bir yol var olabilir mi?

CEVAP
1 AĞUSTOS 2014, Cuma


C11:

  • Eğer a asla onun adresi alınmış (aşağıda alıntı) 6.3.2.1/2'ye göre açıkça tanımlanmamış
  • Tuzak bir temsili erişilen İK neden olduğu olabilir. 6.2.6.1/5:

Belirli nesne temsilleri nesne türü değeri temsil etmesi gerekmez.

İmzasız in tuzak beyan (15 hassas ve biti 1 parite biti, a eşlik hatasına neden olabilir erişme varsa örneğin) olabilir.

6.2.4/6 ilk değer olduğunu söylüyorbelirsizve 3.19.2 altında tanımıdırya da belirsiz bir değer ya da tuzak bir temsili.

Daha: Pascal Cuoq tarafından işaret olarak C11 6.3.2.1/2, içinde:

Eğer lvalue olabilirdi otomatik depolama süresi bir nesneyi atar eğer register Depolama sınıfı (hiç adresini almıştı) ile ilan etmiş ve bu nesne başlatılmamış (bir başlatıcı ve hiçbir atama ile bildirilen değil önce kullanmak için) yapılan davranışı tanımlı değil.

Bu fıkra, önceki tartışma yerini görünecek karakter türleri için istisna yok; x erişim eğer kaçış için bir beyan varsa bile hemen tanımsızdır. Bu Madde 14* *kayıtları için tuzak bir devlet var aslında hangi Tabanlı İşlemcileri destekleyecek.


Tuzak beyan etmeden sistemleri:Ama 6.3.2.1/2 itirazını artık uygular &x; at ve tuzak olduğu bilinen bir sistemde isek ne beyan? O zaman değerdeğeri belirtilmemiş. Tanımıdeğeri belirtilmemiş3.19.3 biraz belirsiz, ancak varır DR 451 tarafından açıkça belirtilmiştir:

  • Açıklanan koşullar altında başlatılmamış bir değer onun değerini değiştirmek için görünebilir.
  • Herhangi bir işlem belirsiz değerleri üzerinde gerçekleştirilen bir sonucu olarak belirsiz bir değere sahip olacaktır.
  • Kütüphane fonksiyonları belirsiz değerleri kullanıldığında tanımsız davranış sergiler.
  • Bu cevaplar o tuzak sunumlarını yoktur tüm türleri için uygundur.

b int a; &a; int b = a - a; Bu karar sonuçlar hala belirsiz değeri olan altında.

Eğer belirsiz değer bir kütüphane işlevi geçirilir değil, hala belirlenemeyen bir davranış alanı (tanımsız davranış değil). Sonuçlar garip olabilir, *13 örneğin* foo diyebilir, ama iblisler burun boşluğuna yerleşmiş olmalıdır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
C

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 99being99

    99being99

    2 EYLÜL 2008
  • Cole Rolland

    Cole Rolland

    23 Kasım 2008
  • PlugResearch

    PlugResearch

    22 Mart 2006