我试着在我的例程中使用fls
。但是,并不是每个系统都有这个功能。所以,我发布了我自己的版本fls
。我想知道是否有任何方法让程序使用系统实现并找不到,请使用我自己的实现?如果发现使用系统实现,否则使用我自己的实现
#include "strings.h"
#include <stdio.h>
int fls(int mask);
int foo(int N)
{
int tmp = 1 << (fls(N));
return tmp;
}
/*
* Find Last Set bit
*/
int
fls(int mask)
{
int bit;
if (mask == 0)
return (0);
for (bit = 1; mask != 1; bit++)
mask = (unsigned int) mask >> 1;
return (bit);
}
你要求'#ifndef fls'你的fls在这里声明'#endif'预处理器有条件吗? (当然在不同的行上) –
最常见的方式可能是在C中不这样做,而是使用其他工具来检查'fls'是否可用,并且通常通过宏定义来指示程序,有时通过过滤源文件进行编译。 autoconf是可以做到这一点的工具之一,还有很多其他的工具。这是否适用于您取决于您的构建系统和支持的系统。你能提供一些细节吗? – hvd
@ DavidC.Rankin不确定。这是这种情况下的最佳做法吗? – zack