导航:首页 > 源码编译 > vc编译系统是多少位

vc编译系统是多少位

发布时间:2022-04-20 03:16:23

A. vc++是多少位的编译器啊,怎么能编译16位的控制台程序

32位,兼容16位

B. C语言问题 求位前辈 对于操作系统的字长是多少位 和C语言的关系不是很很了解

首先需要知道的是CPU字长(机器字长),这个是硬件决定的,指cpu同时参与运算的二进制位数,机器字长直接决定着机器可寻址的虚拟空间地址大小。常见的机器字长有16位,32位,64位等。
其次是操作系统字长。 操作系统字长就是操作系统的位数,对于电脑操作系统来说,有32位64位两种。操作系统字长是软件的概念,依赖于硬件,但不一定相同。64位机器字长上可以安装32位的操作系统,但是反之则不行。即操作系统字长不可高于机器字长。
C语言的编译器是运行于操作系统之上的软件,所以编译器依赖于操作系统。编译器字长不可高于操作系统。
C语言编译器的字长,影响C语言的编译运行,由C语言编译器编译出的可执行文件的运行字长,不能高于编译器字长。
于是,综合这几个的关系,就是
C语言编译出的软件字长 ≤ C语言编译器字长 ≤ 操作系统字长≤机器字长。

C. VC++6.0编译系统中,char这种数据类型的取值范围是-128~127.这是怎样计算的

char是单
字节

符号
类型,即数据有8位
二进制数
,而且最高位用作符号位.
10000000-11111111表示-128到-1,00000000-01111111表示0-127

D. VC++6.0编译出的程序支持系统到多少

VC6编译的是win32的32位系统程序,目前win7、win8都是兼容x64/x86模式的系统,标准win32程序可以在上面运行(以兼容模式)。
当然,要看程序使用了什么组件、控件和系统接口,有些接口在新系统下有了调整,那么这个程序就不能使用了。一般简单的逻辑和界面程序都是没什么问题的。

简单的说,VC6编译的程序,和XP下大部分软件没有什么不同,多数可以在win7/win8下使用,而少部分不可使用。

E. vc6.0环境下的程序可以在vs2010中进行64位编译吗

越复杂的程序,这种升级难度越高。
小程序,通过小改动甚至不改动,也可以完成64位编译,但大型程序,很多甚至没有可升级性,不如重做。
一般来说,如果不是必要,推荐升级到2010后进行32位编译,这样多数程序可以直接编译通过(除非使用了不再兼任的功能),但升级64位,涉及的东西太多,很难直接完成编译。

F. vc6.0程序怎样编译成64位

Microsoft Platform SDK 2001年 11 月版或更高版本
VisualC++ 6.0
步骤一:安装最新适合xp的SDK
通过双击SDK文件夹下面的Setup.Exe安装Microsoft Platform SDK到硬盘任意目录后,安装程序会在开始菜单中生成Microsoft Platform SDK的快捷方式。单击"start->AllPrograms->Microsoft Platform SDK for Windows Sever 2003 SP1->Open BuildEnvironment Window->Set Windows XP 64 Build Environment->Set Windows XP64 Build Environment (Debug) 此时将显示一个控制台窗口,其中带有为 64 位内部版本设置的内部版本环境。

步骤二:从64位内部版本环境启动Visual C++6.0:
启动MicrosoftPlatform SDK后,直接在命令行输入msdev/useenv,此时将显示 Visual C++ 6.0 IDE,其中已经为 64 位内部版本环境设置了 include、library和executable 目录。 (如果Msdev.exe不在路径中,请将文件夹更改到 \Microsoft Visual Studio\Common\Msdev98\Bin文件夹,然后运行 msdev/useenv)
Visual C++启动成功后,可以通过菜单Tools->Options->Directories查看Include files和Library file的默认路径应为Microsoft Platform SDK文件夹下的include和lib文件夹,此时为打开正确的64位虚拟编译环境。否则需重启打开。

