gpt4 book ai didi

c - 带逗号的返回语句

转载 作者:行者123 更新时间:2023-12-02 16:08:48 25 4
gpt4 key购买 nike

这是用 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; 是做什么的?

最佳答案

这个:

cat(stdin), 0

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

举个例子,这里:

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

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

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

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

使用 return cat(stdin), 0; 在返回 0 之前简单地执行 cat(stdin)。使代码适合一行是一种愚蠢的“技巧”。

关于c - 带逗号的返回语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68606857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com