簡體   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