Pre-DR: static main =================== C99 5.1.2.1.1#1 says: [#1] The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters: int main(void) { /* ... */ } or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared): int main(int argc, char *argv[]) { /* ... */ } or equivalent;9) or in some other implementation-defined manner. Being equivalent means that this function has external linkage. 1. C99 6.7.4#4 says: [#4] In a hosted environment, the inline function specifier shall not appear in a declaration of main. Does this constraint refer only to the function main called at program startup, or to any identifier of that name? That is, does static inline int main(void) { return 0; } violate this constraint? 2. May an implementation-defined manner of defining the function main called at program startup include a definition of main as a function with internal linkage, or only a definition with external linkage but some non-standard type? 3. May a translation unit other than the one defining the function main called at program startup define an object (in any case) or function (if the answer to question 2 is "no" or the function is not of such implementation-defined form) with internal linkage, also called main, or is this undefined behavior? For example, may a translation unit contain the declaration static double main; or static long main(double x) { return 0; } supposing that some other translation unit contains a definition of main with external linkage and one of the standard types?