如何处理 C 中的常量错误检查?

问题描述 投票:0回答:1

在 C 中,我调用许多函数必须检查它们是否有效。代码因此变得大了 3 倍!一个例子:

char *myStr = malloc(sizeof(char));
if (!myStr)
    return NULL;

在 C 中是否有更易读的代码调用和错误检查方法?或者这只是饼干碎裂的方式?

我试过下面的宏。但它在 C 中似乎并不惯用,也没有用——错误是由“Key Y-N”指出的。

#define TRY_EXCEPT(try_statement, except_condition, except_statement) try_statement##if(except_condition){except_statement}

编辑:这就是我所说的调用和错误检查的密度。

if (!varNames)
    goto exit_fail;

struct dynStr *asmCode = dynStr_create();
if (!asmCode)
    goto exit_fail;

int rc;
rc = dynStr_append(asmCode, ".data\n");
if (!rc)
    goto exit_fail;

char *varName;
for (size_t i = 0; (varName = daStr_getString(varNames, i)); i++) {
    rc = dynStr_append(asmCode, "DD ");
    if (!rc)
        goto free_and_exit;

    rc = dynStr_append(asmCode, varName);
    if (!rc)
        goto free_and_exit;

    rc = dynStr_append(asmCode, "\n");
    if (!rc)
        goto free_and_exit;
}
c error-handling readability
1个回答
0
投票

我会这样浓缩它:

if (!(rc = dynStr_append(asmCode, "DD ")) 
    || !(rc = dynStr_append(asmCode, varName)) 
    || !(rc = dynStr_append(asmCode, "\n"))) {
    goto free_and_exit;
}

或者使用另一个变量:

int exit_stat = !(rc = dynStr_append(asmCode, "DD ")) 
                || !(rc = dynStr_append(asmCode, varName)) 
                || !(rc = dynStr_append(asmCode, "\n"));

if (exit_stat) {
    goto free_and_exit;
}

或者简单地删除对

rc
的分配:

if (!dynStr_append(asmCode, "DD ")) 
    || !dynStr_append(asmCode, varName) 
    || !dynStr_append(asmCode, "\n"))) {
    goto free_and_exit;
}
© www.soinside.com 2019 - 2024. All rights reserved.