这行代码意味着什么?
#define NAME ((LPCSTR) 5)
如果我定义一个变量NAME *tmp
,那么就像这样使用它:
((LPCSTR) 5) *tmp;
该代码有什么作用?
注意:LPCSTR
为typedef __nullterminated CONST CHAR *LPCSTR
答案 0 :(得分:3)
这是一个简单的演员,它将5转换为字符指针(__nullterminated CONST CHAR *
)
这可能是标准的未定义行为,但有时在现实生活中使用。
正如您所看到的,它确实是一个指针,所以您尝试过的NAME *tmp;
将无法编译。
答案 1 :(得分:0)
鉴于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
宏。