logo

Derleme zamanı ve Çalışma Zamanı karşılaştırması

Derleme zamanı ve Çalışma Zamanı, yazılım geliştirmede kullanılan iki programlama terimidir. Derleme zamanı, kaynak kodun çalıştırılabilir bir koda dönüştürüldüğü zamandır, çalışma zamanı ise yürütülebilir kodun çalışmaya başladığı zamandır. Hem derleme zamanı hem de çalışma zamanı farklı hata türlerini ifade eder.

dize tarihini dönüştür

Derleme zamanı hataları

Derleme zamanı hataları, yanlış söz dizimini yazdığımızda ortaya çıkan hatalardır. Herhangi bir programlama dilinin sözdizimi veya anlambilimini yanlış yazarsak, derleyici tarafından derleme zamanı hataları atılır. Derleyici, programdaki tüm hatalar giderilene kadar programın çalıştırılmasına izin vermeyecektir. Programdaki tüm hatalar giderildiğinde, derleyici yürütülebilir dosyayı oluşturacaktır.

Derleme zamanı hataları şunlar olabilir:

  • Sözdizimi hataları
  • Anlamsal hatalar

Sözdizimi hataları

Programcı herhangi bir programlama dilinin sözdizimini takip etmediğinde derleyici sözdizimi hatası verecektir.

Örneğin,

int a, b:

Yukarıdaki bildirim, C'deki gibi derleme zamanı hatası üretir, her ifade noktalı virgülle biter, ancak ifadenin sonuna iki nokta üst üste (:) koyarız.

Anlamsal hatalar

İfadeler derleyici için anlamlı olmadığında anlamsal hatalar ortaya çıkar.

Örneğin,

a+b=c;

Yukarıdaki ifade derleme zamanı hataları veriyor. Yukarıdaki ifadede 'a' ve 'b' toplamına 'c' değerini atamaktayız ki bu C programlama dilinde atama operatörünün sağında sadece bir değişken içerebildiği için mümkün değildir. Atama operatörü birden fazla değişken içerebilir.

Yukarıdaki ifade şu şekilde yeniden yazılabilir:

c=a+b;

roma rakamları 1-100

Çalışma zamanı hataları

Çalışma zamanı hataları, yürütme sırasında ve derleme sonrasında ortaya çıkan hatalardır. Çalışma zamanı hatalarına örnek olarak sıfıra bölme vb. gösterilebilir. Derleyici bu hataları göstermediğinden bu hataların tespit edilmesi kolay değildir.

Bazı tipik C'leri inceleyelim çalışma zamanı hatası türleri, vakalar ve bunların olası etkileri.

Sıfıra bölüm:

Sıfıra bölme olduğundan matematiksel olarak tanımlanamaz , bir tamsayıyı bölmeye çalışırken sıfır bir şeye yol açar çalışma hatası . Bu hata programın çökmesine veya bir istisna oluşturmasına neden olur. İşte bir örnek:

 #include int main() { int a = 10; int b = 0; int result = a / b; // Division by zero printf('Result: %d
', result); return 0; } 

Çıktı:

 Floating point exception (core dumped) 

Açıklama:

A 'Kayan nokta istisnası' hata mesajı, program sıfıra bölme nedeniyle çalışma zamanı sorunuyla karşılaştığında üretilir.

Dizinin Sınır Dışında Erişimi:

A çalışma hatası bir dizi öğesine belirli sınırların dışında erişildiğinde meydana gelir. Bir dizin dizinin boyutundan daha büyük olduğunda ve bellek erişim yasaları ihlal edildiğinde bir hata meydana gelir. İşte bir örnek:

 #include int main() { int arr[5] = {1, 2, 3, 4, 5}; int index = 10; int value = arr[index]; // Accessing array out of bounds printf('Value: %d
', value); return 0; } 

Çıktı:

 Segmentation fault (core dumped) 

Açıklama:

Buradaki eleman dizin 10 program ona erişmeye çalıştığında dizinin sınırlarının dışındadır. Sonuç olarak, bir segmentasyon hatası meydana geliyor ve program bir hatayla sonlanır.

Boş İşaretçi Referansı:

A çalışma hatası erişmeye çalıştığınızda olur boş işaretçinin hafızası olarak bilinen adres referanstan arındırma bir boş işaretçi. Boş işaretçilere erişim, öngörülemeyen davranışlara neden olur çünkü bunlar işaret etmez meşru hafıza konumları . İşte bir örnek:

Java dizi dilimi
 #include int main() { int* ptr = NULL; // Null pointer int value = *ptr; // Null pointer dereference printf('Value: %d
', value); return 0; } 

Çıktı:

