C99中"算术运算"的定义是什么?

M.M*_*M.M 13 c c99 language-lawyer

在C99中,术语算术运算出现了16次,但我没有看到它的定义.

术语算术运算符仅在文本中出现两次(同样没有定义)但它确实出现在索引中:

算术运算符

添加剂,6.5.6,
G.5.2按位,6.5.10,6.5.11,6.5.12
递增和递减
,6.5.2.4,6.5.3.1乘法6.5.5,G.5.1
移位,6.5.7
一元,6.5. 3.3

然后我们将+ - | &(二进制)++ -- *(二进制)/ % << >> ~作为算术运算符,如果索引被认为是规范的!

也许我们应该将算术运算识别为算术运算符的使用.但F9.4.5表示该sqrt()功能也是算术运算,详情请参考IEC 60559(又名IEEE754).因此,必须有算术运算,而不仅仅是算术运算符的使用.

Sha*_*our 7

由于我们没有正式的定义,让我们看看我们是否可以拼凑出对算术运算应该是什么的基本解释.这将是推测性的,但我找不到任何明显的缺陷报告或未解决的问题.

我想我会从被认为是算术类型的东西开始,这将在章节6.2.5 类型18段中说明(强调我的未来):

整数和浮点类型统称为算术类型. 每种算术类型属于一种类型域:真实类型域包括真实类型,复杂类型域包括复杂类型.

好的,所以我们知道算术运算必须对整数或浮点类型进行操作.什么是手术?看起来我们已经很好地定义了5.1.2.3 程序执行2段中的内容,其中说:

访问易失性对象,修改对象,修改文件或调用执行任何这些操作的函数都是副作用,11)这些是执行环境状态的变化.[...]

因此修改对象或调用执行该操作的函数,这是一个操作.什么是对象?科3.14说:

执行环境中的数据存储区域,其内容可以表示值

虽然标准似乎更宽松地使用术语操作来表示评估,例如在7.12.1 错误条件处理部分说:

除非另有说明,否则为其输入参数的所有可表示值指定每个函数的行为.每个函数都应该像单个操作一样执行,而不会产生任何外部可见的异常条件.

并在6.5 表达8段中说:

浮动表达式可能会被收缩,也就是说,它被评估为原子操作[...]

所以这似乎暗示评估是一项操作.

因此,从这些部分看来,几乎所有的算术运算符和任何数学函数都属于算术运算的常识定义.