Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ข้อผิดพลาดใน C/C++


ใน C หรือ C++ เราพบข้อผิดพลาดประเภทต่างๆ ข้อผิดพลาดเหล่านี้สามารถแบ่งออกเป็นห้าประเภทที่แตกต่างกัน เหล่านี้เป็นเหมือนด้านล่าง −

  • ข้อผิดพลาดทางไวยากรณ์
  • ข้อผิดพลาดรันไทม์
  • ข้อผิดพลาดของตัวเชื่อมโยง
  • ข้อผิดพลาดทางตรรกะ
  • ข้อผิดพลาดทางความหมาย

ให้เราดูข้อผิดพลาดเหล่านี้ทีละตัว -

ข้อผิดพลาดทางไวยากรณ์

ข้อผิดพลาดประเภทนี้เกิดขึ้นเมื่อละเมิดกฎของเทคนิคหรือไวยากรณ์การเขียน C++ ข้อผิดพลาดประเภทนี้โดยทั่วไปจะระบุโดยคอมไพเลอร์ก่อนการคอมไพล์ บางครั้งสิ่งเหล่านี้เรียกว่าข้อผิดพลาดในการคอมไพล์

ในตัวอย่างนี้ เราจะเห็นวิธีรับข้อผิดพลาดทางไวยากรณ์หากเราไม่ใส่เครื่องหมายอัฒภาคหลังหนึ่งบรรทัด

ตัวอย่าง

#include<stdio.h>
main() {
   printf("Hello World")
}

ผลลัพธ์

Error] expected ';' before '}' token

ข้อผิดพลาดรันไทม์

ข้อผิดพลาดประเภทนี้เกิดขึ้นเมื่อโปรแกรมทำงาน เนื่องจากนี่ไม่ใช่ข้อผิดพลาดในการรวบรวม ดังนั้นการคอมไพล์จะทำได้สำเร็จ เราสามารถตรวจสอบข้อผิดพลาดนี้ได้หากเราพยายามหารตัวเลขด้วย 0

ตัวอย่าง

#include<stdio.h>
main() {
   int x = 52;
   int y = 0;
   printf("Div : %f", x/y);
}

ผลลัพธ์

Program crashes during runtime.

ข้อผิดพลาดของตัวเชื่อมโยง

ข้อผิดพลาดประเภทนี้เกิดขึ้นเมื่อคอมไพล์โปรแกรมสำเร็จ และพยายามเชื่อมโยงไฟล์อ็อบเจ็กต์อื่นกับไฟล์อ็อบเจ็กต์หลัก เมื่อเกิดข้อผิดพลาดนี้ ไฟล์เรียกทำงานจะไม่ถูกสร้างขึ้น ตัวอย่างเช่น การสร้างต้นแบบฟังก์ชันที่ไม่ถูกต้อง ไฟล์ส่วนหัวที่ไม่ถูกต้อง เป็นต้น หาก main() ถูกเขียนเป็น Main() จะทำให้เกิดข้อผิดพลาดที่เชื่อมโยง

ตัวอย่าง

#include<stdio.h>
main() {
   int x = 52;
   int y = 0;
   printf("Div : %f", x/y);
}

ผลลัพธ์

C:\crossdev\src\mingw-w64-v3-git\mingw-w64-crt\crt\crt0_c.cundefined reference to `WinMain'

ข้อผิดพลาดทางตรรกะ

บางครั้งเราอาจไม่ได้ผลลัพธ์ที่ต้องการ หากไวยากรณ์และสิ่งอื่น ๆ ถูกต้อง เราอาจไม่ได้ผลลัพธ์ที่ถูกต้องเนื่องจากปัญหาเชิงตรรกะบางอย่าง สิ่งเหล่านี้เรียกว่าข้อผิดพลาดเชิงตรรกะ บางครั้ง เราใส่เครื่องหมายอัฒภาคหลังลูป ซึ่งถูกต้องตามหลักไวยากรณ์ แต่จะสร้างลูปว่างขึ้นมาหนึ่งวง ในกรณีนั้นจะแสดงผลลัพธ์ที่ต้องการ

ตัวอย่าง

#include<stdio.h>
main() {
   int i;
   for(i = 0; i<5; i++); {
      printf("Hello World");
   }
}

ผลลัพธ์

Here we want the line will be printed five times. But only one time it will be printed for the block of code.

ข้อผิดพลาดทางความหมาย

ข้อผิดพลาดประเภทนี้เกิดขึ้นเมื่อถูกต้องตามวากยสัมพันธ์แต่ไม่มีความหมาย นี่เป็นเหมือนความผิดพลาดทางไวยากรณ์ หากมีการแสดงนิพจน์ทางด้านซ้ายของโอเปอเรเตอร์การกำหนด นี่อาจทำให้เกิดข้อผิดพลาดทางความหมาย

ตัวอย่าง

#include<stdio.h>

main() {
   int x, y, z;
   x = 10;
   y = 20;
   x + y = z;
}

ผลลัพธ์

[Error] lvalue required as left operand of assignment