Как функция может автоматически возвращать переменную?
Следует протоколу. Он знает, что возвращаемая функция должна найти возвращаемое значение в некотором месте, и явное return
из этой функции заполнит это место. Если вы не вызовете return
, в данном месте будет сохранено некоторое случайное значение.
Возможно ли, что оно вернет единственную переменную, которую я создал (stati c int min) ?
Нет, неопределено, что он возвращает. Это может быть что угодно.
Или это «проблема», связанная с атрибутом stati c, который имеет переменная?
Опять же, то, что она возвращает, не определено .
Имеет ли это какое-либо отношение к природе функции (рекурсивной)?
Да и нет. Если функция определена как внешняя, возвращаемое значение следует другому протоколу, как в случае функций stati c.
В конечном коде может произойти все что угодно, язык C не навязывает способ реализации функции, будь то рекурсивный или нет. Например, в случае, если функция является рекурсивной и может быть предварительно вычислена, только конечное значение может быть заменено в месте вызова. Это также правильно, поскольку время, поскольку конечный результат программы является ожидаемым результатом, соответствует операционной семантике, которая определяет C в ISO9899
.
Я цитирую от официального document:
4 В абстрактной машине все выражения оцениваются в соответствии с семантикой. Реальная реализация не должна оценивать часть выражения, если она может сделать вывод, что его значение не используется и что не возникает никаких побочных эффектов (включая любые, вызванные вызовом функции или доступом к энергозависимому объекту).
Он также может заменить вызов значением этого вызова, и это правильно.
Так что на все ваши вопросы ответ будет неопределенное поведение .