На самом деле (b30, b29, b28, b27, b26, b23, b22)
не входит в код - это параметры для макроса HW_REVID
. Другими словами,
HW_REVID(1, 0, 0, 0, 0, 0, 0),
превращается в
(1<<30 | 0<<29 | 0<<28 | 0<<27 | 0<<26 | 0<<23 | 0<<22)
потому что b30
и т. Д. Заменены (обратите внимание на замену, я имею в виду буквально скопировать и вставить) на 1, 0,
и т. Д. Поэтому, когда все сказано и сделано, это выглядит так:
static const struct {
const char *name;
u32 version; /* from RTL8139C/RTL8139D docs */
u32 flags;
} rtl_chip_info[] = {
{ "RTL-8139",
(1<<30 | 0<<29 | 0<<28 | 0<<27 | 0<<26 | 0<<23 | 0<<22), /* originally HW_REVID(1, 0, 0, 0, 0, 0, 0), */
HasHltClk,
}
Я не знаю, какой компилятор вы используете, но если вы используете, например, gcc, вы можете передать ключ -E
, чтобы выполнить только предварительную обработку (заменяя #defines и макросы и т. Д.) можно точно увидеть код, который он компилирует выглядит.