雖然我閱讀有關文件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