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

这一行代码是什么意思?

#define NAME ((LPCSTR) 5) 

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

 ((LPCSTR) 5) *tmp; 

这个代码是做什么的?

注意: LPCSTRtypedef __nullterminated CONST CHAR *LPCSTR

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

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

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

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