首页 > 后端开发 > C++ > C 编译器优化是否利用参数求值顺序歧义?

C 编译器优化是否利用参数求值顺序歧义?

Linda Hamilton
发布: 2024-12-14 01:54:13
原创
883 人浏览过

Does C   Compiler Optimization Exploit Argument Evaluation Order Ambiguity?

C 中参数求值顺序的编译器优化

C 标准允许编译器自行选择函数参数的求值顺序。这就提出了一个问题:现实世界的实现是否利用这种模糊性来提高性能。

在大多数情况下,编译器不会优化参数求值顺序。然而,体系结构、调用约定和参数类型会影响行为。在 x86 计算机上,Pascal 调用约定从左到右计算参数,而 C 约定 (__cdecl) 从右到左计算参数。与平台无关的程序通常会考虑调用约定以避免意外。

例如,在经典的代码片段中:

int i = 0;
foo(i++, i++);
登录后复制

在 Pascal 调用约定中,编译器可能会在 i 之前计算 i,但是相反的情况可能发生在 __cdecl 中。尽管如此,结果是未定义的,并且不鼓励依赖特定的评估顺序。

请注意,语言标准将参数评估顺序分类为“未指定”,这意味着它没有明确定义或不允许。这允许依赖于实现的行为并强调抽象机的不确定性。

以上是C 编译器优化是否利用参数求值顺序歧义?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板