这行代码是什么意思?
#define NAME ((LPCSTR) 5)
如果我定义了一个变量,NAME *tmp
,然后像这样使用它:
((LPCSTR) 5) *tmp;
那个代码有什么作用?
注:LPCSTR
是typedef __nullterminated CONST CHAR *LPCSTR
这是一个简单的转换,它将 5 转换为字符指针 ( __nullterminated CONST CHAR *
)
这可能是标准未定义的行为,但有时会在现实生活中使用。
如您所见,它实际上是一个指针,因此您尝试过的 ,NAME *tmp;
不会编译。
鉴于LPCSTR
类型,我猜这是用于在 EXE 文件中加载资源:
#define MAKEINTRESOURCE(x) ((LPCTSTR)(x)) // in windows.h
#define IDR_FOO 1 // usually in IDE-generated resources.h
HRSRC res = FindResource(NULL,
MAKEINTRESOURCE(IDR_FOO),
MAKEINTRESOURCE(IDR_FOO));
这在 WinAPI 应用程序中很常见,但我从未见过有人自己执行转换而不是使用标准MAKEINTRESOURCE
宏。