将指针与负值进行比较

将指针与负值进行比较,第1张

概述我可以将指向结构的指针强制转换为有符号值,以返回不同类型的错误. 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; c 我可以将指向结构的指针强制转换为有符号值,以返回不同类型的错误. 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 Failed\n");}

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

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

不要这样做.

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

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

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

总结

以上是内存溢出为你收集整理的将指针与负值进行比较全部内容,希望文章能够帮你解决将指针与负值进行比较所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1215458.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存