有人可以提供简单的c程序来查找我的机器是16位还是32位还是64位?
答案 0 :(得分:4)
如果您只关心Linux操作系统,那么您可以使用uname()调用。您可以将struct utsname传递给此API并获取详细信息。您可以获得有关以下网址的更多详细信息
http://linux.die.net/man/2/uname
另外,查看uname命令源代码可以为您提供更多帮助。
答案 1 :(得分:1)
作为一个“实现细节”,这正是C语言的正式规范中遗漏的东西;鉴于编译器理论上应该隐藏这一点,你在技术上可以做的任何事情都取决于“未定义的非标准行为。”
这是迂腐的答案。实际的答案是,您可以使用sizeof(int)
通过任何合理的编译器确定特定体系结构的寄存器宽度。
请注意,这是在编译时确定的,而不是运行时,因此它会告诉您应用程序是否在32位或64位(或任何位)模式下编译,而不是它是例如在模拟32位x86的64位机器上运行。对于这类信息,您需要查看完全特定于平台的内容,例如CPUID
。
答案 2 :(得分:0)
编译器必须知道编译时它正在构建什么体系结构,因此不需要在运行时确定它。
编译器通常会有一个指定架构的预定义宏;您将不得不测试您打算构建的所有体系结构。 http://predef.sourceforge.net/prearch.html
提供了各种体系结构的此类宏列表答案 3 :(得分:0)
这里有多个层编译器 - 操作系统 - 处理器。 不建议从用户C程序获取机器拱门,因为您没有足够的信息且不可移植。
但是,如果您想知道像Linux这样的特定操作系统,那么link
您可以在程序中使用上述工具的帮助。
答案 4 :(得分:0)
您可以使用预处理器:
#ifdef __i386__
blahblah
#elif __arm__
blahblah
#elif defined(__x86_64__) || defined(_M_AMD64) || defined (_M_X64)
blahblah
#endif
答案 5 :(得分:-2)
这应该有效:
#include <iostream>
int main(int argc, char ** arv){
std::cout << "sizeof(void*)=" << sizeof(void*) << std::endl;
return 0;
}