[英]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.