C++系列文章 main函数(2007-04-24 15:33:04)

来源:互联网 发布:如何戒淘宝成瘾 编辑:程序博客网 时间:2024/06/05 05:30

在开始学C++编程时,main函数是一个完整C++程序所必须有的。但在不同的书中,具体格式会有所不同,在nell dale的Programming In c++中是int main() ,在有些书中及C++ Builder6生成的模版中是int main(int argc, char* argv[]),这是为什么呢?读一下下面的短文就知道了。(以下摘自ISO/IEC14882,也即C++ 1998标准 )

3.6.1 Main function [basic.start.main]
1 A program shall contain a global function called main, which is the designated start of the program. It is implementationdefined whether a program in a freestanding environment is required to define a main function. [Note: in a freestanding environment, startup and termination is implementationdefined; startup contains the execution of constructors for objects of namespace scope with static storage duration; termination contains the execution of destructors for objects with static storage duration. ]


2 An implementation shall not predefine the main function. This function shall not be overloaded. It shall have a return type of type int, but otherwise its type is implementationdefined. All implementations shall allow both of the following definitions of main:
int main() { }
and
int main(int argc, char* argv[]) { }

In the latter form argc shall be the number of arguments passed to the program from the environment in which the program is run. If argc is nonzero these arguments shall be supplied in argv[0] through
argv[argc1]
as pointers to the initial characters of nullterminated
multibyte strings (NTMBSs)
(17.3.2.1.3.2) and argv[0] shall be the pointer to the initial character of a NTMBS that represents the name used to invoke the program or "". The value of argc shall be nonnegative. The value of argv[argc] shall be 0. [Note: it is recommended that any further (optional) parameters be added after argv. ]

3 The function main shall not be used (3.2) within a program. The linkage (3.5) of main is implementationdefined.
A program that declares main to be inline or static is illformed.
The name main is not otherwise reserved. [Example: member functions, classes, and enumerations can be called main, as can entities in other namespaces. ]

4 Calling the function
void exit(int);
declared in (18.3) terminates the program without leaving the current block and hence without destroying any objects with automatic storage duration (12.4). If exit is called to end a program during the destruction of an object with static storage duration, the program has undefined behavior.

5 A return statement in main has the effect of leaving the main function (destroying any objects with automatic storage duration) and calling exit with the return value as the argument. If control reaches the end of main without encountering a return statement, the effect is that of executing

return 0;

================

From MSDN

================

main returning void is Microsoft Specific

This statement is Microsoft Specific but is outside the the Microsoft Specific section markers:

Alternately, 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 using a return statement; to return an exit code when main or wmain is declared as void, you must use the exit function.

ANSI C or C++ requires that main() return an int of 0 or 1 only.

Please note that Visual Studio.NET 2005 reports an error when main() returns void. You have to enable Microsoft Extensions for the error to go away.

原创粉丝点击