оператору sizeof
не очень нужна скобки, если операнд является левосторонней выражение вместо типа, так что ваша скобка на второй sizeof
не нужны, так как этот не ожидает типа (из-за конечного [0]
). Этот макрос LEN
, по-видимому, используется для получения размера статически определенного вектора.
Например:
int v[10];
LEN(v) will expand to (sizeof(v)/sizeof(v)[0])
И (v)[0]
такого же, как v[0]
поэтому второй SizeOf на самом деле что-то вроде sizeof v[0]
которое справедливо использование sizeof
(не требует скобки)
Хорошо известно (по крайней мере, здесь, при переполнении стека) пример sizeof
, который не требует скобок:
Чтобы получить динамически определенный 10-элементный вектор. Обратите внимание, что предыдущий макрос LEN
здесь не работает.
https://news.ycombinator.com/item?id=13549823 – santa