C语言 怎么区分当前系统是32位还是64位?
我在程序中用#ifdefWIN32不能区分系统是32位还是64位?请问C语言怎么可以区分呢。问题解决了,给出解决办法BOOLIs64bitSystem(){SYSTEM_...
我在程序中用 #ifdef WIN32 不能区分系统是32位还是64位?请问C语言怎么可以区分呢。
问题解决了,给出解决办法
BOOL Is64bitSystem()
{
SYSTEM_INFO si;
GetNativeSystemInfo(&si);
if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 )
return TRUE;
else
return FALSE;
}
顺便说明一下为什么sizeof 和 #ifdef WIN32都会失败的原因,因为这两种方法都是在编译的时候值就已经确定。 展开
问题解决了,给出解决办法
BOOL Is64bitSystem()
{
SYSTEM_INFO si;
GetNativeSystemInfo(&si);
if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 ||
si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 )
return TRUE;
else
return FALSE;
}
顺便说明一下为什么sizeof 和 #ifdef WIN32都会失败的原因,因为这两种方法都是在编译的时候值就已经确定。 展开
4个回答
展开全部
32位和64位指的是操作系统的位数,映射到C语言中,最直观的就是指针类型占用的字节数。
1 32位系统:
地址占32位,所以指针类型同样占32位,即4字节。
2 64位系统:
地址占64位,所以指针类型同样占64位,即8字节。
于是,只需要判断任意一个指针的sizeof值,即可获取到位数。
如
int main()
{
int bits= sizeof(char *);
if(bits == 4) printf("32位\n");
else if(bits == 8) printf("64位\n");
else printf("others, bits = %d\n", bits);
}
展开全部
有一个简单的方法来确定所编译的程序的位数,判断指针变量的长度。
int *pi;
if(sizeof(pi)==4) printf("32 bits");
if(sizeof(pi)==8) printf("64 bits");
int *pi;
if(sizeof(pi)==4) printf("32 bits");
if(sizeof(pi)==8) printf("64 bits");
追问
我的程序是在32位系统下面编译的,然后拿到64位系统下执行。
#ifdef WIN32
sizeof 判断 都失败了
#define _B_WIN_32_ ((sizeof(int) == 4) ? TRUE : FALSE)
请问还有没有别的方法
追答
你的意思是判断程序所运行的操作系统的位数吧,我想可以调用windows相关API判断。
我提供的只是判断本程序的位数。你的sizeof(int)也一样。
要分清是程序的位数 or 操作系统的位数。windows64位可以运行32位的程序。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
简单说,C语言本身是做不到这个工作的,只能人工判定,根据机器和编译器的位数定义宏
#ifdef WIN32
#else
#endif
#ifdef WIN32
#else
#endif
追问
我开始也是这么做的,但是我的程序是32位下面编译的,拿到64位系统下运行,这个#ifdef WIN32一样成功,意思就是不能区分是64位 还是32位。
上面仁兄说的 sizeof我也试过 一样不行。
追答
32位下编译出来的代码在64位上是不能用的,你加了宏定义也没用,因为宏定义是在编译时进行确定的,不是在运行时确定的。所以,只能重新在64位机上进行重新编译才有可能能运行(要看你的代码可移植度够不够高!)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
经过对include的翻查,最后确定gcc以__i386__来进行32位编码,而以__x86_64__来进行64位编码;64位的gentoo下stdio.h就是个简单例子(i不晓得其它的是不是?);而且在bits/wordsize.h中对这两个定义进行了综合,以__WORDSIZE的值来表示机器类型,大家可以直接去看看
例子
#include <stdio.h>
int main(int argc ,char* argv)
{
#ifdef __x86_64__
printf("__x86_64__");
#elif __i386__
printf("__i386__");
#endif
return 0;
}
例子
#include <stdio.h>
int main(int argc ,char* argv)
{
#ifdef __x86_64__
printf("__x86_64__");
#elif __i386__
printf("__i386__");
#endif
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询