Извиняюсь за оффтоп, речь про компилятор ms vc 5 (вроде, 97 года).
Если в большой программе где-то в начале вставить бесполезное typedef int random_string_5423432;
или int func_name_35432423(void);
(в том числе не задевая номера строк), то у него (иногда, но всегда репродуцируемо) меняется ассемблерный дамп получившегося бинарника. Оба варианта (до и после) корректные, отличия касается, например, выбора другого регистра для хранения какого-нить промежуточного числа или другого порядка сложения/вычитания в формуле a[b-c]. Или, например, вместо add eax,[some_mem]
оно делает mov ecx,[some_mem] / add eax,ecx
или наоборот.
Зависимость наблюдается от количества таких вставок, их содержание не важно. То есть, допустим, нет вставок - один бинарник, 5 typedef-ов - другой, 12 typedef-ов - третий, 3 typedef-а и 2 функции - такой же как 5 typedef-ов. Дублирующие объявления не влияют (т.е. если написать typedef int q1; typedef int q1;
то это то же самое как если бы он был один.
Вопрос вобщем-то один - как такое вообще может происходить? Не свидетельство ли это постоянного повреждения памяти, когда код хранилища идентификаторов бьёт память кодогенератору? Или они туда (в генератор асм-инструкций) засунули рандом-генератор, сидированный количеством имеющихся идентификаторов?
Другие версии msvc не проверял. В gcc с таким не встречался вроде (или плохо смотрел).