什么是这样的宏?

时间:2010-10-12 13:46:05

标签: c++ macros

#define ValidateReadPtr(p,cb) 0

我想不出这种宏的用例,你怎么样?

4 个答案:

答案 0 :(得分:6)

我只能在Windows Mobile SDK的ValidateReadPtr()标题中找到wxdebug.h宏(即使MSDN表明它是DirectShow API的一部分)。

wxdebug.h中,它被定义为:

#define ValidateReadPtr(p,cb) \
    {if(IsBadReadPtr((PVOID)p,cb) == TRUE) \
        DbgBreak("Invalid read pointer");}

我怀疑在您的项目中,由于以下一个或两个原因,它被定义为0

  • 使得使用它的代码即使wxdebug.h标头不可用(即,不使用Windows Mobile SDK)也会编译
  • IsBadReadPtr()现在被视为不应使用的危险API。 IsBadreadPtr()的文档说,“重要此函数已过时,不应使用。尽管它的名称,它不保证指针有效或指向的内存可以安全使用。有关更多信息,见备注......“。 Raymond Chen撰写了一篇关于IsBadReadPtr()IsBadXxxPtr should really be called CrashProgramRandomly
  • 的问题的文章

答案 1 :(得分:4)

它可能用于其他东西,然后被重新定义为0

这就是宏的优点,您可以在代码中使用它们,然后,一个简单的重新定义就足以改变代码中所有宏的出现。

现在可能发生的是程序员希望验证(ValidateReadPtr)始终返回FALSE(C / C ++中的0)。

答案 2 :(得分:4)

答案 3 :(得分:0)

if (!ValidateReadPtr(p,cb))
   printf("Your ReadPtr is valid\n");