--- title: "main: Program Startup" ms.date: "11/04/2016" f1_keywords: ["vc.main.startup", "_tmain"] helpviewer_keywords: ["program startup [C++]", "entry points, program", "wmain function", "_tmain function", "startup code, main function", "main function, program startup"] ms.assetid: f9581cd6-93f7-4bcd-99ec-d07c3c107dd4 --- # main: Program Startup A special function named **main** is the starting point of execution for all C and C++ programs. If you are writing code that adheres to the Unicode programming model, you can use `wmain`, which is the wide-character version of **main**. The **main** function is not predefined by the compiler. It must be supplied in the program text. The declaration syntax for **main** is ```cpp int main(); ``` or, optionally, ```cpp int main(int argc, char *argv[], char *envp[]); ``` ## Microsoft Specific The declaration syntax for `wmain` is as follows: ```cpp int wmain( ); ``` or, optionally, ```cpp int wmain(int argc, wchar_t *argv[], wchar_t *envp[]); ``` You can also use `_tmain`, which is defined in TCHAR.h. `_tmain` resolves to **main** unless _UNICODE is defined. In that case, `_tmain` resolves to `wmain`. Alternatively, the **main** and `wmain` functions can be declared as returning **void** (no return value). If you declare **main** or `wmain` as returning **void**, you cannot return an exit code to the parent process or operating system by using a [return](../cpp/return-statement-in-program-termination-cpp.md) statement. To return an exit code when **main** or `wmain` is declared as **void**, you must use the [exit](../cpp/exit-function.md) function. **END Microsoft Specific** The types for `argc` and `argv` are defined by the language. The names `argc`, `argv`, and `envp` are traditional, but are not required by the compiler. For more information and an example, see [Argument Definitions](../cpp/argument-definitions.md). ## See also [Keywords](../cpp/keywords-cpp.md)
[Using wmain Instead of main](../cpp/using-wmain-instead-of-main.md)
[main Function Restrictions](../cpp/main-function-restrictions.md)
[Parsing C++ Command-Line Arguments](../cpp/parsing-cpp-command-line-arguments.md)