ใน 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