I have a sample application with a UML tool (Rhapsody) I use the default startup.a51 file, then I provide a idf3main.c file where main() is defined. When I compile / link then compilation looks fine, but the linker complains:
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL SYMBOL: MAIN MODULE: C:\ND\KEIL\C51\LIB\C51L.LIB (?C_INIT)
C51's naming conventions - including whether or not an underscore is prefixed to function names - is described in Chapter 6 of the manual. See the section on Segment Naming Conventions This seems to support Jon's guess...