, если компилятор c всегда ставит подчеркивание перед каждым символом,
тогда код запуска / c-runtime (который обычно пишется на ассемблере) может безопасно использовать метки и символы, которые не начинаются с подчеркивания (например, символ «start»).
, даже если вы пишете функцию start () в коде c, она генерируется как _start в выходных данных объекта / asm. (обратите внимание, что в этом случае код c не может сгенерировать символ, который не начинается с подчеркивания), поэтому стартовому кодировщику не нужно беспокоиться о изобретении непонятных невероятных символов (таких как $ _dontuse42% $) для каждого из его / ее глобальные переменные / метки.
так что компоновщик не будет жаловаться на конфликт имен, и программист счастлив. :)
следующее отличается от практики компилятора, добавляющего подчеркивание в свои выходные форматы.
Эта практика была позже кодифицирована как часть стандартов языка C и C ++, в которых использование ведущих подчеркиваний было зарезервировано для реализации.
Это соглашение соблюдается для библиотек c sytem и других системных компонентов. (и для таких вещей, как __FILE__ и т. д.).
(обратите внимание, что такой символ (например, _time) может привести к 2 ведущим подчеркиваниям (__time) в сгенерированном выводе)