问题标签 [sequence-points]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C中的打印顺序
它打印输出为
为什么第一个 printf 中的顺序是相反的,为什么不是第二个 printf 语句? 我在一本书中发现C使用反向打印顺序。
glsl - GLSL 中的表达测序:后增量会发生什么
在 C/C++ 中有明确的规则定义“序列点”/“序列之前”关系,例如以下表达式
调用未定义的行为。
现在,我想知道在 GLSL 中管理此类表达式的规则是什么。我在 OpenGL 着色语言 (4.40) 规范中找不到任何定义类似于序列点/在关系之前排序的概念的东西。
在“5.9 表达式”部分它只说
预增量和预减量将它们操作的表达式的内容加或减 1 或 1.0,并且预增量或预减量表达式的值是该修改的结果值。后自增和后自减表达式对其操作的表达式的内容加或减 1 或 1.0,但结果表达式具有执行后自增或后自减之前的表达式值。
但是没有提到后增量何时应该与其他子表达式相关。
1/ 是否有关于如何在 GLSL 中定义表达式排序的规范或协议?
2/ 是i-- * ++i
有效/定义明确的 GLSL 表达式吗?如果是,那么一开始我们有它的价值是i=1
多少?
c - 交换两个变量的值而不使用C中的第三个变量?
我找到了以下代码片段:
它实际上交换了变量
谁能解释一下代码如何交换变量?
我认为括号会先执行,然后表达式导致
c++ - C 和 C++ 与序列点和 UB 的区别
我使用这篇文章Undefined Behavior and Sequence Points来记录C程序中的未定义行为(UB),它指向我。那么在序列点和相关的UB方面, C和C++之间有什么区别?我不能用一篇关于C++序列的帖子来分析C代码中发生的事情吗?C and C++ have their own divergent rules for this [sequence points]
* 当然我不是在谈论C++
不适用于C
.
c - Microsoft C 与标准的偏差
以下异常的任何原因?
考虑以下 C 程序(名为 PstFixInc.c)
如果编译为gcc 4.8.1
:
gcc -o PstFix.exe PstFixInc.c
然后执行,得到结果:
数量:0
如果使用 Microsoft (R) C/C++ Optimizing Compiler Version 18.00.21005.1 for x86 编译
cl PstFixInc.c
然后执行,得到结果:
数量:1
c++ - C++ cout side-effect sequencing
Suppose following piece of code:
execution of lines marked as 1
and 2
, being compiled with ideone does the same, it prints following:
From my point of view, what we observe here is unspecified behaviour, as order in which function arguments are resolved is unspecified.
This was a question at an interview, printing above given sequence (without any alternatives) was supposed to be correct answer, but is it really correct?
c - 无限循环的原因
我读了这个。明确指出,while 语句和语句的结尾(;)是序列点。
所以我不明白为什么上面的运行无限时间并打印相同的值[5]。
c - c - 为什么 i = ++i 调用未定义的行为?
我了解 C 使用序列点的概念来识别模棱两可的计算,并且该=
运算符不是序列点。但是,我在执行该语句时看不到任何歧义
i = ++i
根据我的理解,这仅相当于评估 at 的任何内容&i
,将其递增并将其存储回同一位置。然而,GCC 将其标记为:
[警告] 'i' 上的操作可能未定义 [-Wsequence-point]
我是否遗漏了一些有关=
功能的信息?
编辑:在标记为重复之前,请注意我已经浏览过其他关于序列点和未定义行为的帖子。它们都没有专门解决表达式i=++i
(注意前增量)。提到的表达式通常是i=i++
,a=b++ + ++b
等。我对其中任何一个都没有疑问。
c++ - C++11 中的安全短路评估
在 C++11 之前,我们知道运算符需要短路和求值顺序,&&
因为:
1.9.18
在以下表达式的评估中
使用这些表达式中运算符的内置含义,在对第一个表达式(12) 求值之后有一个序列点。
但是 C++11 中不再存在序列点,那么标准部分在哪里说:
是安全的?
c - 对“i”的操作可能未定义
我有这个代码来获取表单的字符串bla_2
并将其分隔:
我有:
但我只是i
通过++
操作员进行更改,我没有分配任何东西。
那么,为什么是UB,如果是的话?如果没有,如何摆脱警告?
请注意,在我看来,这个问题处理了一个不同的问题。