SORU
7 Mart 2010, Pazar


Tanımsız ve tanımlı uygulama davranışı belirtilmemiş

C ve C tanımsız, belirsiz ve tanımlı uygulama davranış arasındaki fark nedir ?

CEVAP
5 Kasım 2010, Cuma


Tanımsız davranışo bir programcı diğer dilleri (diğer dilleri daha iyi gizlemek için deneyin) gelen şaşırtıcı olabilir C ve C dili yönleri vardır. Temelde, mümkün olan çok sayıda C derleyicileri programda herhangi bir hata raporu, üstelik bir de tahmin edilebilir bir şekilde davranırlar, C programları yazmak için!

Klasik bir örneğe bakalım:

#include <iostream>

int main()
{
    char* p = "hello!\n";   // yes I know, deprecated conversion
    p[0] = 'y';
    p[5] = 'w';
    std::cout << p;
}

Değişken p puan dize ** 3, ve iki ödev aşağıda değişmez bu dize değiştirmek için deneyin. Bu program ne işe yarıyor? C standardı, paragraf 11 bölüm 2.14.5 göre çağırırtanımsız davranış:

Bir dize değiştirme girişiminde etkisi, tanımlanmamış.

Duyuyorum insanlar çığlık "Ama bekle, ben derleme bu sorun ve çıkış yellow" ya da "Ne demek, tanımlanmamış, dize hazır saklanır salt okunur bellek, yani ilk atama girişimi sonuçlarında bir çekirdek dökümü". Bu tam olarak tanımlanmamış bir davranış sorunu. Temel olarak, standart tanımsız davranış (bile burun şeytanlar) çağırmak bir kez bir şey olmasını sağlar. Eğer bir "davranış" dilin zihinsel modele göre, bu model yanlıştır; C standart tek oy hakkı vardır, nokta. doğru ise orada

Tanımsız davranış başka örnekler kendi sınırları, dereferencing the null pointer, accessing objects after their lifetime ended ötesinde bir dizi erişim veya i i allegedly clever expressions yazı vardır.

C standardının madde 1.9 da tanımlanmayan bir davranış daha az tehlikeli iki kardeş, bahsederbelirlenemeyen bir davranışveuygulama tanımlı bir davranış:

Bu Uluslararası Standart anlam açıklamaları parametreli belirleyici olmayan soyut bir makine olarak tanımlayın.

Soyut makine belirli yönlerini ve işlemleri bu Uluslararası Standart olarak tarif ediliruygulama tanımlı(örnek, sizeof(int)). Bu soyut makine parametrelerini oluşturmaktadır. Her uygulama belgelerine bu bakımdan özelliklerini ve davranışını açıklayan içerir.

Soyut makinenin bazı yönleri ve işlemleri bu Uluslararası Standart olarak tarif edilirbelirtilmemiş(örneğin, bir işlev için bağımsız bir değerlendirme) sipariş. Mümkünse, bu Uluslararası Standart izin verilen davranışlar kümesini tanımlar. Bu soyut makinenin belirleyici olmayan yönlerini tanımlayın.

Diğer bazı işlemleri bu Uluslararası Standart olarak tarif edilirtanımsız(örneğin, bir null işaretçi kaldırma etkisi). [Not:bu Uluslararası Standart tanımsız davranış içeren program davranışı üzerinde hiçbir gereksinimleri empoze.not end]

Özellikle, bölüm 1.3.24 Birleşik Devletleri:

Caiz tanımsız davranış değişirolayı tamamen öngörülemeyen sonuçları görmezden geliyorsun, davranış sırasında çeviri veya program yürütme bir şekilde belgelenmiş karakteristik çevresi (ile veya olmadan verildiği bir tanılama iletisi), sonlandırıcı bir çeviri ya da yürütme ile sanayi üretimi, bir tanılama iletisi).

Tanımsız davranış içine çalışan önlemek için ne yapabilirim? Temelde, ne konuştuğunu bilen yazarlar tarafından good C books okuman gerekiyor. Internet öğreticiler vida. Vida bullschildt.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BDGcustoms

    BDGcustoms

    24 NİSAN 2011
  • macpulenta

    macpulenta

    9 EYLÜL 2006
  • picster

    picster

    20 NİSAN 2006