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

Весь приведённый далее код оформлен с использованием clang-format
#include <stdio.h>

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

int main(void)
{
    foo();
    // do smth
}
Вариант реорганизации и исправления кода

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

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

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

Также:

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

#include <stdio.h>

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

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

Last updated