C - 宏是基于类型名称定义的

时间:2014-03-09 14:58:56

标签: c macros typedef

我正在处理一个具有以下形式的宏的任务。

// Thread identifier type.
typedef int tid_t;
#define TID_ERROR ((tid_t) -1)          /* Error value for tid_t. */

然后,一些类型为tid_t的函数将在失败的情况下返回该宏:

tid_t foo()
{
  if(fail())
  {
    return TID_ERROR;
  }
}

我无法理解这有多大意义:

a)如何从类型名称tid_t - 1减去常量?

b)如何返回先前的结果?我认为类型不是数据,因此不能以相同的方式操作它们。

而且,我需要知道的是:

c)调用函数foo时,如何检查失败?

3 个答案:

答案 0 :(得分:3)

它没有返回或操纵某个类型,它返回 -1,强制转换为该类型。

要检查错误,请与TID_ERROR宏进行比较。

tid_t result = foo();
if(result == TID_ERROR) { handle error }

答案 1 :(得分:3)

#define TID_ERROR ((tid_t) -1)  

它不是从1中减去tid_t,而是将-1强制转换为类型tid_t,然后将其用作此类型的无效值。

答案 2 :(得分:0)

当编译器编译此代码时:

tid_t foo()
{
   if(fail())
   {
       return TID_ERROR;
   }
}

它等于这段代码:

int foo()
{
   if(fail())
   {
       return ((int) -1); // just change the type of `-1` to `int` type.
   }
}