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

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

Linda Hamilton
Linda Hamilton原创
2024-12-14 01:54:13882浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn