Linux 常见宏和内联函数

Posted by persuez on January 6, 2020

typecheck 宏

   /*
    * Check at compile time that something is of a particular type.
    * Always evaluates to 1 so you may use it easily in comparisons.
    */
   #define typecheck(type,x) \
   ({	  type __dummy; \
   	    typeof(x) __dummy2; \
   	    (void)(&__dummy == &__dummy2); \
   	    1; \
   })

typecheck 宏判断变量 x 的类型是不是 type,如果不是 type 类型,则 (void)(&__dummy == &__dummy2); 语句会使编译器发出警告,如果编译选项中加了 -Werror 则会报错。对于最后的 1 目前没遇到,不懂。 typecheck 运行测试图

PTR_ERR_OR_ZERO 函数

   static inline int __must_check PTR_ERR_OR_ZERO(__force const void *ptr)
   {
      if (IS_ERR(ptr))
        return PTR_ERR(ptr); /* PTR_ERR 宏返回 (long)ptr */
      else
        return 0;
   }

该函数出错返回 ptr,正确则返回 0。另外一个与其相关的宏 PTR_RET 已被遗弃:

   /* Deprecated */
   #define PTR_RET(p) PTR_ERR_OR_ZERO(p)

##