การจัดการข้อยกเว้นใน C
นำกลยุทธ์จัดการข้อผิดพลาดที่รัดกุมมาใช้โดยไม่มีการจัดการข้อยกเว้นในตัว
การจัดการข้อยกเว้นใน C เป็นบทเรียน C Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C Academy มีบทเรียนทั้งหมด 3 บทเรียน
บทนำสู่การจัดการข้อยกเว้น
การจัดการข้อยกเว้นในภาษา C
ต่างจากภาษาอย่าง C++ และ Java ภาษา C ไม่มีการจัดการข้อยกเว้นในตัว
ในบทเรียนนี้ คุณจะได้เรียนรู้:
- วิธีจัดการข้อผิดพลาดโดยใช้ค่าที่ส่งกลับ
- วิธีใช้
setjmpและlongjmpเพื่อจัดการข้อยกเว้น - วิธีใช้
errnoเพื่อจัดการข้อผิดพลาดของระบบ

การจัดการข้อผิดพลาดด้วยค่าที่ส่งกลับ
การจัดการข้อผิดพลาดด้วยค่าที่ส่งกลับ
วิธีที่ง่ายที่สุดในการจัดการข้อผิดพลาดในภาษา C คือการใช้ค่าที่ส่งกลับ
ตัวอย่าง:
int divide(int a, int b) {
if (b == 0) return -1; // Error code
return a / b;
}
ผู้เรียกจะตรวจสอบค่าที่ส่งกลับเพื่อค้นหาข้อผิดพลาด
ตัวอย่าง: การจัดการข้อผิดพลาดด้วยค่าที่ส่งกลับ
ตัวอย่าง: การจัดการข้อผิดพลาดด้วยค่าที่ส่งกลับ
โปรแกรมนี้ตรวจสอบการหารด้วยศูนย์โดยใช้ค่าที่ส่งกลับ
#include <stdio.h>
int divide(int a, int b) {
if (b == 0) {
printf("Error: Division by zero!\n");
return -1;
}
return a / b;
}
int main() {
int result = divide(10, 0);
if (result != -1) {
printf("Result: %d\n", result);
}
return 0;
}การใช้ setjmp และ longjmp เพื่อจัดการข้อผิดพลาด
การใช้ setjmp และ longjmp เพื่อจัดการข้อผิดพลาด
ฟังก์ชัน setjmp และ longjmp อนุญาตให้กระโดดข้ามขอบเขตของฟังก์ชัน ซึ่งจำลองการจัดการข้อยกเว้น
ขั้นตอน:
- ใช้
setjmp()เพื่อทำเครื่องหมายจุดกู้คืน - ใช้
longjmp()เพื่อกระโดดกลับเมื่อเกิดข้อผิดพลาด
ตัวอย่าง: การใช้ setjmp และ longjmp
ตัวอย่าง: การใช้ setjmp และ longjmp
โปรแกรมนี้ใช้ setjmp และ longjmp เพื่อจัดการข้อผิดพลาด
#include <stdio.h>
#include <setjmp.h>
jmp_buf buffer;
void errorHandler() {
printf("Error occurred! Jumping back to safe state.\n");
longjmp(buffer, 1);
}
int main() {
if (setjmp(buffer) == 0) {
printf("Executing main program...\n");
errorHandler();
} else {
printf("Recovered from error.\n");
}
return 0;
}การใช้ errno สำหรับข้อผิดพลาดของระบบ
การใช้ errno สำหรับข้อผิดพลาดของระบบ
ตัวแปร errno จัดเก็บรหัสข้อผิดพลาดจากการเรียกใช้ระบบ
ตัวอย่าง:
#include
ฟังก์ชันอย่าง fopen() จะกำหนดค่าให้ errno เมื่อเกิดข้อผิดพลาด
ตัวอย่าง: การใช้ errno สำหรับการจัดการไฟล์
ตัวอย่าง: การใช้ errno สำหรับการจัดการไฟล์
โปรแกรมนี้ตรวจสอบ errno เมื่อเปิดไฟล์ที่ไม่มีอยู่
#include <stdio.h>
#include <errno.h>
int main() {
FILE *file = fopen("nonexistent.txt", "r");
if (!file) {
perror("Error opening file");
}
return 0;
}แนวทางปฏิบัติที่ดีในการจัดการข้อผิดพลาด
แนวทางปฏิบัติที่ดีในการจัดการข้อผิดพลาด
หากต้องการจัดการข้อผิดพลาดอย่างมีประสิทธิภาพ:
- ตรวจสอบค่าที่ส่งกลับจากฟังก์ชัน
- ใช้
errnoสำหรับข้อผิดพลาดของระบบ - ใช้
setjmpและlongjmpเฉพาะเมื่อจำเป็น
สรุป
สรุป
ในบทเรียนนี้ คุณได้เรียนรู้:
- วิธีจัดการข้อผิดพลาดโดยใช้ค่าที่ส่งกลับ
- วิธีที่
setjmpและlongjmpจำลองการจัดการข้อยกเว้น - วิธีใช้
errnoเพื่อตรวจจับข้อผิดพลาดของระบบ
จบหัวข้อการดีบักและการจัดการข้อผิดพลาดในภาษา C แล้ว

คำถามที่พบบ่อย
บทเรียน “การจัดการข้อยกเว้นใน C” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การจัดการข้อยกเว้นใน C” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การจัดการข้อยกเว้นใน C”
นำกลยุทธ์จัดการข้อผิดพลาดที่รัดกุมมาใช้โดยไม่มีการจัดการข้อยกเว้นในตัว คุณปฏิบัติ C Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน
บทเรียน “การจัดการข้อยกเว้นใน C” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C Academy นี้ได้ไหม
ได้ บทเรียน C Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การแก้ไขข้อบกพร่องด้วย GDB
- ข้อผิดพลาดขณะทำงานที่พบบ่อย
- การจัดการข้อยกเว้นใน C