程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了分号真的是 C 中的一个序列点吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决分号真的是 C 中的一个序列点吗??

开发过程中遇到分号真的是 C 中的一个序列点吗?的问题如何解决?下面主要结合日常开发的经验,给出你关于分号真的是 C 中的一个序列点吗?的解决方法建议,希望对你解决分号真的是 C 中的一个序列点吗?有所启发或帮助;

根据this answer,以下是标准中描述的序列点:

  1. 在函数调用和实际调用中函数指示符和实际参数的计算之间;

  2. 运算符 &&、|| 和,的第一个和第二个操作数的计算之间;

  3. 在条件 ?: 运算符的第一个操作数的求值与第二个和第三个操作数中的任何一个求值之间;

  4. 完整声明符的结束;

  5. 在一个完整表达式的求值和下一个要求值的完整表达式之间。以下是完整的表达:

    • 一个初始化器;
    • 表达式语句中的表达式;
    • 选择语句的控制表达式(if 或 switch);
    • while 或 do 语句的控制表达式;
    • for 语句的每个表达式;
    • 返回语句中的表达式。
  6. 在库函数返回之前;

  7. 在与每个格式化输入/输出函数转换说明符关联的操作之后;

  8. 在每次调用比较函数之前和之后,以及在对比较函数的任何调用和作为参数传递给该调用的对象的任何移动之间。

该标准从未明确提到分号是一个序列点,但是已经说明的各种序列点都暗示着分号确实是一个序列点。

那么,break;conTinue; 中的分号是一个序列点吗?

解决方法

分号真的是 C 中的一个序列点吗?

没有。特定的语义语言结构在评估它们后特别需要有一个序列点。 (例如,例如 Logical AND operator ...if the second operand is evaluated,there is a sequence point between... - 它是特定的)。序列点确实与语义(“对 this 的评估发生在那个之前”)而不是标记(“一切都发生在 ; 字符之前”)等相关。

所以,是break中的分号;或继续;一个序列点?

不,不是。与 goto 一起,它们看起来像是口语规则的例外。

它不是函数调用,不是逻辑运算符 && ||,不是 , 运算符,不是三元 ?: 运算符,不是声明,不是 { {3}} - 它没有列在您引用的列表中(该列表来自 full expression),它无论如何都不是易变的,也没有 I/O。所以,好吧,在 AnnEX C 逻辑下,在 break;conTinue; 之后确实没有序列点。

,

那么,break;conTinue; 中的分号是序列点吗?

最好问问自己,为什么它不应该是一个序列点?

breakconTinue 只是伪装成 goto,或“jmp”。

goto 总是需要一个标签,也就是一个指针,也就是一个参数,才能跳转,breakconTinue 也是如此(这些标签被周围的环境隐含了)循环)。

...

是的,break;conTinue; 中的分号是一个序列点。

大佬总结

以上是大佬教程为你收集整理的分号真的是 C 中的一个序列点吗?全部内容,希望文章能够帮你解决分号真的是 C 中的一个序列点吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。