我有一个成员函数,它返回CString
对类成员的引用。它看起来像这样:
const CString& GetDateFormat() const { return MyString; }
我使用的是 Visual Studio 2015,每当我键入此函数时,IDE 都会自动将其更改为GetDateFormatA()
. 当我转到函数定义并将鼠标悬停在函数名称上时,我看到:
#define GetDateFormat GetDateFormatA
所以就像VS自动创建了这个宏。
该函数工作正常,但我已经多次看到这个(我的意思是一个函数 - 由其他人编写 - 通过附加一个宏来重命名它A
),我很好奇,有点困惑。目的是什么?它与字符编码或至少与字符串有关吗?
GetDateFormat
是一个 WinAPI 函数,它至少接受一个类型涉及的参数TCHAR
(在这种情况下,它是参数LPCTSTR lpFormat
和LPTSTR lpDateStr
)。所有这些 WinAPI 函数实际上都以两种形式存在:一种带有A
附加,一种带有W
附加。所述A
变体时使用TCHAR
的装置char
,以及W
一个用于当TCHAR
装置wchar_t
。为了支持这一点,<windows.h>
实际上为每个这样的函数定义了一个宏,根据是否_UNICODE
定义来解析一个或另一个。在您的情况下,在 WinAPI 标头中的某处有一个与此类似的定义:
#ifdef _UNICODE
# define GetDateFormat GetDateFormatW
#else
# define GetDateFormat GetDateFormatA
#endif
这是您的程序偶尔引用的GetDataFormatA
来源。您可以在 MSDN 上阅读有关使用TCHAR
s 的更多信息。
如何解决这个取决于你是否需要调用WinAPI的GetDateFormat
并使用它的char
/wchar_t
区别。如果是这样,您将不得不重命名您的函数。但是,我的印象是您对 WinAPI 函数不感兴趣。在这种情况下,解决方案是将以下几行添加到声明您的标头中GetDateFormat
:
#include <windows.h>
#undef GetDateFormat
这样,没有人使用您的标题将看到宏并GetDateFormat
保持GetDateFormat
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句