过去几天我一直在学习c(还是初学者),我看到了一些代码:
int func()
{
code..
return 0;
error:
return 1;
}
我正在试图找出error:
部分做了什么,经过一段时间的谷歌搜索后我什么都没发现(我不确定它叫什么,我认为它就像在switch语句中那样崩溃)。我写了这个简单的代码来看它的作用:
int n;
char input[100];
int main()
{
printf("Type a number: ");
fgets(input, sizeof(input), stdin);
sscanf(input, "%d", &n);
printf("%d", 1/n); // Invoked error by inputing 0
return 0;
error:
printf("error busted");
return 1;
}
当我运行它并键入0时,我得到一个浮点异常,但error:
部分什么也没做,所以它是如何工作的?
答案 0 :(得分:2)
error:
会goto error;
使用static struct vfsmount *fs_set_subtype(struct vfsmount *mnt, const char *fstype)
{
int err;
const char *subtype = strchr(fstype, '.');
if (subtype) {
subtype++;
err = -EINVAL;
if (!subtype[0])
goto err;
} else
subtype = "";
mnt->mnt_sb->s_subtype = kstrdup(subtype, GFP_KERNEL);
err = -ENOMEM;
if (!mnt->mnt_sb->s_subtype)
goto err;
return mnt;
err:
mntput(mnt);
return ERR_PTR(err);
}
,但您的示例中没有这样的内容。
这是Linux内核(namespace.c)的一个片段:
goto
使用{{1}}容易出错,不鼓励,不适合初学者。
答案 1 :(得分:0)
error:
是goto
的标签。由于你没有goto
,它什么都不做。
您应该打开编译器中的所有警告。也不要使用goto
- 其他方法更好