Latest web development tutorials
×

C หลักสูตร

C กวดวิชาภาษา C แนะนำโดยย่อ C การตั้งค่าสภาพแวดล้อม C โครงสร้างหลักสูตร C ไวยากรณ์พื้นฐาน C ชนิดข้อมูล C ตัวแปร C คงที่ C ประเภทการจัดเก็บ C ผู้ประกอบการ C ผู้พิพากษา C การไหลเวียน C ฟังก์ชัน C การกำหนดขอบเขตกฎระเบียบ C แถว C ชี้ C เชือก C โครงสร้าง C สหภาพ C ฟิลด์บิต C typedef C อินพุตและเอาต์พุต C การอ่านออกเขียนเอกสาร C preprocessor C ส่วนหัว C ปลดเปลื้อง C จัดการข้อผิดพลาด C recursion C พารามิเตอร์ตัวแปร C จัดการหน่วยความจำ C บรรทัดคำสั่ง C คลาสสิก 100 ราย

C ห้องสมุดมาตรฐาน

C ห้องสมุดมาตรฐาน - คู่มืออ้างอิง C ห้องสมุดมาตรฐาน - <assert.h> C ห้องสมุดมาตรฐาน - <ctype.h> C ห้องสมุดมาตรฐาน - <errno.h> C ห้องสมุดมาตรฐาน - <float.h> C ห้องสมุดมาตรฐาน - <limits.h> C ห้องสมุดมาตรฐาน - <locale.h> C ห้องสมุดมาตรฐาน - <math.h> C ห้องสมุดมาตรฐาน - <setjmp.h> C ห้องสมุดมาตรฐาน - <signal.h> C ห้องสมุดมาตรฐาน - <stdarg.h> C ห้องสมุดมาตรฐาน - <stddef.h> C ห้องสมุดมาตรฐาน - <stdio.h> C ห้องสมุดมาตรฐาน - <stdlib.h> C ห้องสมุดมาตรฐาน - <string.h> C ห้องสมุดมาตรฐาน - <time.h>

C จัดการข้อผิดพลาด

ภาษา C ไม่ได้ให้การสนับสนุนโดยตรงสำหรับการจัดการข้อผิดพลาด แต่เป็นภาษาโปรแกรมระบบก็จะส่งกลับค่าของรูปแบบที่ช่วยให้คุณสามารถเข้าถึงข้อมูลพื้นฐาน เมื่อเกิดข้อผิดพลาดส่วนใหญ่ของระบบปฏิบัติการยูนิกซ์หรือ C โทรฟังก์ชันส่งกลับ 1 หรือโมฆะรหัสข้อผิดพลาดก็จะตั้งerrno รหัสข้อผิดพลาดนี้เป็นตัวแปรทั่วโลกก็แสดงความผิดพลาดในระหว่างฟังก์ชั่นการโทรที่เกิดขึ้นคุณสามารถพบความหลากหลายของรหัสข้อผิดพลาด <error.h> ไฟล์ส่วนหัว

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

errno, pError () และ strerror ()

ภาษา C ให้pError () และ strerror ()ฟังก์ชันที่จะแสดงข้อความที่เกี่ยวข้องกับerrno

  • pError () ฟังก์ชันที่จะแสดงผ่านของคุณสตริงตามลำไส้ใหญ่พื้นที่และการแสดงข้อความของมูลค่า errno ปัจจุบัน
  • strerror () ฟังก์ชันกลับชี้ไปค่าปัจจุบันของการแสดงข้อความ errno

Let 's จำลองกรณีเท็จพยายามที่จะเปิดไฟล์ที่ไม่มีอยู่ คุณสามารถใช้หลายวิธีในการส่งออกข้อผิดพลาดที่นี่เราใช้ฟังก์ชั่นแสดงให้เห็นถึงการใช้งาน อีกสิ่งหนึ่งที่จะต้องทราบคุณควรใช้กระแสstderr ไฟล์ที่ส่งออกไปยังข้อผิดพลาดทั้งหมด

#include <stdio.h>
#include <errno.h>
#include <string.h>

extern int errno ;

int main ()
{
   FILE * pf;
   int errnum;
   pf = fopen ("unexist.txt", "rb");
   if (pf == NULL)
   {
      errnum = errno;
      fprintf(stderr, "错误号: %d\n", errno);
      perror("通过 perror 输出错误");
      fprintf(stderr, "打开文件错误: %s\n", strerror( errnum ));
   }
   else
   {
      fclose (pf);
   }
   return 0;
}

เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:

错误号: 2
通过 perror 输出错误: No such file or directory
打开文件错误: No such file or directory

หารด้วยศูนย์ข้อผิดพลาด

ในช่วงหารหารเป็นศูนย์ถ้าไม่ได้รับการตรวจสอบจะมีผลในข้อผิดพลาด runtime

เพื่อป้องกันไม่ให้เกิดเหตุการณ์เช่นนี้รหัสต่อไปนี้ก่อนที่จะทำส่วนแรกจะตรวจสอบตัวหารเป็นศูนย์:

#include <stdio.h>
#include <stdlib.h>

main()
{
   int dividend = 20;
   int divisor = 0;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "除数为 0 退出运行...\n");
      exit(-1);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "quotient 变量的值为 : %d\n", quotient );

   exit(0);
}

เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:

除数为 0 退出运行...

สถานะออกจากโปรแกรม

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

หากมีข้อผิดพลาดในโปรแกรมเมื่อคุณออกจากโปรแกรมที่จะดำเนินการค่าสถานะ EXIT_FAILURE มันถูกกำหนดให้เป็น -1 ดังนั้นขั้นตอนข้างต้นสามารถเขียนเป็น:

#include <stdio.h>
#include <stdlib.h>

main()
{
   int dividend = 20;
   int divisor = 5;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "除数为 0 退出运行...\n");
      exit(EXIT_FAILURE);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "quotient 变量的值为: %d\n", quotient );

   exit(EXIT_SUCCESS);
}

เมื่อโค้ดข้างต้นจะรวบรวมและดำเนินการก็จะก่อให้เกิดผลลัพธ์ต่อไปนี้:

quotient 变量的值为 : 4