32位还是64位?使用C代码

n1k*_*1lp 4 c

有没有办法通过在C中写入一些代码来确定机器是32位还是64位?

pmg*_*pmg 8

#include <limits.h>
/* ... */
printf("This machine's pointers to void, in a program "
       "compiled with the same options as this one and "
       "with the same compiler, use %d bits\n",
    (int)sizeof (void*) * CHAR_BIT);
Run Code Online (Sandbox Code Playgroud)

  • 完全没用。为 32 位平台编译您的程序并在 64 位机器上运行它。它永远不会知道机器是 64 位的。 (2认同)
  • 真正的问题是他想知道的原因.如果他在32位机器上编译但是在64位机器上运行,他可能想知道他的代码是用32位指针运行的; 那不是没用的. (2认同)

AnT*_*AnT 7

如果用"C中的一些代码"表示标准C代码,则答案是否定的,这是不可能的.对于C程序,它可以看到的"世界"完全由实现(由编译器)创建.编译器可以完全模拟任何与底层硬件完全无关的"世界".

例如,您可以在64位计算机上运行32位编译器,并且您永远无法从程序中检测到这是64位计算机的事实.

您可以找到有关该机器的任何信息的唯一方法是访问一些非标准设施,例如某些特定于操作系统的API.但这远远超出了C语言的范围.

不用说,基于sizeof其他标准语言设施的其他答案方法中已经提出的建议甚至不能近距离地检测机器的位数.相反,他们会检测编译器实现提供的平台的位数,这在一般情况下是完全不同的.

  • 正确+1; 然而,这个"世界"的属性显然很重要,因为它们直接影响程序的执行,可能是零4正在寻找的东西; 我的水晶球不清楚那个;) (2认同)