C语言 返回带逗号的语句



这是用c编写的常用bash命令cat

我不知道这行是做什么的:

if (argc==1) return cat(stdin), 0;

我以前从未见过这样的东西。下面是完整的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static void cat(FILE *f)
{
int     c;
while (EOF != (c = getc(f)))
{
if (EOF == putchar(c))
{
perror("cat");
return;
}
}
if (ferror(f))
{
perror("cat");
return;
}
}
int main(int argc, char **argv)
{
if (argc==1) return cat(stdin), 0;
for(int i=1; i<argc; i++)
{
if (!strcmp("-", argv[i]))
{
cat(stdin);
continue;
}
FILE *f = fopen(argv[i], "r");
if (!f)
{
perror("cat");
continue;
}
cat(f);
fclose(f);
}
return 0;
}

if (argc==1) return cat(stdin), 0;行做什么?

This:

cat(stdin), 0

是逗号表达式。这种表达式按照从左到右的顺序计算所有的操作数(用逗号分隔),每个逗号处有一个隐式的序列点,最后返回最右边的操作数的值(在本例中为0)。

例如:

int x = (1, 2, 3, 4);

变量x假定值为4。在某些情况下,表达式需要加括号以避免歧义(例如,就像我上面所做的那样),在某些情况下,不需要加括号(例如,在return之后)。

总而言之,逗号表达式有意义的情况很少,这当然不是其中之一。您所显示的代码可以重写为:

if (argc == 1) {
cat(stdin);
return 0;
}

使用return cat(stdin), 0;只是在返回0之前执行cat(stdin)。这是一个愚蠢的"把戏"。

相关内容

  • 没有找到相关文章

最新更新