LINUX.ORG.RU

История изменений

Исправление gns, (текущая версия) :

пропущенный return в функции;

Да, помню веселую историю в моей практике. Пришлось как-то править «первые три байта операционной системы». А дело было так. Занимался я тогда разработкой некой embedded bsd-подобной системы на разных платформах. Первым делом, при инициализации была С-шная функция с ассемблерной вставкой. типа звали system call (на ppc дело было) и system call записывал в R0 то, что нужно. Ну такой типа INT9 биосовский. Ретурна не было, так как через R0 код возврата и нужно было передавать по ABI. И тут перешли на новый тулчейн, с 2.95-2 на какой-то третий, который ничтоже сумняшеся лепил implicit return 0 там. где его не было. Ну и «эффект превзошел ожидания», система перестала грузиться сразу. :), потому как после вызова этой функции в r0 был 0, а не то, что там должно было быть. Так что аккуратнее, товарищи, с пропущенными ретурнами, их иногда забывают «по доразумению».

А cppcheck — вещь годная. Хотя, лучше ее использовать в связке с анализатором шланга :)

Исходная версия gns, :

пропущенный return в функции;

Да, помню веселую историю в моей практике. Пришлось как-то править «первые три байта операционной системы». А дело было так. Занимался я тогда разработкой некой embedded bsd-подобной системы на разных платформах. Первым делом, при инициализации была С-шная функция с ассемблерной вставкой. типа звали system call (на ppc дело было) и system call записывал в R0 то, что нужно. Ну такой типа INT9 биосовский. Ретурна не было, так как через R0 код возврата и нужно было передавать по ABI. И тут перешли на новый тулчейн, с 2.95-2 на какой-то третий, который ничтоже сумняшеся лепил implicit return 0 там. где его не было. Ну и «эффект превзошел ожидания», система перестала грузиться сразу. :), потому как после вызова этой функции в r0 был 0, а не то, что там должно было быть. Так что аккуратнее, товарищи, с пропущенными ретурнами, их иногда забывают «по доразумению».