Даже с небольшими размерами данных лучшим выбором было бы серверное разбиение на страницы. Вы не должны будете волноваться позже, масштабируется ли Ваше веб-приложение далее.
И для больших размеров данных ответ очевиден.
Это соглашение о кодировании, которого я раньше не видел.
Но это ничего не меняет.
(foo)->next = 5;
в точности эквивалентно
foo->next = 5;
Это соглашение о кодировании в целях безопасности.
В простом коде, где foo - это просто указатель, скобки избыточны.
(foo)->next = 5;
Однако подумайте, есть ли или был шанс, что foo может быть определен макросом, поэтому это более сложное выражение.
В этом случае скобки могут потребоваться, чтобы избежать ошибки компилятора или, что еще хуже, избежать неправильного приоритета. Представьте, если бы это было преобразовано в уродливое выражение вроде:
( ++get_foo() )->next = 5;
или обычное приведение:
( (db_record*)foo_ptr )->next = 5;
Что нужно иметь в виду с идиоматическим кодом C, это то, что макросы часто использовались как механизм абстракции для вещей, которые мы могли сделать более явно на других языках; -)
Это бессмысленно. Скобки не действуют, поскольку выражение внутри них очень простое. По сути, это
(*(foo)).next = 5;
Что, как вы можете видеть, является лишним набором скобок. Если проект так делает, дерзайте. В остальном, я считаю, что это выглядит довольно ужасно, поэтому я бы постарался не использовать его.