在编译时选择一个函数

Fed*_*ico 1 c function c-preprocessor

在我的C项目中,我有五个不同的函数(具有相同的名称),它们以不同的方式实现一种算法.在编译时,我只需要选择其中一个函数.我可以使用#define一堆和一堆来实现这个#ifndef吗?有没有更好的方法来做到这一点?

Ale*_*x R 15

可能更优雅的方法是用5个不同的名称(例如f1,f2,f3,f4,f5)定义它们,但总是使用相同的不同名称(例如f)调用函数.然后编译类似于:

gcc -Df=f1

这将编译任何对f()的调用作为对f1()的调用.


Rob*_*oli 5

是.你所做的就是在代码中这样说:

#if defined(FUNC1)
    ...func1 here
#elif defined(FUNC2)
    ...func2 here
...ect. ect.
#endif
Run Code Online (Sandbox Code Playgroud)

然后在编译时添加gcc选项-DFUNCX例如:

gcc -DFUNC1 -o myprogram myfile.c
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过更改放在-D选项中的值来选择要编译的函数.这是很常见的做法.

  • 一个小问题是,如果您不小心定义了FUNCx和FUNCy,则可以调用多个函数.要解决此问题,您应该使用"#if defined(FUNC1)","#elif defined(FUNC2)"等. (3认同)