When I need to refactor a large C codebase the first thing I do is recompile it with C++ - and then fix the missing prototypes and other grit that gets in the way. The cost to do this is minimal but I then have more options (via macros, automatic assignment, etc) to start shoring it up like a retaining wall that's about to fail. At the end of the day, a POD C++ structure with const inline accessors is way easier to reason about and costs nothing once compiled. It probably helps that I started with CFront, so C++ is just C (and C is just assembler with macros.)
Except that in C (at least prior to C23), it should be "int main(void)".
I'm fairly sure that all existing C compilers will quietly accept "int main()", but there's an argument that "int main()" causes the program to have undefined behavior. "int main(void)" is the form documented in the standard.
And the "return 0;" is unnecessary both in C++ and in all versions of C starting with C99. (Some will argue that it's better style to be explicit.)
Meh, the program execution language about main() has included from the beginning an escape hatch: it allows main to be defined “in some other implementation-defined manner.” “int main(void)” is one of four forms documented in the standard (or one of two specific shapes of code; the other two are “or equivalent” and “or in some other implementation-defined manner.”
3 out of 3 people replying haven't been able to differentiate C+ (orthodox C++) from Bjarne Stroustrup's C++. I posted the hello world code to show it's a poor example as it displays similitude between C+ and C.