c - 我无法弄清楚这段代码是如何产生这个输出的
问题描述
我无法理解,为什么这段代码会产生这个输出。谁能帮我这个??
#include <stdio.h>
int main( void )
{
int num = 5;
printf( "%d %d %d", num, ++num, num++ );
}
输出将是7 7 5
(而不是5 6 7
)
解决方案
产生副作用的顺序与其他编译器中的顺序相同。
依赖于副作用评估的顺序是不安全的。例如,像这样的函数调用在一个编译器和另一个编译器之间可能表现得非常不同:
void func (int, int); int i = 2; func (i++, i++);
不保证(在 C 或 C++ 标准语言定义中)增量将以任何特定顺序进行评估。任一增量都可能首先发生。func 可能会得到参数 '2, 3',或者它可能会得到 '3, 2',甚至是 '2, 2'。
推荐阅读
- ios - 运行 iOS 代码时未找到 -lPods 的库 - 错误
- c# - 来自 Instagram 内部 API C# 的经过身份验证的响应
- git - 从拉取请求中删除提交并在 bitbucket 中分支
- node.js - 我从 nodejs 服务器获取的数据是空的并且没有显示结果
- windows - 在 MASM 中使用 PlaySound(),需要一种方法来帮助在后台运行它,而无需等待整个 .wav 声音文件完成的代码
- r - 使用 dplyr 从矩阵中提取值以添加到数据框列
- python - 如何在 (Anaconda) Spyder 中使用 Blender 中的 blenderpy 模块
- php - 如何在 Laravel 中动态链接函数?
- javascript - 表单标签中的 action='action-page' 和 target='_blank'
- .net-assembly - 将外部程序集 (RCL) 加载到 Blazor WebAssembly 应用程序