Ответ на первоначальный вопрос заключается в том, что CoolStraw сказал, что недостаточно определить вложенную функцию, вы должны явно вызывать ее в том месте, где вы хотите, чтобы она выполнялась.Это должно быть декольтировано до этого.Он не имеет никакого отношения к тому, имеет ли он тот же тип, что и содержащая функция.
Как сказал Мат, определение функции внутри функции не разрешено стандартом C.Это расширение gcc, также поддерживаемое компилятором IBM XLC.
Тип результата функции по умолчанию имеет значение int начиная с оригинального K & R C приблизительно 1970 года, и до сих пор является частью всех стандартов C.Это не псевдокод или дополнительный код gcc.Обычно это не рекомендуется, потому что скрывает ошибки;например, если вы забудете «#include» и используете строковую функцию, возвращающую указатель, по умолчанию будет возвращаться int.Если эти типы имеют одинаковый размер, вам это сойдет с рук, но в 64-битном режиме с 32-битными целыми числами отбрасывание верхней половины указателя и замена его расширением знака нижней половины является неприятной ошибкой.
Многие компиляторы могут выдавать какое-то сообщение с предупреждением о том, что вы пропустили тип функции, и многие также предупреждают, что вы вызываете не пустую функцию без использования результата.Оба законны, оба могут быть именно тем, что вы хотели, но оба могут быть ошибками.И большинство компиляторов могут также предупреждать о нестандартных совместимых расширениях, таких как вложенные функции gcc.Если вы заботитесь о переносимости, включите такие предупреждения.