Код подходит для любой версии C (за исключением того, что C90 не поддерживает true
).
Два пути приведут к различному использованию стека.
Это в основном миф.Современные компиляторы складывают переменную, если они могут определить, что она необходима, независимо от того, где вы разместили объявление.
Если переменная размещена в регистре, она будет выделена только тогда, когда программа выберет путь, где в вашем примере объявлена переменная.Это не потому, что объявление размещено, а потому, что этот путь будет выполнен.Опять же, ради производительности не имеет значения, где объявлена переменная, если она находится где-то в локальной области, а не в области файла.
Хорошей практикой является ограничение области действия.переменные как можно больше.Но это делается для того, чтобы избежать непреднамеренных ошибок и конфликтов пространства имен.
Но Мисра советует ограничить область действия переменной, ближайшей к ее использованию.
Нет, это не так, но некоторые статические анализаторы требуют, чтобы вы сделали это, в дополнение к требованию MISRA.И MISRA-C: 2004 8.7, и MISRA-C: 2012 8.9 требуют, чтобы переменная помещалась только в область видимости блока, если она используется только одной функцией.Вот и все.
Однако MISRA говорит:
Внутри функции определение того, определены ли объекты в самом внешнем или самом внутреннем блоке, во многом зависит от стиля