0
この#define ULONG_BIT
評価((COUNT_BITS(ULONG_MAX))
)のようなものcでマクロの評価を強制できますか?
#define COUNT_BITS_4b(Val) \
((Val) & 0x1) + (((Val) >> 1) & 0x1) + (((Val) >> 2) & 0x1) + (((Val) >> 3) & 0x1)
#define COUNT_BITS_8b(Val) \
(COUNT_BITS_4b(Val) + COUNT_BITS_4b(Val >> 4))
#define COUNT_BITS_16b(Val) \
(COUNT_BITS_8b(Val) + COUNT_BITS_8b(Val >> 8))
#define COUNT_BITS_32b(Val) \
(COUNT_BITS_16b(Val) + COUNT_BITS_16b(Val >> 16))
#define COUNT_BITS_32b(Val) \
(COUNT_BITS_16b(Val) + COUNT_BITS_16b((Val >> 31) >> 1))
....
ちょっと重い足ソリューションです
#if COUNT_BITS_128b(ULONG_MAX) == 32
#define ULONG_BIT 32
#elif COUNT_BITS_128b(ULONG_MAX) == 33
#define ULONG_BIT 33
#elif COUNT_BITS_128b(ULONG_MAX) == 34
#define ULONG_BIT 34
....
#elif COUNT_BITS_128b(ULONG_MAX) == 128
#define ULONG_BIT 128
#endif
任意回答の場合は
あなたが何を求めているのか分かりません。マクロは「評価」されません。プリプロセッサは単にテキスト置換を実行します。 –
'#ULONG_BIT COUNT_BITS_128b(ULONG_MAX)'で十分でしょうか?これは(非常に複雑ですが、依然として)*定数式*です。最適化コンパイラは単純な定数に変換されます。 –
@Basile Starynkevitchアプリケーション全体でCOUNT_BITS_128b(ULONG_MAX)として定義されたULONG_BITを使用すると、マクロサイズの制限や何かを打つことはありませんか? – Neko