我编写了一个代码,用于进行一些非常快速的计算。我假设我知道一定数量(因为我可以放心地认为它是< 15和> 2.不是很好的实现方法,但它允许循环展开并使代码更快)
(代码是以这种方式编写的,用于实际考虑。我知道这不是编写代码的好方法,但在这种情况下,这就是必须的方式)
问题是我需要更改#define
中的数字,并为每个值反复编译
(使用Visual C ++ 2010)
我认为宏可能是要走的路,但我无法找到如何做这样的事情。我蹩脚的尝试提出了:
#define myCustomFunc(number) void myF_number() \
{ printf("%d",number); \
}
我的目标是这样的:
create_myfunc(2);
create_myfunc(3);
create_myfunc(4);
将扩展为:
void myFunc_2(...)
{ ... #pragma unroll
for (int i<0; i<2;i++)
...
}
void myFunc_3(...)
{ ... #pragma unroll
for (int i<0; i<3;i++)
...
}
等。 并且能够通过名称从某个函数调用这些函数,包括其中的常量
if (x==2)
myFunc_2();
但是根据我的理解,做这样的事情的一个问题是,如果它不在函数内部,这样的代码不会扩展,只是给出错误。
答案 0 :(得分:3)
您可以在函数名称中使用宏参数。
#define create_myfunc(number) \
void myFunc_##number(...) \
{ \
#pragma unroll \
for (int i = 0; i < number; i++) \
}
请注意,我改变了i&lt; 0到i = 0.是这个意图吗?
答案 1 :(得分:3)
您可以将所有函数指针存储在一个数组中,然后使用数组的索引调用适当的函数。
此外,如果所有优化的函数都允许这样的hack,您可以在汇编程序中编写自己的函数来覆盖所有情况。