当前位置:  开发笔记 > 编程语言 > 正文

在C++中定义的WIN32和_WIN32有什么区别

如何解决《在C++中定义的WIN32和_WIN32有什么区别》经验,为你挑选了3个好方法。

我知道这WIN32显然是表示win32编译但是需要_WIN32什么?



1> Michael Burr..:

详细说明(Neil Butterworth和blue.tuxedo已经给出了正确答案):

WIN32 由SDK或构建环境定义,因此它不使用实现保留命名空间

_WIN32编译器定义,因此它使用下划线将它放在实现保留的命名空间中

你会发现一组类似的双重定义具有几乎相同的名称和类似的用途,例如_UNICODE/ UNICODE,_DEBUG/ DEBUG或者_DLL/ DLL(我认为只有UNICODE才能在不同的版本中得到很多用处).虽然有时在这些情况下(如_UNICODE),而不是下划线的版本被定义编译器,它们被用来控制一下CRT头做:

_UNICODE告诉CRT标题CRT名称可以是Unicode或ANSI(例如_tcslen()应该映射到宽字符变体(wcslen())

UNICODE做类似的SDK(将Win32 API映射到他们的" W"变体)

本质上,带有下划线的版本由编译器团队控制或使用,没有下划线的版本由编译器之外的团队控制/使用.当然,由于与过去版本的兼容性以及一个团队或另一个团队的一般错误,可能会有很多重叠.

我发现它很混乱 - 并且发现它们在用户代码中几乎可以互换使用(通常,当你看到一个被定义时,你会看到另一个被定义在同一个地方,因为如果你需要一个你需要另一个).就个人而言,我认为您应该使用没有下划线的版本(除非您正在编写编译器的运行时),并确保在定义时都定义它们(无论是通过听众还是编译器开关).


请注意,SDK将定义_WIN32何时为Mac构建,因为编译器没有,超出它的界限.我不确定哪些项目使用Win32 API和针对Mac的编译器 - 可能是某些版本的Office for the Max或其他东西.



2> 小智..:

WIN32是一个可以使用的名称,甚至可以在您自己的代码中定义,因此可能会与Microsoft的用法发生冲突._WIN32是为实现者(在本例中为Microsoft)保留的名称,因为它以下划线和大写字母开头 - 您不能在自己的代码中定义保留名称,因此不会发生冲突.



3> bltxd..:

WIN32是用户定义的标志,某些标头可能需要该标志._WIN32由可视化C/C++编译器自动定义.因为它以_后跟一个大写字符开头,所以它由实现保留(意味着C/C++工具链提供者).

我更喜欢使用(阅读)_WIN32,对我来说似乎更安全.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有