Не пойму как работает void в c++

Не пойму как работает void в с++. Где-то читал, что если перед функцией ничего не стоит, то подразумевается что там стоит void. Но если я его убираю, то вываливается целая куча ошибок.

#include <iostream>
using namespace std;
void line() , msg();
int main()
{
    cout << "HW" << endl;
    line();
    msg();
    return 0;
}

void line(){cout << "line" << endl;}
void msg(){cout << "msg" << endl;}

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

Автор решения: αλεχολυτ

C++ требует явного указания типов. Правило неявного int (но не void) есть в C.

В принципе компилятор сразу так и пишет при попытке убрать тип:

error: C++ requires a type specifier for all declarations

Поэтому просто указывайте тип там, где требует язык.

А вот в C, например, следующая программа успешно компилируется, хоть и с ворохом предупреждений:

line() , msg();
int main()
{
    line();
    msg();
}

line(){}
msg(){}
warning: type specifier missing, defaults to 'int' [-Wimplicit-int] line() , msg();
warning: type specifier missing, defaults to 'int' [-Wimplicit-int] line() , msg();
warning: type specifier missing, defaults to 'int' [-Wimplicit-int] line(){}
warning: non-void function does not return a value [-Wreturn-type] line(){}
warning: type specifier missing, defaults to 'int' [-Wimplicit-int] msg(){}
warning: non-void function does not return a value [-Wreturn-type]

Дополнительно замечу, что обычно рекомендуется не объединять несколько объявлений на одной строке с общим типом. Т.е. вместо

void line(), msg();

лучше для наглядности написать

void line();
void msg();
→ Ссылка