我尝试在我的日常工作中使用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);
}
答案 0 :(得分:1)
您可以使用弱功能。
https://en.wikipedia.org/wiki/Weak_symbol
默认情况下,没有任何注释,目标文件中的符号为 强大。在链接期间,强符号可以覆盖弱符号 同名。
C ++的同样问题,与C实现Can I re-define a function or check if it exists?
略有不同int __attribute__((weak)) fls(int mask){ .. }
因此,如果系统fls
被定义为强,那么您的fls
实施将被覆盖。