如何不指定函数参数的精确评估顺序有助于C&C编译器生成优化代码?

如何不指定函数参数的精确评估顺序有助于C&C编译器生成优化代码?,第1张

概述#include <iostream>int foo() { std::cout<<"foo() is called\n"; return 9;}int bar() { std::cout<<"bar() is called\n"; return 18;}int main() { std::cout<<foo()<<' '<<bar()<<' '<
#include <iostream>int foo() {    std::cout<<"foo() is called\n";    return 9;}int bar() {    std::cout<<"bar() is called\n";    return 18;}int main() {    std::cout<<foo()<<' '<<bar()<<' '<<'\n';}// Above program's behavIoUr is unspecifIEd// clang++ evaluates function arguments from left to right: http://melpon.org/wandBox/permlink/STnvMm1YVrrSRSSB// g++ & MSVC++ evaluates function arguments from right to left// so either foo() or bar() can be called first depending upon compiler.

上述程序的输出取决于编译器.未指定评估函数参数的顺序.我读到这个的原因是它可以导致高度优化的代码.如何不指定函数参数的精确评估顺序有助于编译器生成优化代码?

AFAIK,评估顺序严格按Java,C#,D等语言规定.

解决方法 我认为这个问题的整个前提是错误的:

How not specify an exact order of evaluation of function argument helps C & C++ compiler to generate optimized code?

它不是关于优化代码(尽管它确实允许).它不会惩罚编译器,因为底层硬件具有某些ABI约束.

一些系统依赖于按相反顺序推送堆叠的参数,而其他系统依赖于正向顺序. C在所有类型的系统上运行,各种约束条件.如果您在语言级别强制执行订单,则需要一些系统支付罚款才能执行该订单.

C的第一条规则是“如果你不使用它,那么你就不应该付钱”.因此,执行订单将违反C的主要指令.

总结

以上是内存溢出为你收集整理的如何不指定函数参数的精确评估顺序有助于C&C编译器生成优化代码?全部内容,希望文章能够帮你解决如何不指定函数参数的精确评估顺序有助于C&C编译器生成优化代码?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1223861.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存