步骤三:添加 64位调试配置:
♦在 Visual C++ IDE中,打开现有的 32 位项目(例如,MyApplication)。
♦在"Build"菜单上,单击"Configurations"。
♦在"Configurations"对话框中,单击"add"。
♦在"Add Project Configuration"对话框中,将"Configuration"设置为 Debug64,单击"OK",然后单击"Close"。

步骤四:将活动配置设置为 64位:
♦在"Build"菜单上,单击"Set Active Configuration"。
♦单击"MyApplication- Win32 Debug64",然后单击"OK"。

步骤五:修改编译器或链接器选项:
♦在"Project"菜单上,单击"settings"。
♦在"project settings"对话框中,单击"General"选项卡。在"outputdirectories"下,在"Intermediate files"框和"output files"框中键入 Debug64。

♦在"C/C++"选项卡上,在"Debug info"列表中选择"ProgramDatabase(编译器选项,/Zi)"。在Project Options中去掉/GZ,加入/Wp64。

♦在"Link"选项卡上,在"Project Options"框中将 /machine:I386更改为/machine:AMD64。在Object/librarymoles中加入bufferoverflowu.lib,如果不加bufferoverflowu.lib,链接时会报错。

♦在"View"菜单上,单击"Workspace"。 要从项目中删除MyApplication.hpj 文件。

♦生成64位程序:
注:在32位机上只能编译连接生成64位程序,而不能进行调试。



G. 在VC++6.0的编译器中,整形和长整型的长度各是多少

用下面的代码可以计算:
printf("size of int is %d.\n", sizeof(int));
printf("size of long int is %d.\n", sizeof(long int));
可以看出在vc中,int 和 long int都是4个字节。
希望能帮到你。

H. 如何在各个版本的VC及64位下使用CPUID指令

一、推荐使用__cpuid、__cpuidex等Intrinsics函数

在32位模式下,我们可以使用内嵌汇编来调用cpuid指令。但在64位模式下,VC编译器不支持内嵌汇编。
于是微软提供了Intrinsics函数——编译器会将Intrinsics函数编译为对应的机器指令,而且同时支持32位和64位。
例如CPUID指令的对应Intrinsics函数是——

[cpp] view plain
// http://msdn.microsoft.com/en-us/library/hskdteyh.aspx
void __cpuid(
int CPUInfo[4],
int InfoType
);

void __cpuidex(
int CPUInfo[4],
int InfoType,
int ECXValue
);

__cpuidex函数的InfoType参数是CPUID指令的eax参数,即功能ID。ECXValue参数是CPUID指令的ecx参数,即子功能ID。CPUInfo参数用于接收输出的eax, ebx, ecx, edx这四个寄存器。
早期的CPUID功能只需要一个功能ID参数(eax),这时可以使用__cpuid函数。
后来CPUID的功能越来越强大,一个功能ID参数(eax)参数不够用,于是加了一个子功能ID(ecx)参数,这时应该采用__cpuidex。

二、用条件编译判断VC编译器对Intrinsics函数的支持性(_MSC_VER)

在__cpuid、__cpuidex等Intrinsics函数时,会遇到以下问题——
1.低版本的VC编译器没有intrin.h头文件。【注】:只有VC2005(或更高)才拥有intrin.h,支持__cpuid。
2.低版本的VC编译器不支持__cpuidex。【注】:只有VC2008的部分版本及VS2010(或更高)的intrin.h中才有__cpuidex。

这时可以使用条件编译来判断VC编译器的版本。
_MSC_VER是微软C/C++编译器——cl.exe编译代码时预定义的一个宏,它的值表示cl的版本,它的类型是“int”。例如——
#if _MSC_VER >=1200 // VC++6.0以上
#if _MSC_VER >=1300 // VC2003以上
#if _MSC_VER >=1400 // VC2005以上
#if _MSC_VER >=1500 // VC2008以上
#if _MSC_VER >=1600 // VC2010以上

