什么是#define NAME((LPCSTR)5)?

时间:2012-09-26 09:27:18

标签: c windows

这行代码意味着什么?

#define NAME ((LPCSTR) 5)

如果我定义一个变量NAME *tmp,那么就像这样使用它:

((LPCSTR) 5) *tmp;

该代码有什么作用?

注意:LPCSTRtypedef __nullterminated CONST CHAR *LPCSTR

2 个答案:

答案 0 :(得分:3)

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

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

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

正如您所看到的,它确实是一个指针,所以您尝试过的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宏。