12345678910111213141516171819202122232425262728293031 |
- How is main() function not mangled in C++
- =================================================
- When building a parser tree, GCC generates a "main" identifier node::
- // in gcc/tree.h
- #define main_identifier_node global_trees[TI_MAIN_IDENTIFIER]
- #define MAIN_NAME_P(NODE) \
- (IDENTIFIER_NODE_CHECK (NODE) == main_identifier_node)
- // in gcc/c-family/c-common.c
- main_identifier_node = get_identifier ("main");
- GCC checks main and set it as a C declaration in gcc/cp/decl.c::
- /* `main' and builtins have implicit 'C' linkage. */
- if (ctype == NULL_TREE
- && DECL_FILE_SCOPE_P (decl)
- && current_lang_name == lang_name_cplusplus
- && (MAIN_NAME_P (declarator)
- || (IDENTIFIER_LENGTH (declarator) > 10
- && IDENTIFIER_POINTER (declarator)[0] == '_'
- && IDENTIFIER_POINTER (declarator)[1] == '_'
- && strncmp (IDENTIFIER_POINTER (declarator)+2,
- "builtin_", 8) == 0)
- || (targetcm.cxx_implicit_extern_c
- && (targetcm.cxx_implicit_extern_c
- (IDENTIFIER_POINTER (declarator))))))
- SET_DECL_LANGUAGE (decl, lang_c);
- Also, the compiler don't warn when main() doesn't have a return statement. This is also checked using MAIN_NAME_P macro.
|