C++ 什么';s WIN32与C+中定义的"U WIN32"之间的区别+;
我知道C++ 什么';s WIN32与C+中定义的"U WIN32"之间的区别+;,c++,c-preprocessor,C++,C Preprocessor,我知道WIN32表示WIN32编译,但是\u WIN32用于什么?WIN32是一个您可以在自己的代码中使用甚至定义的名称,因此可能与Microsoft的用法冲突\u WIN32是为实现者保留的名称(在本例中为Microsoft),因为它以下划线和大写字母开头-不允许在自己的代码中定义保留名称,因此不会有冲突。WIN32是一个可以在自己的代码中使用甚至定义的名称,因此可能会与Microsoft的使用发生冲突\u WIN32是为实现者保留的名称(在本例中为Microsoft),因为它以下划线和大写字
WIN32
表示WIN32编译,但是\u WIN32
用于什么?WIN32
是一个您可以在自己的代码中使用甚至定义的名称,因此可能与Microsoft的用法冲突<代码>\u WIN32是为实现者保留的名称(在本例中为Microsoft),因为它以下划线和大写字母开头-不允许在自己的代码中定义保留名称,因此不会有冲突。WIN32
是一个可以在自己的代码中使用甚至定义的名称,因此可能会与Microsoft的使用发生冲突<代码>\u WIN32是为实现者保留的名称(在本例中为Microsoft),因为它以下划线和大写字母开头-不允许在自己的代码中定义保留名称,因此不会发生冲突。WIN32是用户定义的标志,某些标头可能需要它。
_WIN32由visual C/C++编译器自动定义。因为它以一个u开头,后跟一个大写字符,所以它由实现保留(意味着C/C++工具链提供程序)
我更喜欢使用(读取)\u WIN32,对我来说似乎更安全。WIN32是一个用户定义的标志,某些标题可能需要它。 _WIN32由visual C/C++编译器自动定义。因为它以一个u开头,后跟一个大写字符,所以它由实现保留(意味着C/C++工具链提供程序) 我更喜欢使用(阅读)\u WIN32,对我来说似乎更安全。详细说明(尼尔·巴特沃斯和布鲁.tuxedo已经给出了正确的答案):
由SDK或生成环境定义,因此它不使用实现保留命名空间WIN32
由编译器定义,因此它使用下划线将其放置在实现保留的命名空间中\u WIN32
\u UNICODE
/UNICODE
,\u DEBUG
/DEBUG
,或者可能是\u DLL
/DLL
(我认为只有UNICODE的双定义在不同的版本中才有很大的用处)。虽然有时在这些情况下(如\u UNICODE
),它们不是由编译器定义的下划线版本,而是用于控制CRT头的功能:
告诉CRT头,可以是UNICODE或ANSI的CRT名称(例如\u UNICODE
应映射到宽字符变体(\u tcslen()
)wcslen()
对SDK做了类似的事情(将Win32 API映射到它们的“UNICODE
”变体)W
请注意,SDK将在为Mac构建时定义WIN32,因为编译器没有,有点超出了它的界限。我不确定哪些项目使用WIN32 API或针对Mac的编译器-可能是某些版本的Office for the Max或其他东西。详细说明(尼尔·巴特沃斯(Neil Butterworth)和blue.tuxedo已经给出了正确答案):
由SDK或生成环境定义,因此它不使用实现保留命名空间WIN32
由编译器定义,因此它使用下划线将其放置在实现保留的命名空间中\u WIN32
\u UNICODE
/UNICODE
,\u DEBUG
/DEBUG
,或者可能是\u DLL
/DLL
(我认为在不同的版本中,只有UNICODE才有很大的用处)。尽管有时在这些情况下(如\u UNICODE
),它们不是由编译器定义的下划线版本,而是用于控制CRT标题的功能:
告诉CRT头,可以是UNICODE或ANSI的CRT名称(例如\u UNICODE
应映射到宽字符变体(\u tcslen()
)wcslen()
对SDK做了类似的事情(将Win32 API映射到它们的“UNICODE
”变体)W
请注意,在构建时SDK将定义
\u WIN32