VS中 Debug与Release、_WIN32与_WIN64 difference
- 我最最开始用的VS的配置管理器一直都是这样
一、Debug与Release
- Debug——调试版,生成的.exe中包含很多调试信息,若直接发包,比较大;
- Release——发布版
- 如何区分是Debug编译还是Release编译
- Debug编译有宏定义_DEBUG,若代码中定义了_DEBUG就表示是debug编译,否则是release编译。
Eg: #ifdef _DEBUG
… // 调试时执行,发布时不执行
#else
… //
二、_WIN32与_WIN64
- _WIN32是32位编译; _WIN64是64位编译。
- 之所以要分不同位数编译,根本目的就是提高软件的通用性,
- 如果电脑操作系统位数不同,那么代码中基本数据类型所占的字节也不同。
- 32位平台下long long是64位,而64位平台下,long 64位
- 64位操作系统理论上可运行32位和64位软件,32位操作系统只能运行32位的软件。
那么如何使软件在不同平台运行?方法就是宏定义:
Eg:# ifdef _WIN64
typedef long int int64_t;
# else
extension
typedef long long int int64_t;
- 如何区分是32位还是64位编译
- 在Win32配置下,_WIN32有定义,_WIN64无定义。
- x64 配置下,两者都有定义。
- 可理解为32位不支持64位,而64位可以兼容32位。
- VC下,_WIN32 一定有定义。
- _WIN64 用来判断编译环境是 32位 还是 64位,
- 而WIN32或者_WIN32 用来判断是否 Windows 系统(对于跨平台程序)。
- 一般VS选用win32控制台程序,和win32编译方式,因为兼容性好,可在32位OS运行,也可在64位运行。
- 应用场合
#ifdef _WIN64 // 说明是64位编译方式
typedef long long intptr_t;
#else
typedef _W64 int intptr_t;
#endif