マクロでsizeof
演算子を使用できますか? #if
はいの場合、どのように?そうでない場合、なぜですか?
sizeof
演算子はプリプロセッサ#if
ディレクティブで機能しますか?
#include <stdio.h>
#include <limits.h>
//#if sizeof(int) == 4
#if UINT_MAX == 0xffffffffU
typedef int int32;
#endif
//#if sizeof(long) > sizeof(int)
#if ULONG_MAX > UINT_MAX
typedef long int64;
#elif ULLONG_MAX > ULONG_MAX
typedef long long int64;
#endif
int main(void) {
int64 i64;
int32 i32;
printf("%u, %u\n", (unsigned)sizeof(i64), (unsigned)sizeof(i32));
return 0;
}
sizeof は # ディレクティブでは機能しません。これらの演算子は、前処理中に定義されていません。それがコードをコンパイルするポイントです。前処理中に sizeof が認識されるようにするには、コンパイラの前に別のコンパイラが必要です。