我試着在我的例程中使用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