現在、既存のCライブラリをクリーンアップして、恥知らずに公開しています。
プリプロセッサマクロは、コンパイル時にNPOT
特定の積分定数式の2の次に大きい累乗を計算するために使用されます。マクロは通常、直接初期化で使用されます。他のすべての場合(たとえば、変数パラメーターを使用する場合)、同じ関数を持つインライン関数があります。
しかし、ユーザーが変数を渡すと、アルゴリズムは巨大なマシンコードに拡張されます。私の質問は 、ユーザーが整数定数式以外のものをマクロに渡さないようにするにはどうすればよいですか?
#define NPOT(x) complex_algorithm(x)
const int c=10;
int main(void) {
int i=5;
foo = NPOT(5); // works, and does everything it should
foo = NPOT(c); // works also, but blows up the code extremely
foo = NPOT(i); // blows up the code also
}
私がすでに試したこと:
- マクロをに定義し
#define NPOT(x) complex_algorithm(x ## u)
ます。それはまだ機能し、変数パラメータに対して-ほとんど役に立たない場合でも-コンパイラエラーをスローします。iuのような変数がない限り...汚い、危険な、それを望まない。 - ドキュメントは、ほとんどのユーザーには機能しませんでした。