GCC中的简单错误陷阱
使用GCC,我试图向这个程序添加简单的异常逻辑。理想情况下,一个简单的“如果”就能很好地工作。如果GCC中的简单错误陷阱,c,gcc,C,Gcc,使用GCC,我试图向这个程序添加简单的异常逻辑。理想情况下,一个简单的“如果”就能很好地工作。如果fopen成功,则执行x,如果失败,则执行z。有没有一个简单的方法可以做到这一点 #包括 main() { 文件*ptr; ptr=fopen(“c:\\RedyBoot.bat”、“r”); fclose(ptr); 返回0; } ,所以 ,所以 以下是执行此操作的方法,并报告错误消息: #include <errno.h> #include <stdio.h> #
fopen
成功,则执行x,如果失败,则执行z。有没有一个简单的方法可以做到这一点
#包括
main()
{
文件*ptr;
ptr=fopen(“c:\\RedyBoot.bat”、“r”);
fclose(ptr);
返回0;
}
,所以
,所以
以下是执行此操作的方法,并报告错误消息:
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
FILE *handle;
errno = 0;
handle = fopen("file.txt", "r");
if (!handle)
{
fprintf (stderr, "Cannot open file %s, error: %s",
"file.txt", strerror (errno));
exit (-1);
}
}
#包括
#包括
#包括
#包括
int main(int argc,字符**argv)
{
文件*句柄;
errno=0;
handle=fopen(“file.txt”,“r”);
如果(!句柄)
{
fprintf(stderr,“无法打开文件%s,错误:%s”,
“file.txt”,strerror(errno));
出口(-1);
}
}
以下是一种执行此操作并报告错误消息的方法:
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
FILE *handle;
errno = 0;
handle = fopen("file.txt", "r");
if (!handle)
{
fprintf (stderr, "Cannot open file %s, error: %s",
"file.txt", strerror (errno));
exit (-1);
}
}
#包括
#包括
#包括
#包括
int main(int argc,字符**argv)
{
文件*句柄;
errno=0;
handle=fopen(“file.txt”,“r”);
如果(!句柄)
{
fprintf(stderr,“无法打开文件%s,错误:%s”,
“file.txt”,strerror(errno));
出口(-1);
}
}
您可以使用类似的方法检查条件,如果不满足条件,则打印错误:
#include <stdlib.h>
#include <stdio.h>
#define CHECK(x) \
do { \
if (!(x)) { \
fprintf(stderr, "%s:%d: ", __func__, __LINE__); \
perror(#x); \
exit(-1); \
} \
} while (0)
int main()
{
FILE *file = fopen("my_file.txt", "r");
CHECK(NULL != file);
fclose(file);
return 0;
}
#包括
#包括
#定义检查(x)\
做{\
如果(!(x)){\
fprintf(标准,“%s:%d:”,\uuuuu函数,\uuuuu线)\
佩罗尔(#x)\
出口(-1)\
} \
}而(0)
int main()
{
FILE*FILE=fopen(“my_FILE.txt”、“r”);
检查(NULL!=文件);
fclose(文件);
返回0;
}
您可以使用类似的方法检查条件,如果不满足条件,则打印错误:
#include <stdlib.h>
#include <stdio.h>
#define CHECK(x) \
do { \
if (!(x)) { \
fprintf(stderr, "%s:%d: ", __func__, __LINE__); \
perror(#x); \
exit(-1); \
} \
} while (0)
int main()
{
FILE *file = fopen("my_file.txt", "r");
CHECK(NULL != file);
fclose(file);
return 0;
}
#包括
#包括
#定义检查(x)\
做{\
如果(!(x)){\
fprintf(标准,“%s:%d:”,\uuuuu函数,\uuuuu线)\
佩罗尔(#x)\
出口(-1)\
} \
}而(0)
int main()
{
FILE*FILE=fopen(“my_FILE.txt”、“r”);
检查(NULL!=文件);
fclose(文件);
返回0;
}
在C语言中,大多数系统函数和标准库函数都有一个特定的错误代码,当它们失败时会返回该代码,然后它们会将全局变量errno
设置为一个数字,以精确指定出错的原因。每个函数的文档都应该说明错误代码是什么,以及errno
值是什么。在C语言中,大多数系统和标准库函数都有一个特定的错误代码,当它们失败时会返回该代码,然后它们会将全局变量errno
设置为一个数字,以精确地指定出错的原因。每个函数的文档都应该说明错误代码是什么,以及errno
值是什么。但是如果使用:const char fname[]=“file.txt”会更好
和在两个函数调用中使用fname。这是一种形式的干-不要重复你自己。普通。。代码的目标是快速显示如何处理和显示错误,而不是一本关于C模式的书。但是如果使用:const char fname[]=“file.txt”,它会更好
和在两个函数调用中使用fname。这是一种形式的干-不要重复你自己。普通。。代码的目标是快速显示如何处理和显示错误,而不是一本关于C模式的书。