C и нотация указателя

Даже с небольшими размерами данных лучшим выбором было бы серверное разбиение на страницы. Вы не должны будете волноваться позже, масштабируется ли Ваше веб-приложение далее.

И для больших размеров данных ответ очевиден.

5
задан abelenky 24 September 2009 в 02:57
поделиться

3 ответа

Это соглашение о кодировании, которого я раньше не видел.

Но это ничего не меняет.

(foo)->next = 5;

в точности эквивалентно

foo->next = 5;
6
ответ дан 14 December 2019 в 01:12
поделиться

Это соглашение о кодировании в целях безопасности.

В простом коде, где foo - это просто указатель, скобки избыточны.

(foo)->next = 5;

Однако подумайте, есть ли или был шанс, что foo может быть определен макросом, поэтому это более сложное выражение.

В этом случае скобки могут потребоваться, чтобы избежать ошибки компилятора или, что еще хуже, избежать неправильного приоритета. Представьте, если бы это было преобразовано в уродливое выражение вроде:

( ++get_foo() )->next = 5;

или обычное приведение:

( (db_record*)foo_ptr )->next = 5;

Что нужно иметь в виду с идиоматическим кодом C, это то, что макросы часто использовались как механизм абстракции для вещей, которые мы могли сделать более явно на других языках; -)

2
ответ дан 14 December 2019 в 01:12
поделиться

Это бессмысленно. Скобки не действуют, поскольку выражение внутри них очень простое. По сути, это

(*(foo)).next = 5;

Что, как вы можете видеть, является лишним набором скобок. Если проект так делает, дерзайте. В остальном, я считаю, что это выглядит довольно ужасно, поэтому я бы постарался не использовать его.

1
ответ дан 14 December 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: