1

这行代码是什么意思?

#define NAME ((LPCSTR) 5)

如果我定义了一个变量,NAME *tmp,然后像这样使用它:

((LPCSTR) 5) *tmp;

那个代码有什么作用?

注:LPCSTRtypedef __nullterminated CONST CHAR *LPCSTR

4

2 回答 2

3

这是一个简单的转换,它将 5 转换为字符指针 ( __nullterminated CONST CHAR *)

这可能是标准未定义的行为,但有时会在现实生活中使用。

  • 要寻址您机器上的特定物理地址 - 例如,内核必须这样做才能配置卡、onbard 芯片等......
  • 要在参数中发送特殊值或返回值。例如,调用通常需要第二个参数中的指针,但如果您传递“5”,则意味着其他内容。

如您所见,它实际上是一个指针,因此您尝试过的 ,NAME *tmp;不会编译。

于 2012-09-26T09:45:48.280 回答
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宏。

于 2014-01-03T01:13:33.847 回答