假设我有两个不同的结构,Struct1 和 Struct2。它们都有不同的元素。如果我这样比较它们会发生什么:
if((Struct1) && (Struct2))
{
doSomething();
}
我刚刚找到了一些具有这种逻辑的代码,并且想知道发生了什么。谢谢!
编辑: Struct1 和 Struct2 都是指向两个不同结构的指针,而不是结构本身。
假设我有两个不同的结构,Struct1 和 Struct2。它们都有不同的元素。如果我这样比较它们会发生什么:
if((Struct1) && (Struct2))
{
doSomething();
}
我刚刚找到了一些具有这种逻辑的代码,并且想知道发生了什么。谢谢!
编辑: Struct1 和 Struct2 都是指向两个不同结构的指针,而不是结构本身。
在 an 中使用结构if
是 C 的非法语法 - 符合标准的编译器不会接受它。换句话说:你不能在布尔上下文中使用结构。
最有可能在您的代码中 - 如果它是真正的代码 -Struct1
不是结构,而是(可能)指针或其他东西。在这种情况下,如果两者都不是 NULL,则将采用 if。
这里有两种可能:
这将检查 st1 和 st2 是否都没有指向 NULL:
struct Struct1 *st1 = ...;
struct Struct2 *st2 = ...;
if (st1 && st2) {
...
}
这是无效代码:
struct Struct1 st1 = ...;
struct Struct2 st2 = ...;
if (st1 && st2) {
...
}
请注意,这也是无效代码:
struct Struct1 st1 = ...;
if (st1) {
...
}
为此,您必须有指针,而不是结构。也就是说,代码可能是:
void somefunc(struct structA *Struct1, struct structB *Struct2)
{
if (Struct1 && Struct2)
{
doSomething(Struct1, Struct2);
}
}
这会在使用它们之前检查两个指针都不是 NULL。你不能直接比较结构,所以如果代码是:
void somefunc(struct structA Struct1, struct structB Struct2)
{
if (Struct1 && Struct2)
{
doSomething(Struct1, Struct2);
}
}
你会有一个语义错误;您根本无法将整个结构与任何东西进行比较。
变量的大写是常规的。