以下是历史Unix goto.c的源代码:http://v6shell.org/history/goto.c
所以我们正试图找到一个匹配的标签来记录" goto标签"调用
我的问题:
if (getlin(line)) {
write(1, "label not found\n", 16);
return;
}
所以我希望如果getlin()返回true,我们应该打印出#34;标签未找到"并退出程序。
但是看看这个:
getlin(s)
char s[];
{
int ch, i;
i = 0;
l:
if ((ch=getc())=='\0') return(1);
if (ch!=':') {
while(ch!='\n' && ch!='\0')
ch = getc();
goto l;
}
while ((ch=getc())==' ');
while (ch!=' ' && ch!='\n' && ch!='\0') {
s[i++] = ch;
ch = getc();
}
while(ch != '\n')
ch = getc();
s[i] = '\0';
return(0);
}
如果我们找到标签,getlin()将返回0(true),如果我们没有,则返回1(false)。
但它应该是另一种方式,或者我们需要说:
if (**!** getlin(line)){}
这里有什么问题?
答案 0 :(得分:3)
0
在false
中被视为C
。因此混乱。您可以通过运行这个小代码示例来试用:
#include <stdio.h>
int i = 0;
int main() {
if(i) {
printf("i is %d and it is true\n", i);
} else {
printf("i is %d and it is false\n", i);
}
return 0;
}
作为退出代码,0
被视为成功。但在条件句中(C
),0
评估为false
,1
评估为true
。
但是,在bash中,0
被视为true
,即使是在条件限制中。这是因为在bash的大多数用例中它更方便,因为我们总是处理进程。