- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 C99 标准中,表达式允许优先级和关联性。
优先级被很好地记录下来,因为文档中运算符出现的顺序是降低优先级的,所以函数调用在乘法运算符之前,而乘法运算符又在加法运算符之前。
但是,我找不到关于结合律的明确描述,无论是左结合律还是右结合律。这很重要,因为 35/5*2
对于一个变体 (35/5)*2
和 3
将是 14
code> 用于另一个变体 35/(5*2)
。
6.5 表达式/3,脚注 74
状态:
The syntax specifies the precedence of operators in the evaluation of an expression, which is the same as the order of the major subclauses of this subclause, highest precedence first.
Within each major subclause, the operators have the same precedence. Left- or right-associativity is indicated in each subclause by the syntax for the expressions discussed therein.
但是,以乘法为例:
6.5.5 Multiplicative operators
Syntax
multiplicative-expression:
cast-expression
multiplicative-expression * cast-expression
multiplicative-expression / cast-expression
multiplicative-expression % cast-expression
Constraints
Each of the operands shall have arithmetic type. The operands of the%
operator shall have integer type.
Semantics
The usual arithmetic conversions are performed on the operands.
The result of the binary*
operator is the product of the operands.
The result of the/
operator is the quotient from the division of the first operand by the second; the result of the%
operator is the remainder. In both operations, if the value of the second operand is zero, the behavior is undefined.
When integers are divided, the result of the/
operator is the algebraic quotient with any fractional part discarded. If the quotienta/b
is representable, the expression(a/b)*b + a%b
shall equala
.
我在那里看不到任何提及关联性的内容,标准中的其他地方似乎也没有任何默认设置。
我是不是漏掉了什么?
最佳答案
运算符结合性未明确指定为“右结合”或“左结合”。你从语法中推断出来。在您的示例中,multiplicative-expression
术语递归地引用自身,并且递归位于运算符的左侧。这意味着遇到 a * b * c
的解析器必须像 (a * b) * c
一样解析 a * b * c
,这是左结合。
assignment-expression
术语 (6.5.16) 具有以下语法:
assignment-expression:
conditional-expression
unary-expression assignment-operator assignment-expression
因此遇到 a = b = c
的解析器必须像 a = (b = c)
那样解析它,这是右结合的。
关于运算符的 C99 关联性 - 它在哪里指定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9408127/
这个问题已经有答案了: Why does the expression a = a + b - ( b = a ) give a sequence point warning in c++? (4 个
有人可以解释以下代码片段的输出行为吗? function Vertex(x, y, z) { this.x = parseInt(x); this.y = parseInt(y);
理论上的输入/输出流运算符关联性: 从左到右 (例如,根据这个:Sait Mary's University website 输入/输出流运算符关联性实践: #include int func0()
根据 Hoogle,>= (bar <=< baz) 无积分,它给了我 bar <=< baz =<< foo 考虑到固定性,这看起来不太正确。 最佳答案 Frege 就像 Haskell,但 Fre
我正在使用任务集工具为我的一个程序设置 CPU 关联性。如何仅在单个 CPU 上设置亲和性 - 因为我对此不确定,所以我这样做: taskset -c 2-2 tests/prog 1 2 3 ...
我搜索了有关 CPU 亲和性的问题/答案并阅读了结果,但我仍然无法让我的线程锁定单个 CPU。 我正在开发一个将在专用 Linux 机器上运行的应用程序,因此我不关心其他进程,只关心我自己的进程。该应
我想知道linux进程是否可以使用默认的亲和性。默认值是 ~0(截断为可用 CPU 的数量),但我希望能够为系统的所有进程设置它。在启动时执行此操作也很好,这样我就可以有效地防止任何进程使用某些 CP
在 C99 标准中,表达式允许优先级和关联性。 优先级被很好地记录下来,因为文档中运算符出现的顺序是降低优先级的,所以函数调用在乘法运算符之前,而乘法运算符又在加法运算符之前。 但是,我找不到关于结合
我想将应用程序设置“ARR Affinity”配置为在通过我们的 ARM 模板配置新的应用程序服务时关闭。我该怎么做? 我找不到任何关于此的信息,这表明目前尚不支持它。 最佳答案 您正在 Micros
我想指定特定 pthread 的 CPU 亲和性。到目前为止我找到的所有引用资料都涉及设置进程(pid_t)而不是线程(pthread_t)的CPU亲和性。我尝试了一些传递 pthread_t 的实验
我在具有 2 个实例的云服务中拥有一个 Web 角色。 我有一个函数在一个实例中创建文件并切换到另一个中间函数,导致 404 错误,因为它找不到文件。 在 Azure Web Apps 中,Azure
F# pipe-forward 可以表示为: let (|>) x f = f x 例如: let SimpleFunction (a : typeA) (b : typeB) (c : typeC)
我有一个 HTTPS 负载均衡器,配置了一个后端服务和 3 个实例组: 端点协议(protocol):HTTPS 命名端口:https 超时:600 秒 运行状况检查:ui-health2 sessi
这个问题已经有答案了: Java thread affinity (5 个回答) 已关闭 6 年前。 有一些第三方库出于许可目的检查 CPU 数量,但没有明显的方式告诉他们“使用 1 个核心”。 为了
我们正在 Heroku 中基于 NodeJS 和 Websockets (MeteorJS) 运行生产操作几个月,使用配置为 session affinity 的 3 个实例。 。现在,我们想要从 H
我是一名优秀的程序员,十分优秀!