java dizesine sayı
 Segmentation fault (core dumped) 

Açıklama:

girişimi kayıtsızlık bir boş gösterici şununla sonuçlanır: Segmentasyon hatası bu da programın bir hata mesajı vererek çökmesine neden olur.

Yığın Taşması:

A yığın taşması çağrı yığını amaçlanandan daha büyük olduğunda meydana gelir ve işlev çağrıları hakkında bilgi içerir. Bir sonsuz yineleme genellikle özyinelemeli işlevler uygun sonlandırma ölçütlerinden yoksun olduğunda ortaya çıkar. İşte bir örnek:

 #include void recursiveFunction() { recursiveFunction(); // Recursive call without termination condition } int main() { recursiveFunction(); return 0; } 

Çıktı:

 Segmentation fault (core dumped) 

Açıklama:

Program başlar sonsuz yineleme yığının taşmasına ve bölümleme hatasına neden olur.

Kullanılmayan değişkenler:

Çünkü başlatılmamış değişkenler sahip olmak tanımlanmamış değerler bunların kullanılması çalışma zamanı hatalarına neden olabilir. Program, duruma bağlı olarak şaşırtıcı sonuçlar verebilir veya çökebilir. İşte bir örnek:

 #include int main() { int uninitializedVariable; printf('Value: %d
', uninitializedVariable); // Using uninitialized variable return 0; } 

Çıktı:

 Some random value (varies each time) 

Açıklama:

Bu örnekte, bir değeri başlatılmamış değişken o değişkene atanan hafıza bölgesinden rastgele seçilen herhangi bir rastgele değer olabilir.

Derleme zamanı ile çalışma zamanı arasındaki farklara bakalım:

Derleme zamanı Çalışma süresi
Derleme zamanı hataları, derleme zamanında üretilen ve derleyici tarafından tespit edilen hatalardır. Çalışma zamanı hataları, derleyici tarafından üretilmeyen ve yürütme zamanında öngörülemeyen bir sonuç üreten hatalardır.
Bu durumda derleyici programda bir hata tespit ederse kodun yürütülmesini engeller. Bu durumda derleyici hatayı tespit edemediğinden kodun yürütülmesini engelleyemez.
İfadenin sonundaki noktalı virgülün eksik olması gibi sözdizimi ve anlamsal hataları içerir. Negatif bir sayının karekökünü bulma, sıfıra bölme gibi hataları içerir.

Derleme zamanı hatası örneği

 #include int main() { int a=20; printf('The value of a is : %d',a): return 0; } 

Yukarıdaki kodda 'a' değerini yazdırmaya çalıştık ancak hata veriyor. İfadenin sonuna noktalı virgül yerine iki nokta üst üste koyarız, böylece bu kod derleme zamanı hatası oluşturur.

dizeyi tam sayıya dönüştür

Çıktı

Derleme zamanı ve Çalışma Zamanı karşılaştırması

Çalışma zamanı hatası örneği

 #include int main() { int a=20; int b=a/0; // division by zero printf('The value of b is : %d',b): return 0; } 

Yukarıdaki kodda 'b' değerini sıfıra bölmeye çalışıyoruz ve bu bir çalışma zamanı hatası veriyor.

Çıktı

Derleme zamanı ve Çalışma Zamanı karşılaştırması

Çözüm:

Sonuç olarak dönemler yazılım geliştirme olarak bilinir Derleme zamanı Ve çalışma zamanı hataları ayrıdır ve her birinin benzersiz bir dizi özelliği vardır hatalar bu meydana gelebilir. Derleme zamanı hataları derleme adımı sırasında kod çalıştırılabilir forma dönüştürüldüğünde meydana gelir. Bu hatalar şunları içerir: anlamsal hatalar , üreten mantıksız veya saçma kod , Ve sözdizimi hataları programlama dilinin yasalarına aykırıdır. Bu hatalar şu şekilde tanımlanır: derleyici ve rapor edildi, infazın engellenmesi düzeltilene kadar kodun.

Diğer taraftan, çalışma zamanı hataları Bir program çalışırken meydana gelir ve derleyici tarafından yakalanmaz. Aşağıdakiler de dahil olmak üzere çeşitli koşullardan kaynaklanabilirler: sıfıra bölme, hatalı hafıza erişimi veya diğer öngörülemeyen olaylar. Çalışma zamanı hataları Sık sık program çökmelerine veya beklenmeyen davranışlara neden oldukları için keşfedilmeleri ve hata ayıklamaları daha zordur. Geliştiriciler, çalışma zamanı hatalarını zarif bir şekilde yönetmek ve programın kararlılığını garanti etmek için hata işleme teknikleri beğenmek istisna işleme .