例如发现_MSC_VER大于等于1400时,我们可以#include <intrin.h>。然后再利用_MSC_VER进一步判断__cpuid、__cpuidex的支持性。

三、用条件编译判断64位模式(_WIN64)

使用_WIN64这个预处理宏可用来判断目标平台是不是64位。
虽然在编译x64平台的程序时,编译器会自动推导出_WIN64。但是Visual Studio的语法高亮不清楚这些,它有可能仍是按32位代码来做语法高亮。所以,建议还是手动在项目的预处理宏中增加_WIN64。

四、32位下用内嵌汇编实现__cpuidex函数

在32位模式下,我们可以使用内嵌汇编来实现__cpuidex函数。代码如下——

[cpp] view plain
void __cpuidex(INT32 CPUInfo[4], INT32 InfoType, INT32 ECXValue)
{
if (NULL==CPUInfo) return;
_asm{
// load. 读取参数到寄存器
mov edi, CPUInfo; // 准备用edi寻址CPUInfo
mov eax, InfoType;
mov ecx, ECXValue;
// CPUID
cpuid;
// save. 将寄存器保存到CPUInfo
mov [edi], eax;
mov [edi+4], ebx;
mov [edi+8], ecx;
mov [edi+12], edx;
}
}

五、全部代码

全部代码——

[cpp] view plain
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>

#if _MSC_VER >=1400 // VC2005才支持intrin.h
#include <intrin.h> // 所有Intrinsics函数
#endif

char szBuf[64];
INT32 dwBuf[4];

#if defined(_WIN64)
// 64位下不支持内联汇编. 应使用__cpuid、__cpuidex等Intrinsics函数。
#else
#if _MSC_VER < 1600 // VS2010. 据说VC2008 SP1之后才支持__cpuidex
void __cpuidex(INT32 CPUInfo[4], INT32 InfoType, INT32 ECXValue)
{
if (NULL==CPUInfo) return;
_asm{
// load. 读取参数到寄存器
mov edi, CPUInfo; // 准备用edi寻址CPUInfo
mov eax, InfoType;
mov ecx, ECXValue;
// CPUID
cpuid;
// save. 将寄存器保存到CPUInfo
mov [edi], eax;
mov [edi+4], ebx;
mov [edi+8], ecx;
mov [edi+12], edx;
}
}
#endif // #if _MSC_VER < 1600 // VS2010. 据说VC2008 SP1之后才支持__cpuidex

#if _MSC_VER < 1400 // VC2005才支持__cpuid
void __cpuid(INT32 CPUInfo[4], INT32 InfoType)
{
__cpuidex(CPUInfo, InfoType, 0);
}
#endif // #if _MSC_VER < 1400 // VC2005才支持__cpuid

#endif // #if defined(_WIN64)

// 取得CPU厂商(Vendor)
//
// result: 成功时返回字符串的长度(一般为12)。失败时返回0。
// pvendor: 接收厂商信息的字符串缓冲区。至少为13字节。
int cpu_getvendor(char* pvendor)
{
INT32 dwBuf[4];
if (NULL==pvendor) return 0;
// Function 0: Vendor-ID and Largest Standard Function
__cpuid(dwBuf, 0);
// save. 保存到pvendor
*(INT32*)&pvendor[0] = dwBuf[1]; // ebx: 前四个字符
*(INT32*)&pvendor[4] = dwBuf[3]; // edx: 中间四个字符
*(INT32*)&pvendor[8] = dwBuf[2]; // ecx: 最后四个字符
pvendor[12] = '\0';
return 12;
}

// 取得CPU商标(Brand)
//
// result: 成功时返回字符串的长度(一般为48)。失败时返回0。
// pbrand: 接收商标信息的字符串缓冲区。至少为49字节。
int cpu_getbrand(char* pbrand)
{
INT32 dwBuf[4];
if (NULL==pbrand) return 0;
// Function 0x80000000: Largest Extended Function Number
__cpuid(dwBuf, 0x80000000);
if (dwBuf[0] < 0x80000004) return 0;
// Function 80000002h,80000003h,80000004h: Processor Brand String
__cpuid((INT32*)&pbrand[0], 0x80000002); // 前16个字符
__cpuid((INT32*)&pbrand[16], 0x80000003); // 中间16个字符
__cpuid((INT32*)&pbrand[32], 0x80000004); // 最后16个字符
pbrand[48] = '\0';
return 48;
}

