如果找到则使用系统实现,否则使用我自己的实现

时间:2017-01-02 06:32:17

标签: c

我尝试在我的日常工作中使用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);
}

1 个答案:

答案 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实施将被覆盖。