繁体   English   中英

在C中的条件语句中评估结构

[英]Evaluating a struct inside of a conditional statement in C

有没有一种方法可以整体评估条件语句内部的struct变量,从而无需写出每个元素? 例如,给出以下结构:

typdef struct
{
    int a;
    int b;
    int c;
} number;

number foo = {1, 2, 3};

我想评估if语句中的元素,例如:

if (foo.a == 1 && foo.b == 2 && foo.c == 3)
{
    ...
} 

但是,我想评估整个结构而不必列出单个元素。 我知道这是不正确的,但这符合我想要实现的目标:

if (foo == {1, 2, 3})
{
    ...
}

非常感谢您的帮助。 谢谢。

您可以通过复合文字来表示临时结构

(number) { 1, 2, 3 }

因此,更合理的尝试看起来像

if (foo == (number) { 1, 2, 3 })
  ...

但是它不起作用,因为C语言没有提供用于比较结构对象的内置运算符。 您可以改用memcmp

if (memcmp(&foo, &(number) { 1, 2, 3 }, sizeof foo) == 0)
  ...

但是不幸的是,由于结构对象中可能包含的任何填充字节的内容的不可预测性,因此不能保证该方法能正常工作。

在这种情况下,最好的做法是手动编写比较功能

inline bool is_same_number(const number *lhs, const number *rhs)
{
  return lhs->a == rhs->a && lhs->b == rhs->b && lhs->c == rhs->c;
}

然后将其与复合文字功能结合使用

if (is_same_number(&foo, &(number) { 1, 2, 3 }))
  ...

不确定是否需要结构,但是无论哪种方式都只是将其强制转换为unsigned char *并使用立即数,其中0x000000010002是表示3个整数{0 1 2}的立即数的格式。

为了避免字节序问题,只需在运行时将整数声明为一个值,然后表示形式将与系统字节序匹配。

如果不允许运行时定义,则也可以使用宏。

我不会浪费记忆。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM