【问题标题】:Documenting exit codes? ( C )记录退出代码? ( C )
【发布时间】:2014-04-16 15:13:20
【问题描述】:

我正在寻找有关在我的 C 文件中记录退出代码的说明。

例如,我有以下内容:

if( !(new_std = (student*) malloc(sizeof(student))) )
    exit(1);

//+1 is for the \0, strlen does not give us that one!
if( !(new_std->name=(char*) malloc(1+sizeof(char)*strlen(name)))){
    free(new_std);
    exit(1);
}

在我的文件中记录的正确方法是什么,以数字 1 退出,意味着 内存分配失败?

【问题讨论】:

标签: c exit-code


【解决方案1】:

没有“正确答案”,但我想大多数人都会建议使用常量: 将它们放在任何 C 文件都可以包含的通用头文件中。

exit_codes.h

#define EXIT_SUCCESS           0
#define EXIT_GENERAL_FAILURE   1
#define EXIT_OUT_OF_MEM        2

whatever.c

#include "exit_codes.h"
void *p = malloc(100);
if (!p)
    exit(EXIT_OUT_OF_MEM);

【讨论】:

    【解决方案2】:

    这样做是这样的:

    typedef enum exit_code {
        SUCCESS = 0,
        ALLOCATION_FAILURE = 1,
        FOO = 2
    } exit_code_t;
    
    exit_code_t my_function(void)
    {
        //.....
        return ALLOCATION_FAILURE;
    }
    

    为此目的使用枚举比定义更好,因为:

    • 您可以在函数返回值上使用 switch-case 语句,如果您忘记检查某个值,则会收到警告。
    • 您可以使用调试器打印它们的值,而无需添加任何特殊的编译器标志。
    • 您可以将枚举用作函数的返回类型,以明确有效的返回值是什么。

    【讨论】:

    • 谢谢。我们还没有在课程中学习“枚举”,因此我不允许使用它,所以现在我将使用定义来解决这个问题。再次感谢您,祝您度过愉快的一周
    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多