Tag: error handling

结构中的“警告:空声明中无用的存储类说明符”

typedef struct item { char *text; int count; struct item *next; }; 所以我有这个结构与上面定义的节点,但我得到下面的错误,我无法弄清楚什么是错的。 警告:空声明中无用的存储类说明符};

需要加密一个文件,我把它全写,但读取文件时出错

#include #include #include int encrypt_data(FILE *); int main(void) { FILE *fp; int return_code; printf(“Please enter the file to be encrypted: “); char filename[200]; fgets(filename, 200, stdin); fp=fopen(“filename”,”w+”); return_code = encrypt_data(fp); return 0; } int encrypt_data(FILE *disk_fp) { int i; unsigned long int file_size; int key_length; char *file_buff = NULL; char key[] = “12`3-vk0fn”; key_length = […]

在这种情况下使用perror?

我写了一个小程序(带有来自SO的代码),它做了printenv | sort | less printenv | sort | less 现在我想用perror添加error handling并检查返回值。 我之前从未这样做过,但我认为它类似于exception处理。 我需要检查execvp,fork,pipe和dup2的错误。 我有这个代码 #include #include #include #include #include #include struct command { const char **argv; }; /* Helper function that spawns processes */ int spawn_proc (int in, int out, struct command *cmd) { pid_t pid; if ((pid = fork ()) == 0) { […]

是否有相当于perror()的CUDA?

是否有CUDA函数用于打印调用者提供的错误消息,以及描述当前cudaStatus(或调用者提供的cudaStatus)的错误消息,a-la- perror() ?

C fputcerror handling?

fputc的大多数C文件编写示例使用一个非常基本的示例,几乎没有错误检查过程。 我应该使用哪些错误检查技术和函数与fputc循环一起确保fputc已成功写入文件? 我应该如何使用它们? 我特别要求fputc的原因是我正在使用双向链表。

模式,以防止不断检查错误?

在C中,是否有一种模式可以不再检查调用其他函数的函数中的错误? 例如,如果函数foo()依次调用a(),b()和c(),则必须在继续之前检查每个函数的返回值。 如果a(),b()或c()也调用其他函数,这些函数也可能调用其他函数,这会留下一长串错误检查,可能出现相同的错误…… int16_t a(x_t x) {return DO_SOME_WORK(x);} int16_t b(y_t y) {return DO_OTHER_WORK(y);} int16_t c(z_t z) {return DO_MORE_WORk(z);} foo (x_t x, y_t y, z_t z) { int16_t err = 0; // I can handle errors returned by either: err = a(x)); if (err) return err; err = b(y); if (err) return err; err = c(z); […]

避免重复Cerror handling

我经常编写代码,这些代码最终都是长序列 int error; error = do_something(); if (error) { return error; } error = do_something_else(with, some, args); if (error) { return error; } error = do_something_yet_again(); if (error) { return error; } return 0; 我正在寻找一种更清晰的方式来写这个,这在某种程度上避免了重复相同的检查。 到目前为止,我已经编写了一个ERROR_OR宏,它的工作方式类似于 #define ERROR_OR(origerr, newerr) \ ({ \ int __error_or_origerr = (origerr); \ (__error_or_origerr != 0) \ ? __error_or_origerr \ : […]

有没有更好的方法来进行C风格的error handling?

我正在尝试通过编写一个简单的解析器/编译器来学习C语言。 到目前为止它是一个非常有启发性的经验,但是来自C#的强大背景我调整了一些问题 – 特别是缺乏例外。 现在我已经阅读了Cleaner,更优雅,更难以识别 ,我同意该文章中的每一个字; 在我的C#代码中,我尽可能避免抛出exception,但是现在我面临着一个我无法抛出exception的世界,我的error handling完全淹没了我的代码的干净且易于阅读的逻辑。 目前我正在编写需要在出现问题时快速失败的代码,并且它也可能深度嵌套 – 我已经确定了error handling模式,其中“Get”函数在错误上返回NULL,其他函数返回-1失败。 在这两种情况下,失败的函数都会调用NS_SetError() ,所以调用函数需要做的就是清理并立即返回失败。 我的问题是if (Action() < 0) return -1; 我所做的陈述正在进行 – 它非常重复,完全掩盖了潜在的逻辑。 我最终创建了一个简单的宏来尝试改善这种情况,例如: #define NOT_ERROR(X) if ((X) str, “+”) == 0) { NOT_ERROR(NS_Add()); } else if (strcmp(current->str, “-“) == 0) { NOT_ERROR(NS_Subtract()); } else { NS_SetError(“Expected: operator”); return -1; } return 0; } NS_Term函数NS_Term […]

scanferror handlingC.

说如果我想要输入 [Name] [Name] 我怎么会发现 [Name] [Name] [Name] 并返回错误? 这是我到目前为止所拥有的, char in[20]; char out[20]; scanf(” %s %s”, out, in);

我在哪里可以看到与errno交互的函数列表?

在“The C Programming Language”一书中,它说: “当文件出现错误或文件结束时,库中的许多function都会设置状态指示器。这些指示器可以显式设置和测试。此外,整数表达式errno (在声明)可能包含一个错误号提供有关最新错误的进一步信息。“ 我在哪里可以看到这些function的列表?