Почему GDB показывает, что два параметра имеют разный порядок?
GDB не знает ничего об источнике (кроме, возможно, где на диске он былнаходится во время сборки).
Он может отображать параметры (и их значения), потому что компилятор сообщил ему (встраивая отладочную информацию в объектный файл), какие параметры, в какихпорядок их появления, их типы и способ вычисления их значения.
Так почему бы компилятору переупорядочивать аргументы функции?
Функция равна static
, поэтому она не может бытьвызывается извне текущей единицы перевода. Таким образом, компилятор может свободно переупорядочивать параметры, при условии, что он также переупорядочивает аргументы на каждом сайте вызовов.
И все же, зачем ему это делать? Общий ответ: оптимизация (компилятору было удобнее передавать их в этом порядке). Подробный ответ потребует поиска в исходном коде GCC (или любого другого компилятора, который использовался для создания этого кода).