gpt4 book ai didi

c - 像 "for(i=1;i<=10;printf("%d\n";i),i++) 这样的东西在 C 中是否有效且无 UB?

转载 作者:太空狗 更新时间:2023-10-29 15:04:22 25 4
gpt4 key购买 nike

下面两个代码块是不是完全一样,实现的是一样的东西?运行程序时显示的是一样的东西,希望有严谨的解释。

for(i=1;i<=10;i++)
{
printf("%d\n",i);
}

for(i=1;i<=10;printf("%d\n",i),i++);

for 循环需要有效的 C 语句作为参数,不是吗?但是,即使我已经在 StackOverflow 上验证了像 x+=4,y=x*2; 这样的语句是安全的,因为逗号在这里充当序列点,对于语句 printf 也是一样的("%d\n",i),i++) 在上面的 for 循环中作为参数传递?

如果是,请麻烦回答由此产生的小问题:

  • 逗号是否在包含多个逗号分隔的语句中充当序列点

    函数调用如下:

    printf("输入数字\n"),scanf("%d",&number),printf("你输入了 %d",number);

最佳答案

这是完全有效的,两个语句对编译器来说都是等价的。对于读者来说,第二个几乎是不可读的,所以这是唯一的区别。使用第二种格式意义不大。

序列点由逗号运算符引入。

引用:

6.5.17 逗号运算符

第 2 段:

The left operand of a comma operator is evaluated as a void expression; there is a sequence point between its evaluation and that of the right operand. Then the right operand is evaluated; the result has its type and value.114)

关于c - 像 "for(i=1;i<=10;printf("%d\n";i),i++) 这样的东西在 C 中是否有效且无 UB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16278235/

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