People saying that functions with a non-void return type *must* return something are right only in theory, and by the wording of the standard. In reality, this is compiler dependant, and in most cases will compile with only a warning.

Historically with C, it would assume `int` return type. The return value would be whatever the value of the accumulator register is at that time, which could be anything, unless you actually return something. For example with g++ I can compile this code:

    #include <iostream>
    
    test() {
    }
    
    int main() {
    	std::cout << test() << std::endl;
    
    	return 0;
    }

It will compile with a warning, and it prints out: `1974484712`, or `1339600616` etc. And if you replace test with:

    test() {
    	asm("movl $123456,%%eax;" : );
    }

Then the return value is 123456. I would not rely on this behaviour when using inline assembly though.

But then again, why would you want to? Seems like a very good way to make sure your code isn't  compatible across compilers, and not as explicit in its purpose. Also, if you tried to forward declare `test()` in the above code you'd get `test();` which wouldn't compile (or make any sense). It's not any more efficient and it allows you to write code using the return value when you probably didn't mean to.

TL,DR: You could if you really wanted to, but you don't want to.