Почему компиляторы C добавляют подчеркивания к внешним именам?
Я работал в C так долго, что тот факт, что компиляторы обычно добавляют подчеркивание в началеextern
просто понял ... Впрочем,еще один вопрос сегодня Я задался вопросом об истинной причине, почему подчеркивание добавлено.статья в википедии утверждает, что причиной является:
Для компиляторов Си было обычной практикой ставить перед всеми внешними идентификаторами программ области видимости подчеркивание, чтобы предотвратить конфликты с вкладами из языковой поддержки времени выполнения.
Я думаю, что по крайней мере в этом есть доля правды, но, похоже, на самом деле нет ответа на этот вопрос, поскольку добавление подчеркивания ко всем внешним элементам не сильно поможет в предотвращении столкновений.
Есть ли у кого-нибудь хорошая информация об обосновании ведущих подчеркивания?
Является ли добавленное подчеркивание одной из причин того, что Unixcreat()
системный вызов не заканчивается на «е»? Я слышал, что ранние компоновщики на некоторых платформах имели ограничение в 6 символов для имен. Если это так, то добавление подчеркивания к внешним именам может показаться совершенно безумной идеей (теперь у меня есть только 5 символов, с которыми можно поиграть ...).