Нужно ли указывать тип возвращаемого значения (int) при объявлении main() в Си?

Читаю книгу Брайана Кернигана и Денниса Ритчи "Язык программирования Си". С основами Си я знаком, но меня ввёл в ступор один момент. Почему-то абсолютно во всех примерах кода функция main() указывается без типа возвращаемого значения (пример на скриншоте). Хотелось бы понять, почему это так в данной книге и как всё-таки делать правильно.Пример буквально с первых страниц


Ответы (1 шт):

Автор решения: AlexGlebe

В старые-старые времена C89 был в стандарте пункт : если тип не указан, то подразумевается int.

main ( n , a )
int n ;
char * * a ;
{
}

Такая запись эквивалентна :

int main(int n, char**a){
}

дополнение :

Ещё если предварительно объявить функцию без типов аргументов, или вообще без них, то не будет контроля типа, их преобразования, а также количества аргументов.

// gcc -Wall -Wextra -Wpedantic -Winline -std=c11
#include <stdio.h>  

// очень секретная функция
f();

main();

main(n,a)
int n;
char**a;
{
printf("f(3.1)=%d\n",f(3.1));
printf("f(3,4)=%d\n",f(3,4));
}

f(x)
float x;
{return x;}

f(3.1)=3
f(3,4)=0

Такое использование стандарта очень не рекомендуется. Нужно держать контроль над типами всегда.

→ Ссылка