int _tmain(int argc, _TCHAR* argv[])
{
//__cpuidex(dwBuf, 0,0);
//__cpuid(dwBuf, 0);
//printf("%.8X\t%.8X\t%.8X\t%.8X\n", dwBuf[0],dwBuf[1],dwBuf[2],dwBuf[3]);

cpu_getvendor(szBuf);
printf("CPU Vendor:\t%s\n", szBuf);

cpu_getbrand(szBuf);
printf("CPU Name:\t%s\n", szBuf);

return 0;
}

六、兼容性说明

VC编译器对32/64位的支持性——
32位:VC6是最早支持编译32位Intrinsics函数的。
64位:VC2005是最早支持编译64位Intrinsics函数的。

本文方法在32位编译器下的兼容性——
__cpuid:兼容VC6(或更高)。
__cpuidex:兼容VC6(或更高)。

本文方法在64位编译器下的兼容性——
__cpuid:兼容VC2005(或更高)。
__cpuidex:兼容VC2010(或更高)。

I. vc判断是32位编译还是64位编译判断是debug编译还是release编译

1.判断是debug编译还是release编译。
如果_DEBUG定义了表示是debug编译,否则是release编译。

2.判断是32位编译还是64位编译。
在 Win32 配置下,_WIN32 有定义,_WIN64 没有定义。在 x64 配置下,两者都有定义。即在 VC 下,_WIN32 一定有定义。
因此,WIN32/_WIN32 可以用来判断是否 Windows 系统(对于跨平台程序),而 _WIN64 用来判断编译环境是 x86 还是 x64。附一个表:

常量\定义 预定义选项 Windows.h VC编译器
WIN32 Win32 √(minwindef.h) ×
_WIN32 × × √
_WIN64 × × x64

最后附上根据相应编译情况,进行有条件的链接相应静态库的示例代码,其实就是一些宏定义语句的使用:

[cpp] view plain在CODE上查看代码片派生到我的代码片
#include "json/json.h"
#ifdef _DEBUG
#ifndef _WIN64
#pragma comment(lib,"json/json_mtd.lib")
#else
#pragma comment(lib,"json/json_mtd_x64.lib")
#endif
#else
#ifndef _WIN64
#pragma comment(lib,"json/json_mt.lib")
#else
#pragma comment(lib,"json/json_mt_x64.lib")
#endif
#endif
using namespace Json;

J. VC2005如何设置可以兼容32位程序的编译

新建项目,点击VisualC++,在右边选择Win32控制台应用程序,输入项目名称,下一步……(按你自己的需要去做,但vc2005的语法和vc6.0的有些差别了,要注意哦~~~)

阅读全文

与vc编译系统是多少位相关的资料

热点内容
pdf抗日战争 浏览:428
安卓手机如何将抖音投屏到电视 浏览:142
安卓皮皮蟹音乐怎么保存本地 浏览:698
墙柱箍筋加密区要求 浏览:108
为什么知乎app看不到图片 浏览:971
tb软件一维数组求和源码 浏览:14
苹果手机丢了如何用安卓机找回 浏览:895
如何把word转换成pdf文档 浏览:216
useradd命令linux 浏览:577
语言编程源码分析 浏览:276
温10怎么设计加密文件 浏览:452
python源码保护数据库密码 浏览:992
组织服务器是什么玩意 浏览:453
linux启动失败的原因 浏览:179
百度算法面试 浏览:926
谷歌框架服务器地址 浏览:381
女程序员蓝天白云 浏览:833
钢铁命令解说 浏览:256
什么购物app是正品 浏览:482
安卓系统断网怎么回事 浏览:460