私はファイル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」循環の状態が「真」または「偽」を返すと考えているからです。実際、コンパイラは同じではないと私は言っているようです。そして、私は " for "と" if "です。
PS:私の母国語は英語ではありません。多分あなたはそれをよく理解できませんでした。それは残念です。 |
演算子は整数のみで動作しますが、ポインタを操作しようとているようにそのコードが見えます - いくつかのファンキーなコードのように見える
使用する行を表示できますか? –
'n'と' tp'についてもっと教えてください。具体的には、目的とするタイプは何ですか?代わりに、 'hlist_for_each_entry_safe()'マクロが実際にコードのどこかで呼び出されていますか?もしそうなら、いかに正確に? – thb
これは災害のレシピです。他の人のために働くかどうかは気にしないでください - あなた自身と他の人があなたのコードを使ってこれをしないでください。 – littleadv