如何找到机器是32位还是64位

17 c 32bit-64bit

无论如何,从C编程中找出操作系统当前是以32位还是64位模式运行.我正在使用如下的简单程序

int main(void){
     switch(sizeof(void*)){
        case 4: printf("32\n");
        break;
        case 8: printf("64\n");
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?这个代码是否适用于所有场景,例如,如果硬件是64位且操作系统是32位,它会返回什么?我没有机器在diff配置中测试它.

感谢您的建议.

APr*_*mer 8

  • 一般来说,32位可执行文件无法判断它是在64位操作系统还是32位操作系统下运行(有些操作系统可以告诉我,我知道没有,但我没有搜索过), 64位可执行文件不能在32位操作系统下运行(如果你不喜欢32位操作系统模拟运行64位操作系统的处理器......)

  • sizeof()结果主要是一个编译时常量,它不会返回不同的东西,具体取决于它运行的操作系统版本.

你真的想知道什么?


Mat*_*ner 6

严格按照给出的答案回答您的问题:

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void) {
    long wordBits = sysconf(_SC_WORD_BIT);
    if (wordBits == -1 && errno == EINVAL)
        return EXIT_FAILURE;
    else
        printf("%ld\n", wordBits);
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

这适用于任何正确配置glibc的情况,并将寄存器大小打印到stdout,否则返回退出代码1.

也可以看看