景德镇网站建设景德镇网站排名推广自己怎么做
错误处理
1、通过函数的返回值表示执行错误:
//  返回合法值表示成功  返回非法值表示失败
//  计算大小、查找
long file_size(const char* path)
{FILE* fp = fopen(path,"r");if(NULL == fp)return -1;  //  返回非法值fseek(fp,SEEK_END,0);long size = ftell(fp);fclose(fp);return size;
}
//  返回指针类型 返回NULL/0xffffffff表示失败,malloc、mmap
Node* query_list(Node* head,TYPE data)
{for(Node* n=head->next; n; n=n->next){if(n->data == data)return n;}return NULL;
}
//  返回0表示成功,非零表示失败 main、fseek
//  永远成功的函数,printf、menu菜单函数 
2、通过errno全局变量表示错误:
-  
errno是一个记录系统最后一次错误代码原因的全局变量,是int类型的值,需要导入头文件 <errno.h> 通过该全局变量的值查看和调试程序错误。
 -  
当调用Linux系统API函数发生异常,一般系统会自动地将本程序的errno修改一个值,不同的值表示不同的异常,可以通过该值获取和推测出程序出现了什么问题,实际编程中能找出大部分调用系统API出现的异常
 -  
一般errno在程序执行成功时不会被修改,但是毕竟是一个全局变量,可能被其他人或者操作失误而修改,因此不能以errno非零就断定程序出现了异常,只能先根据其他具体条件判断出程序出现异常后,才能使用errno来确定异常的原因
 
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main(int argc,const char* argv[])
{FILE* fp = fopen("xixi","r");if(NULL == fp) {   printf("fopen:%d\n",errno); printf("fopen:%s\n",strerror(errno));printf("fopen:%m\n");perror("fopen");}     fclose(fp);
} 
