Tanımsız davranış

Bilgisayar programlamada, tanımsız davranış (), kaynak kodunun yazıldığı programlama dilinin dil belirtiminde davranışı öngörülemez olarak öngörülen bir programın yürütülmesinin sonucudur. Bu, dil belirtiminin bir sonuç öngörmediği belirtilmemiş davranıştan ve platformun başka bir bileşeninin (ABI veya çevirmen belgeleri gibi) belgelenmesine başvuran uygulama tanımlı davranıştan farklıdır.

C programlama topluluğunda, tanımsız davranışlar comp.std.c'de derleyicinin istediği her şeyi yapmasına, hatta "burnunuzdan şeytanlar uçmasına" bile izin veren tanımsız davranışların açıklanmasından sonra esprili bir şekilde "burun şeytanları" olarak adlandırılabilir.

 Örnekler 
C programlama dilindeki yaygın tanımsız davranışlar ise: sayı aşımı, bellek dışına okuma/yazma, bellek güvenliğine aykırı durumlar.

Düz dizenin değiştirilmesi tanımsız davranışa yol açar:ISO/IEC (2003). ISO/IEC 14882:2003(E): Programming Languages - C++ §2.13.4 String literals [lex.string] para. 2char *p = "vikipedi"; /* C programlama dilinde doğru, C++98/C++03'te kullanılmaması gerektiği belirtilmekte, C++11'den beri doğru bulunmaz */
p[0] = 'V'; /* tanımsız davranış zira düz dizeler sadece okunurdur */Bir tam sayının sıfırla bölünmesi tanımsız davranıştır:ISO/IEC (2003). ISO/IEC 14882:2003(E): Programming Languages - C++ §5.6 Multiplicative operators [expr.mul] para. 4int x = 1;
return x / 0; /* tanımsız davranış */Bazı işaretçi işlemleri tanımsız davranışla sonuçlanabilir:ISO/IEC (2003). ISO/IEC 14882:2003(E): Programming Languages - C++ §5.7 Additive operators [expr.add] para. 5int arr[4] = {0, 1, 2, 3};
int *p = arr + 5;  /* tanımsız davranış sınır dışına gitme */
p = NULL;
int a = *p;        /* tanımsız davranış NULL'un değerini öğrenmek */Negatif bir sayıya mantıksal işlemler (sol kaydırma) uygulama, bir veri tipinin bit sayısından fazla kaydırma:int x = -1 << 1;
/* 64 bit tam sayıyı 64 ile kaydırmak tanımsız davranıştır, maksimum 63 ile kaydırılabilir */
uint64_t vikipedi = 1ULL << 64;
return x;Değer döndürmesi gereken bir fonksiyonda değer döndürmemek:int f()
{
}  /* eğer fonksiyonun değeri kullanılır ise tanımsız davranış */

 Ayrıca bakınız 
 Derleyici

 Kaynakça 

Kategori:Programlama dili uygulaması
Kategori:C programlama dili
Kategori:C++