这个问题对你来说可能显得愚蠢,但我无法找到答案,我想确保它按照我的想法运作。
最近我遇到了这段代码:
//SwipeGestureMethodUsing
func SwipeGestureMethodUsing ()
{
//AddSwipeGesture
[UISwipeGestureRecognizerDirection.right,
UISwipeGestureRecognizerDirection.left,
UISwipeGestureRecognizerDirection.up,
UISwipeGestureRecognizerDirection.down].forEach({ direction in
let swipe = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
swipe.direction = direction
window?.addGestureRecognizer(swipe)
})
}
//respondToSwipeGesture
func respondToSwipeGesture(gesture: UIGestureRecognizer) {
if let swipeGesture = gesture as? UISwipeGestureRecognizer
{
switch swipeGesture.direction
{
case UISwipeGestureRecognizerDirection.right:
print("Swiped right")
case UISwipeGestureRecognizerDirection.down:
print("Swiped down")
case UISwipeGestureRecognizerDirection.left:
print("Swiped left")
case UISwipeGestureRecognizerDirection.up:
print("Swiped up")
default:
break
}
}
}
据我所知,出于优化原因,0.0039215689f(指的是1/255)是硬编码的。 现在想象一下我想要定义它 出于可读性原因(即使这里选择的名称不是更好,它仅仅是为了示例)。
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 :(得分:6)
这会导致代码执行速度变慢吗?
不,因为这两个代码片段完全相同,因为在编译翻译单元之前会扩展MACROS。
答案 1 :(得分:2)
宏执行文本替换。编译的代码与在代码中复制并粘贴宏的替换文本完全相同。
答案 2 :(得分:1)
我相信它们根本没有任何区别。
宏文本替换模式。因此,在编译代码之前,它会被替换为。
您可以尝试预处理这两个文件,并查看终端中的差异:
gcc -E 1.c -o 1.i
gcc -E 2.c -o 2.i
diff -u 1.i 2.i