加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

将指针与负值进行比较

发布时间:2020-12-16 09:47:49 所属栏目:百科 来源:网络整理
导读:我可以将指向结构的指针强制转换为有符号值,以返回不同类型的错误. C标准是允许这个还是未定义的行为. typedef enum lError{ l_OK = 0,l_ERROR = -1,l_ABORT = -2,l_HALT = -3}L_STATUS;typedef struct dataCards{ int card1; int card2; char flag;}DATACAR
我可以将指向结构的指针强制转换为有符号值,以返回不同类型的错误. C标准是允许这个还是未定义的行为.

typedef enum lError
{
  l_OK = 0,l_ERROR = -1,l_ABORT = -2,l_HALT = -3
}L_STATUS;


typedef struct dataCards
{
  int card1;
  int card2;
  char flag;
}DATACARD;

DATACARD dataCardG;

DATACARD *getCard(int i)
{
  if(i == 1)
    return &dataCardG;
  else if (i == 2)
    return (DATACARD *)l_ERROR;
  else if (i==3)
    return (DATACARD *)l_ABORT;
  else
   return (DATACARD *)l_HALT;

}

int main ()
{
  DATACARD *ptr = NULL;

  ptr = getCard(3);
  if(ptr < (DATACARD *) 1)   /* Is this allowed or undefined behaviour */
    printf("Card failedn");

}

我怎样才能使这个条件有效?

解决方法

C标准“允许”这个,但它不支持它.也就是说,它不会定义尝试此操作时发生的行为.您的C实现也可能无法定义尝试此操作时发生的行为.

不要这样做.

您可以通过创建实际对象来合法地完成此工作:

DATACARD okay,error,abort,halt

#define Okay  (&okay)
#define Error (&error)
#define Abort (&abort)
#define Halt  (&halt)

如果DATACARD更大并且您不想浪费这些额外物体的空间,那么还有其他技术可用.通常,像getCard这样的例程将被定义为在出现错误时返回NULL,并通过单独的机制提供错误代码,例如指向存储错误代码的位置的附加参数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读