私のルーチンでfls
を使用しようとしています。しかし、すべてのシステムがこの機能を持っているわけではありません。だから私はfls
の自分のバージョンを出荷します。プログラムにシステム実装を使用させて見つけられないようにする方法があれば、私自身の実装を使用しているのでしょうか?findの場合はシステムの実装を使用し、それ以外の場合は独自の実装を使用してください
#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はこれを行うことができるツールの1つですが、他にもたくさんあります。これがうまくいくかどうかは、ビルドシステムとサポートされているシステムによって異なります。あなたはそれについていくつかの詳細を教えてくれますか? – hvd
@ DavidC.Rankinわかりません。このシナリオではこれがベストプラクティスですか? – zack