Ответ 1
Когда-то очень давно (до того, как я даже начал программировать на C, который более 30 лет назад), имена элементов элементов структуры должны были быть уникальными для всех структур в программе - вместо "на каждую структуру" тег ", как это требуется сейчас, и со времен K & R - Язык программирования C 1-е издание, Kernighan и Ritchie, 1978.
Как следствие, в те дни префикс помогал отделять членов одного типа структуры от любого другого типа структуры. Следовательно, привычка развивалась с использованием таких префиксов, и она продолжает развиваться более недавно с использованием типов структуры. struct stat
относится ко дням старой системы; struct iovec
- это более недавнее изобретение (возможно, когда-то в 1980-х годах), которое следовало старой традиции.
Использование префиксов не наносит вреда. Это может быть незначительно полезно. Если вы видите gadzooks.st_mtime
, вам не нужно искать определение gadzooks
, чтобы с уверенностью предположить, что он имеет тип struct stat
.
Кстати, вы можете найти раннюю версию "Справочного руководства по C" в рамках руководств Unix 7th Edition (Unix Programmer Manual Volume 2A), в котором говорится ( §8.5 на стр. 244, добавлено выделение):
Имена членов структуры и тегов структуры могут быть такими же, как и обычные переменные, поскольку различие может создаваться по контексту. Однако имена тегов и членов должны быть разными. Одно и то же имя участника может появиться в разные структуры только в том случае, если два члена одного типа и если их происхождение относительно их структуры тоже самое; таким образом, отдельные структуры могут совместно использовать общий начальный сегмент.
В этом же руководстве документируется длинное устаревшее семейство операторов присваивания =+
(в отличие от современного, начиная с 1976 года, семейства операторов присваивания +=
).