C/C++ _WIN32/WIN32/_WIN64/WIN64 区别

ChatGPT 3.5 国内中文镜像站免费使用啦

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言 pthread

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 面向对象

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ 设计模式

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C++ STL

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 技术杂谈

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C/C++ 常用函数


一._WIN32/WIN32/_WIN64/WIN64简介

在讲解 _WIN32 / WIN32 / _WIN64 / WIN64 区别之前,首先需要明白下面几点内容:

1. windows 操作系统可分为 x86x64 两种( x86 简称 32 位,x64 简称 64位);

2.可执行程序 exe 同样也分为 32 位应用程序和 64 位应用程序;

3.在 windows64位可执行程序 exe 应用程序只能在 64 位的操作系统运行,而 32 可执行程序应用程序既能在 64 位的操作系统运行,也能在 32 位的操作系统运行,因为微软的向下兼容性做的很到位!


二._WIN32/WIN32/_WIN64/WIN64实战

1.如何区分是 32 位编译还是 64 位编译

在 x86 配置下,_WIN32 有定义,_WIN64 没有定义。
在 x64 配置下,两者都有定义。可以理解为 32 位不支持 64 位,而 64 位可以兼容 32 位。
总之在 VC 下,_WIN32 一定有定义。

因此,_WIN64 用来判断编译环境是 32 位 还是 64 位,而 WIN32 或者 _WIN32 可以用来判断是否 Windows 系统(对于跨平台程序)。

一般 visual studio 选用 win32 控制台程序,和 win32 编译方式,因为兼容性比较好,可以在 32 位操作系统上运行,也可以在 64 位操作系统上运行。


2._WIN32/WIN32/_WIN64/WIN64测试

将下面代码分别使用 visual stdio 中 x86x64 编译,采用不同的编译选项输出的可执行程序 exe 输出内容各不相同,示例代码如下:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C/C++ _WIN32/WIN32/_WIN64/WIN64区别
//@Time:2021/2/26 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/


#include <iostream>
#include <windows.h>
#include <math.h>
using namespace std;
int main(int argc, char *argv[])
{
#ifdef _WIN64
    printf("_WIN64 \n");
#endif
#ifdef _WIN32
    printf("_WIN32 \n");
#endif
#ifdef WIN32
    printf("WIN32 \n");
#endif // WIN32
#ifdef WIN64
    printf("WIN64 \n");
#endif // WIN32
    system("pause");
    return 0;
}

如果 visual studio 使用 x86 编译,那么会生成 32 位可执行程序,控制台显示:

_WIN32
WIN32
请按任意键继续. . .

如果 visual studio 使用 x64 编译,那么会生成 64 位可执行程序,控制台显示:

_WIN64
_WIN32
WIN32
请按任意键继续. . .

三.猜你喜欢

  1. C语言 数组下标越界和内存溢出区别
  2. C语言 使用指针遍历数组
  3. C语言 指针和数组区别
  4. C语言 指针数组和数组指针区别
  5. C语言 野指针
  6. C语言 函数值传递和址传递
  7. 函数不定长参数
  8. C语言 函数指针
  9. C语言 指针函数
  10. C语言 回调函数 callback
  11. C语言 #pragma once
  12. C语言 #include <> 与 #include “” 区别
  13. C语言 const 修饰函数参数
  14. C语言 const 和 define 区别
  15. C语言 va_start / va_end / va_arg 自定义 printf 函数
  16. C语言 main 函数参数 main(int argc, char *argv[])
  17. C语言 结构体struct简介(一)
  18. C语言 结构体struct定义和使用(二)
  19. C语言 结构体struct数组(三)
  20. C语言 结构体struct指针(四)
  21. C语言 结构体struct成员函数(五)
  22. C语言 结构体struct嵌套(六)
  23. C语言 结构体struct值传递和址传递(七)
  24. C/C++ error: cannot assign to non-static data member within const member function ‘xxxx’
  25. C++ 关于类中 const 的使用
  26. C/C++ 条件编译 #ifdef
  27. C/C++ error C2065: “M_PI”: 未声明的标识符
  28. C/C++ error C2027: 使用了未定义类型“std::tuple”
  29. C/C++ vs 没有匹配 if 的非法 else 问题解决办法
  30. C/C++ Visual studio 中文注释导致编译不能通过
  31. C/C++ error C2589: “(”: “::”右边的非法标记
  32. C/C++ error:表达式是必须修改的左值
  33. C/C++ error C4996: ‘getch’: The POSIX name for this item is deprecated. Instead, use the ISO C++ conf
  34. C/C++ error C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型
  35. C/C++ std::string 字符串分割
  36. Visual Studio 中 dumpbin 工具使用
  37. C/C++ error LNK2005:”XXX已经在 XXX.obj 中定义
  38. C/C++ 判断字符串是否为 utf-8 编码
  39. C/C++ uafxcwd.lib(afxmem.obj) : error LNK2005: “void * __cdecl operator new(unsigned int)” (??2@YAPAXI@Z) 已经在 LIBCMTD.lib(new.obj) 中定义解决办法
  40. C/C++ nafxcw.lib(appui1.obj) : error LNK2005: “class CWinApp * __cdecl AfxGetApp(void)” (?AfxGetApp@@YAPEAVCWinApp@@XZ) 已经在 uafxcwd.lib(afxinl2.obj) 中定义
  41. C/C++ error C2027: 使用了未定义类型 std::basic_ifstream<_Elem,_Traits>
  42. C/C++ QT error: dependent ‘xxx’ does not exist.
  43. C/C++ CString 和 char* 相互转换
  44. C/C++ _WIN32/WIN32/_WIN64/WIN64区别

ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容