将指针与负值进行比较
发布时间: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,并通过单独的机制提供错误代码,例如指向存储错误代码的位置的附加参数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |