Мне кажется, что оператор С стрелки (- > ) не нужен. Точечный оператор (.) Должен быть достаточным. Возьмите следующий код:
typedef struct {
int member;
} my_type;
my_type foo;
my_type * bar;
int val;
val = foo.member;
val = bar->member;
Мы видим, что оператор стрелки должен использоваться для разметки. Тем не менее, я бы предпочел написать
val = bar.member;
Нет никакой двусмысленности в отношении того, пытаюсь ли я попытаться вытащить элемент из структуры или указателя на структуру. Но легко использовать неправильный оператор, особенно при рефакторинге кода. (Например, возможно, я выполняю сложные операции над foo, поэтому я перехожу код в новую функцию и передаю указатель на foo). Я не думаю, что мне нужно заботиться о том, является ли foo указателем или нет; компилятор может беспокоиться о деталях.
Итак, вопрос: не было бы проще устранить → с языка C?