Я работал в C так долго, что тот факт, что компиляторы обычно добавляют символ подчеркивания к началу extern
, просто понят... Однако другое SO вопрос сегодня заставил меня задаться вопросом о реальной причине добавления подчеркивания. A статья в википедии утверждает, что причина такова:
Общепринятой практикой для компиляторов C было добавление ведущего подчеркивания ко всем внешним идентификаторам внешней области видимости для предотвращения столкновений с вкладами от поддержки языка выполнения.
Я думаю, что в этом есть хотя бы ядро истины, но также, похоже, на самом деле не отвечает на этот вопрос, поскольку, если подчеркивание добавляется ко всем внешним словам, это не поможет в предотвращении конфликтов.
Есть ли у кого-нибудь хорошая информация об обосновании для главного подчеркивания?
Является ли добавленная подчеркивание частью причины, по которой системный вызов Unix creat()
не заканчивается знаком "e"? Я слышал, что ранние линкеры на некоторых платформах имели ограничение на 6 символов для имен. Если это так, то добавление подчеркивания к внешним именам будет казаться безумной идеей (теперь у меня есть только 5 символов, чтобы играть с...).