内联或相同的代码

Inlining or identical code

本文关键字:代码      更新时间:2023-10-16

如何设置编译器以生成相同的代码?例如

inline bool iszero(int a)
{
    return (a == 0);
}
int main()
{
    int a = 4;
    if(a == 0) // First
        a = 5;
    if(iszero(a)) // Second
        a = 5;
    ///...
}

在调试模式(带内联)下,反汇编的代码如下所示:

if(a == 0) // First
     a = 5;
bool temp; // Second
if(a == 0)
    temp = 0;
else
    temp = 1;
if(temp == 0)
    a = 5;

为什么会这样?

为什么会问这个问题?我需要使用内联函数调试我的应用程序(以加快调试速度),并且我不想在调试模式下失去性能

在发布模式下编译,具有完全优化。生成的代码将等效于:

int main()
{
}

在没有优化的情况下比较代码是没有意义的,因为在关闭优化的情况下进行基准测试是没有意义的。