> For the complete documentation index, see [llms.txt](https://skkv-itmo.gitbook.io/c-cpp-cookies/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://skkv-itmo.gitbook.io/c-cpp-cookies/best-practices/best-practices/non-void-functions.md).

# 9. Non-void функции

{% file src="/files/yLy9d7eTReIrmJMqwI8N" %}
Весь приведённый далее код оформлен с использованием clang-format
{% endfile %}

{% code overflow="wrap" lineNumbers="true" %}

```c
#include <stdio.h>

int foo()
{
    printf("in foo()\n");
    // do smth
}

int main(void)
{
    foo();
    // do smth
}
```

{% endcode %}

<details>

<summary>Вариант реорганизации и исправления кода</summary>

Здесь `void` относится и к возвращаемому значению функции, и к указанию типа `void` в аргументах функции.

`void` в аргументах функции показывает, что данная функция не принимает аргументов. В C до C23 `int foo()` – функция, которая принимает неопределенное количество параметров (если они не используются в определении функции).

Во-вторых, функция `foo` имеет тип возвращаемого значения `int`, однако в оригинальной версии кода там не было `return`. Соответственно код продолжит исполняться дальше и в какой-то момент программа упадёт.

Также:

> Executing the return statement in a no-return function is undefined behavior. (since C11)

{% code overflow="wrap" lineNumbers="true" %}

```c
#include <stdio.h>

int foo(void)
{
    printf("in foo()\n");
    // do smth
    return 0;
}

int main(void)
{
    foo();
    // do smth
    // good practice
    return 0;
}
```

{% endcode %}

</details>
