main()函数

每一C 程序都必须有一个main()函数,作为整个程序的入口,可以根据自己的爱好把它放在程序的任何地方。
有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。

在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
* argc: 整数,为传给main()的命令行参数个数。(argument count)
* argv: 字符串数组。
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
对DOS 3.0 以下的版本,argv[0]为空串("") 。
argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;
argv[2] 为执行程序名后的第二个字符串;
...
argv[argc]为NULL。

 

* env保存了该程序运行的环境
* env: 字符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应值如C:/DOS,C:/TURBOC(对于PATH) 或YES(对于87)。

TurboC2.0启动时总是把这三个参数传递给main()函数,可以在用户程序中说明(或不说明)它们,如果说明了部分(或全部)参数,它们就成为main()子程序的局部变量。
注意:一旦想说明这些参数,则必须按argc,argv, env的顺序,如以下的例子:
main()
main(int argc)
main(int argc, char *argv[])
main(int argc, char *argv[], char *env[])
其中第二种情况也是合法的,但不常见,因为在程序中很少有只用argc,而不用argv[]的情况。

 

#include <stdio.h>
#include <stdlib.h>
main(int argc,char *argv[],char *env[])
{
     int i;
     printf("These are the %d command-line arguments passed to /main:/n/n", argc);
     for(i = 0; i <= argc; ++i)
          printf("argv[%d]:%s/n", i, argv[i]);
     printf("/nThe environment string(s)on this system are: /n/n");
     for(i = 0; env[i] != NULL; ++i)
          printf(" env[%d]:%s/n", i, env[i]);
}

运行结果参考如下:

These are the 1 command-line arguments passed to main:

argv[0]:D:/Program Files/Microsoft Visual Studio/MyProjects/testcmd/Debug/testcmd.exe
argv[1]:(null)

The environment string(s)on this system are:

 env[0]:ALLUSERSPROFILE=C:/Documents and Settings/All Users
 env[1]:APPDATA=C:/Documents and Settings/Administrator/Application Data
 env[2]:CLIENTNAME=Console
 env[3]:CommonProgramFiles=C:/Program Files/Common Files
 env[4]:COMPUTERNAME=C5D7A1C556AE449
 env[5]:ComSpec=C:/WINDOWS/system32/cmd.exe
 env[6]:FP_NO_HOST_CHECK=NO
 env[7]:HOMEDRIVE=C:
 env[8]:HOMEPATH=/Documents and Settings/Administrator
 env[9]:INCLUDE=C:/Program Files/Microsoft Visual Studio .NET 2003/SDK/v1.1/include/;D:/Program Files/Microsoft Visual Studio/VC98/atl/include;D:/Program Files/Microsoft Visual Studio/VC98/mfc/include;D:/Program Files/Microsoft Visual Studio/VC98/include
 env[10]:INTDIR=
 env[11]:LIB=C:/Program Files/Microsoft Visual Studio .NET 2003/SDK/v1.1/Lib/;D:/Program Files/Microsoft Visual Studio/VC98/mfc/lib;D:/Program Files/Microsoft Visual Studio/VC98/lib
 env[12]:LOGONSERVER=//C5D7A1C556AE449
 env[13]:MSDevDir=D:/Program Files/Microsoft Visual Studio/Common/MSDev98
 env[14]:NUMBER_OF_PROCESSORS=1
 env[15]:OS=Windows_NT
 env[16]:OUTDIR=
 env[17]:Path=C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;C:/Program Files/Common Files/Thunder Network/KanKan/Codecs;D:/Program Files/Microsoft Visual Studio/Common/Tools/WinNT;D:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin;D:/Program Files/Microsoft Visual Studio/Common/Tools;D:/Program Files/Microsoft Visual Studio/VC98/bin
 env[18]:PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
 env[19]:PROCESSOR_ARCHITECTURE=x86
 env[20]:PROCESSOR_IDENTIFIER=x86 Family 15 Model 4 Stepping 1, GenuineIntel
 env[21]:PROCESSOR_LEVEL=15
 env[22]:PROCESSOR_REVISION=0401
 env[23]:ProgramFiles=C:/Program Files
 env[24]:SESSIONNAME=Console
 env[25]:SystemDrive=C:
 env[26]:SystemRoot=C:/WINDOWS
 env[27]:TEMP=C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp
 env[28]:TMP=C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp
 env[29]:USERDOMAIN=C5D7A1C556AE449
 env[30]:USERNAME=Administrator
 env[31]:USERPROFILE=C:/Documents and Settings/Administrator
 env[32]:VS71COMNTOOLS=C:/Program Files/Microsoft Visual Studio .NET 2003/Common
