为什函数无返回值也能输出正确答案?

#include<iostream>
using namespace std;

int max3(int a,int b,int c){
    int maxn = a;
    if( maxn < b) maxn = b;
    if( maxn < c) maxn = c;
    //return maxn;
}

int main(){
    say_hello(2);
    int x,y,z;
    cin>>x>>y>>z;
    cout<< max3(x,y,z) <<endl;
    return 0;
}

语法上是错误的,
gcc编译器的问题,返回的值不确定,最好还是加上return