40 - 90% of the time is maintenance. Sometimes half of the team is doing this
Conciseness: Delete obsolete code first.
Have the same style.
Header file: It should really be an interface
Good for having the interfaces there. If there're inline implementation, then the compilation time will be very long.
Definitions for internal uses, like macros, definitions, enums shouldn't be there.
Have simple include statements. Do not include things that you don't need. Cuz that might be expanded many more times.
Do not have a headerfile if we don't need a public interface.
May be a good idea to provide a header file with the module name
include guard:
no _ or __, those are for ANSIC.
Don't put comments behind include guard.
Extern
extern C should not have #include. Visual Studio has limitations on it.
extern int Foo(int i) should be declared in header, not in c. If Foo(int i) changes its interface, source file may not be compiled (if there's no changes), then during run time there will be linking issues?