7/Tools/
 env[33]:windir=C:/WINDOWS
 env[34]:_ACP_LIB=D:/Program Files/Microsoft Visual Studio/VC98/LIB;D:/Program Files/Microsoft Visual Studio/VC98/MFC/LIB
 env[35]:_ACP_PATH=D:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin;D:/Program Files/Microsoft Visual Studio/VC98/BIN;D:/Program Files/Microsoft Visual Studio/Common/TOOLS;D:/Program Files/Microsoft Visual Studio/Common/TOOLS/WINNT;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem
 env[36]:_MSDEV_BLD_ENV_=1
Press any key to continue

 

在控制台下运行带入参数如下:

 

D:/Program Files/Microsoft Visual Studio/MyProjects/testcmd/Debug>testcmd.exe aaa bbb ccc
These are the 4 command-line arguments passed to main:

argv[0]:testcmd.exe
argv[1]:aaa
argv[2]:bbb
argv[3]:ccc
argv[4]:(null)

The environment string(s)on this system are:

 env[0]:ALLUSERSPROFILE=C:/Documents and Settings/All Users
 env[1]:APPDATA=C:/Documents and Settings/Administrator/Application Data
 env[2]:CLIENTNAME=Console
 env[3]:CommonProgramFiles=C:/Program Files/Common Files
 env[4]:COMPUTERNAME=C5D7A1C556AE449
 env[5]:ComSpec=C:/WINDOWS/system32/cmd.exe
 env[6]:FP_NO_HOST_CHECK=NO
 env[7]:HOMEDRIVE=C:
 env[8]:HOMEPATH=/Documents and Settings/Administrator
 env[9]:INCLUDE=C:/Program Files/Microsoft Visual Studio .NET 2003/SDK/v1.1/include/;D:/Program Files/Microsoft Visual Studio/VC98/atl/include;D:/Program Files/Microsoft Visual Studio/VC98/mfc/include;D:/Program Files/Microsoft Visual Studio/VC98/include
 env[10]:LIB=C:/Program Files/Microsoft Visual Studio .NET 2003/SDK/v1.1/Lib/;D:/Program Files/Microsoft Visual Studio/VC98/mfc/lib;D:/Program Files/Microsoft Visual Studio/VC98/lib
 env[11]:LOGONSERVER=//C5D7A1C556AE449
 env[12]:MSDevDir=D:/Program Files/Microsoft Visual Studio/Common/MSDev98
 env[13]:NUMBER_OF_PROCESSORS=1
 env[14]:OS=Windows_NT
 env[15]:Path=C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;C:/Program Files/Common Files/Thunder Network/KanKan/Codecs;D:/Program Files/Microsoft Visual Studio/Common/Tools/WinNT;D:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin;D:/Program Files/Microsoft Visual Studio/Common/Tools;D:/Program Files/Microsoft Visual Studio/VC98/bin
 env[16]:PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
 env[17]:PROCESSOR_ARCHITECTURE=x86
 env[18]:PROCESSOR_IDENTIFIER=x86 Family 15 Model 4 Stepping 1, GenuineIntel
 env[19]:PROCESSOR_LEVEL=15
 env[20]:PROCESSOR_REVISION=0401
 env[21]:ProgramFiles=C:/Program Files
 env[22]:PROMPT=$P$G
 env[23]:SESSIONNAME=Console
 env[24]:SystemDrive=C:
 env[25]:SystemRoot=C:/WINDOWS
 env[26]:TEMP=C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp
 env[27]:TMP=C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp
 env[28]:USERDOMAIN=C5D7A1C556AE449
 env[29]:USERNAME=Administrator
 env[30]:USERPROFILE=C:/Documents and Settings/Administrator
 env[31]:VS71COMNTOOLS=C:/Program Files/Microsoft Visual Studio .NET 2003/Common7/Tools/
 env[32]:windir=C:/WINDOWS

 

 

函数返值:

void main和int main

 

 

main()函数 是一个整型函数,给操作系统返回一个状态值(整型,例如0等)让操作系统明白这个程序执行的状态,比如执行这个程序后下一步可能要根据这个返回值做分支处理,如果主函数的返回值就是0,那么主函数是正常退出的. 用void的话,主函数异常退出和正常退出就无法区别了。c语言标准里main 类型 应该是 int, void 不规范,一般正确执行退出值为0,异常退出值为1

对于void main编译器会自动改成返回0的int main
另外Windows里进程的返回值其实是ExitProcess提供的。main返回的时候会调用ExitProcess。你可以主动调用ExitProcess提供返回值。
一般发生异常的时候,C运行库自己就会调用ExitProcess把错误返回。如果是你内部逻辑的错误,也可以自己调用ExitProcess返回错误。这个和用int main返回的错误对于系统来说是没有区别的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值