虽然我阅读有关文件list.h
在hlist
FreeBSD的源代码,我很困惑这个宏:无效的操作数为二进制“|”
#define hlist_for_each_entry_safe(tp, p, n, head, field) \
for (p = (head)->first; p ? \
(n = p->next) | (tp = hlist_entry(p, typeof(*tp), field)) : \
NULL; p = n)
,我试图用类似的风格,我的功能如下:
int *a;
int *b;
int *c;
if(a ? (b = (int *)0x0c) | (c = (int *)malloc(sizeof(int)) : NULL){
printf("test\n");
}
当我使用GCC编译,编译器给我的错误,他说:
invalid operands to binary "|"
我写我的FUNC因为我认为“for”循环的条件返回“true”或“false”,但实际上编译器似乎告诉我他们不是一样的。然后我不理解“为“和”如果“。
PS:我的母语不是英语,也许你听不懂,我很抱歉。
你可以显示你使用它的线吗? – 2012-03-31 03:48:40
你能告诉我们更多关于'n'和'tp'吗?具体来说,他们的预期类型是什么?或者,'hlist_for_each_entry_safe()'宏实际上是在代码中的某处调用的?如果是这样,那究竟是如何呢? – thb 2012-03-31 03:50:36
这是一场灾难。适用于其他人 - 请请不要对自己和任何其他人使用您的代码执行此操作。 – littleadv 2012-03-31 05:30:22