cマクロ、または私のcプログラムがCでのコンパイル時に64ビットまたは32ビットとしてコンパイルされたかどうかを確認できる何らかの方法はありますか?
コンパイラ:チェックが必要なGCCオペレーティングシステム:Unix/Linux
また、OSが64ビットに対応しているかどうかをプログラムの実行時に確認するにはどうすればよいですか?
この「gcc」にタグを付けたので、試してください
#if __x86_64__
/* 64-bit */
#endif
以下は、x86やその他のものを想定していない、正しく移植可能なテストです。
#include <stdint.h>
#if UINTPTR_MAX == 0xffffffff
/* 32-bit */
#Elif UINTPTR_MAX == 0xffffffffffffffff
/* 64-bit */
#else
/* wtf */
#endif
言語弁護士をしつこくする簡単なもの。
if(sizeof (void *) * CHARBIT == 64) {
...
}
else {
...
}
これは定数式であるため、最適化コンパイラはテストをドロップし、実行可能ファイルに適切なコードのみを配置します。
GLIBC自体がこれを使用します(inttypes.h
):
#if __WORDSIZE == 64
このUINTPTR_MAX値を使用して、ビルドタイプを確認します。
#include <stdio.h>
#include <limits.h>
#if UINTPTR_MAX == 0xffffffffffffffffULL
# define BUILD_64 1
#endif
int main(void) {
#ifdef BUILD_64
printf("Your Build is 64-bit\n");
#else
printf("Your Build is 32-bit\n");
#endif
return 0;
}
同じプログラムソースを64ビットコンピューター、32ビットコンピューター、36ビットコンピューターなどでコンパイルできます(できるはずです)。
したがって、ソースを見るだけでは、それが良いものである場合、どのようにコンパイルされるかはわかりません。ソースがあまり良くない場合、プログラマがそれをコンパイルするために使用されると想定したものを推測できる可能性があります。
あなたへの私の答えは:
ソースファイルに必要なビット数をチェックする方法があります不正なプログラムの場合のみ。
コンパイルするビット数に関係なく、プログラムが機能するように努力する必要があります。