История изменений
Исправление alysnix, (текущая версия) :
Вот расскажите, кто собаку съел на линковке, почему до сих пор приходится руками играться с очередностью линковки?
потому что везде пишут, что надо писать такой код, чтобы он НЕ зависел от очередности линковки. например не полагаться на порядок инициализации глобальных обьектов.
очередность линковки можно строго соблюдать в языках где есть понятие модуля. в си и плюсах этого нет. там хоть и есть раздельная компиляция, но к модулям это не имеет отношения. программа на си это, по сути, один единый файл исходника, разбитый на части и части эти включаются инклудами друг в друга. модулей тут нет вообще.
ps:
строго говоря для си/плюсов порядок вообще не определен. там единицы компиляции могут, ссылаться друг на друга, прямо или косвенно, образуя циклические зависмости и порядка просто нет. то что называют «правильным порядком», на самом деле есть попытка заставить глобальные переменные иницилизироваться в «верном» порядке на такой каше из единиц трансляции. причем «верный порядок» это тот порядок, на котором в данный момент все не падает. разумеется если рпограммировать так, то все станет сонва падать когда нибудь и опять придется искать «верный порядок», которого может и не быть вовсе.
такое надо слегка переписывать.
Исходная версия alysnix, :
Вот расскажите, кто собаку съел на линковке, почему до сих пор приходится руками играться с очередностью линковки?
потому что везде пишут, что надо писать такой код, чтобы он НЕ зависел от очередности линковки. например не полагаться на порядок инициализации глобальных обьектов.
очередность линковки можно строго соблюдать в языках где есть понятие модуля. в си и плюсах этого нет. там хоть и есть раздельная компиляция, но к модулям это не имеет отношения. программа на си это, по сути, один единый файл исходника, разбитый на части и части эти включаются инклудами друг в друга. модулей тут нет вообще.