C-定义值比硬编码数字慢



这个问题对您来说可能很愚蠢,但我找不到答案,我想确保它正如我想的那样起作用。

最近我遇到了此代码:

void RDP_G_SETBLENDCOLOR(void)
{
    Gfx.BlendColor.R = _SHIFTR(w1, 24, 8) * 0.0039215689f;
    Gfx.BlendColor.G = _SHIFTR(w1, 16, 8) * 0.0039215689f;
    Gfx.BlendColor.B = _SHIFTR(w1, 8, 8) * 0.0039215689f;
    Gfx.BlendColor.A = _SHIFTR(w1, 0, 8) * 0.0039215689f;
    if(OpenGL.Ext_FragmentProgram && (System.Options & BRDP_COMBINER)) {
        glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 2, Gfx.BlendColor.R, Gfx.BlendColor.G, Gfx.BlendColor.B, Gfx.BlendColor.A);
    }
}

我知道,出于优化原因,对0.0039215689F(指1/255)进行了硬编码。现在想象我想定义它出于可读性原因(即使在这里选择的名称不是更好,也只是为例)。

#define PIXEL_VALUE 0.0039215689f
void RDP_G_SETBLENDCOLOR(void)
{
    Gfx.BlendColor.R = _SHIFTR(w1, 24, 8) * PIXEL_VALUE;
    Gfx.BlendColor.G = _SHIFTR(w1, 16, 8) * PIXEL_VALUE;
    Gfx.BlendColor.B = _SHIFTR(w1, 8, 8) * PIXEL_VALUE;
    Gfx.BlendColor.A = _SHIFTR(w1, 0, 8) * PIXEL_VALUE;
    if(OpenGL.Ext_FragmentProgram && (System.Options & BRDP_COMBINER)) {
        glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 2, Gfx.BlendColor.R, Gfx.BlendColor.G, Gfx.BlendColor.B, Gfx.BlendColor.A);
    }
}

这将定义使代码执行速度较慢?

这将定义使代码执行速度较慢?

no,因为这两个代码片段是相同的,因为宏是在编译翻译单元之前扩展的。

宏进行文本更换。编译的代码与您在代码中复制并粘贴宏的替换文本完全相同。

我相信它们完全没有区别。

宏是文本更换的模式。因此,它被替换为您的代码已编译。

您可以尝试对两个文件进行预处理,并查看终端中的区别:

gcc -E 1.c -o 1.i
gcc -E 2.c -o 2.i
diff -u 1.i 2.i

相关内容

  • 没有找到相关文章