VС++ "Generating Code", что это значит?

При компиляции в visual studio компилятор выводит это по своему усмотрению:

1 > Генерирование кода...

что он здесь делает точно?

Ответы

Ответ 1

Он делает то, что он говорит: он генерирует машинный код. Многие компиляторы транслируют источники C/С++ в некоторое промежуточное внутреннее представление, которое позднее используется в качестве источника для генерации фактического машинного кода. Visual С++-компилятор (как и многие другие компиляторы) делает это в пакетах: сначала он переводит кучу исходных файлов в это промежуточное представление, а затем преобразует их все в машинный код (а затем начинает работать в следующей партии). Это то, что происходит, когда вы видите сообщения "Генерирующий код".

Я не знаю, какую логику он использует, чтобы разделить исходные файлы на партии. Возможно, он работает просто по размеру: как только общий размер всех промежуточных представлений, сгенерированных до сих пор, достигает некоторого предела, он переключается на режим "генерации кода". Возможно, там есть и другая логика.

В любом случае обратите внимание, что неквалифицированный термин "код" в этом случае не относится к исходному коду, что означает, что он не имеет ничего общего с шаблонами и/или препроцессором или что-то в этом роде. Более того, ссылаясь на источники C с неквалифицированным "кодом" (в отличие от квалифицированного "исходного кода" ), это очень ниша, больше дома с отделом маркетинга, чем с фактическими программистами. На уровне программистов никто не ссылается на источники C как на "код":)

Ответ 2

Компилятор получает сразу несколько входных файлов, и он считывает (анализирует) несколько из них за один раз и только затем создает для них выходные (объектные файлы), прежде чем он прочитает больше входных файлов. Я полагаю, что это оптимизация, предположительно из-за того, что смешанный доступ для чтения/записи на диск медленнее, чем когда он сортируется в (первый) доступ на чтение и (затем) доступ на запись.

Ответ 3

Visual Studio ссылается на компоновщик LINK.exe, он работает в основном с объектными файлами в качестве входных данных, для создания исполняемого файла в качестве вывода, но также способен выполнять много другую работу в отношении этих и связанных файлов. Синтаксис командной строки Linker @MSDN

Ответ 4

Экземпляры шаблона (и другого типа кода) могут генерировать код (или не в некоторых условиях).