Вложение определений функций зависит от расширения GCC для работы.Стандарт не описывается.
Если вы хотите, чтобы ваш код работал с другими компиляторами, вам следует воздерживаться от использования таких методов.Более того, если вы будете сотрудничать с другими разработчиками, я предполагаю, что многим из них не понравится использование таких нестандартных конструкций.
Я не эксперт в GCC, но я вполне уверен, что есть варианты компилятораотключить расширения.Это позволит вам заставить компилятор убедиться, что вы не пишете код, который не будет компилироваться с другими компиляторами.
Что касается вашего обновления, то существуют варианты использования для вложенных функций.Они могут помочь инкапсуляции, ограничивая область видимости.Однако нет проблемы, которая не может быть решена совершенно адекватно без вложенных функций, что, я думаю, объясняет, почему они являются редко используемой особенностью GCC.