C中具有相同功能的多个副本

时间:2013-08-14 10:36:01

标签: visual-c++

我编写了一个代码,用于进行一些非常快速的计算。我假设我知道一定数量(因为我可以放心地认为它是< 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();

但是根据我的理解,做这样的事情的一个问题是,如果它不在函数内部,这样的代码不会扩展,只是给出错误。

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,您可以在汇编程序中编写自己的函数来覆盖所有情况。