在 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;
}
我会这样浓缩它:
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;
}