5

マクロでsizeof演算子を使用できますか? #ifはいの場合、どのように?そうでない場合、なぜですか?

sizeof演算子はプリプロセッサ#ifディレクティブで機能しますか?

4

4 に答える 4

4
#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;
}
于 2013-06-18T19:34:34.980 に答える
0

sizeof は # ディレクティブでは機能しません。これらの演算子は、前処理中に定義されていません。それがコードをコンパイルするポイントです。前処理中に sizeof が認識されるようにするには、コンパイラの前に別のコンパイラが必要です。

于 2013-06-18T19:01:02.847 に答える