带命令行参数的main函数的误解[到处转载的垃圾]
http://www.cnblogs.com/xdshennju/archive/2012/01/23/2328992.html
一个C程序总是从main()函数开始执行的。
评:有的C程序压根就没有main()函数
在最新的 C99 标准中,只有以下两种定义方式是正确的:
(参阅ISO/IEC 9899:1999 (E) 5.1.2.2.1 Program startup)
评:这个是对C99的误解。在C89中,“只有”这两个字才成立。C99并不绝对拒绝这两种外形式的main()
编译环境是TC
评:用这种C89之前的编译器来讨论C标准是扯淡。TC本身还容许main()带第3个参数懂不懂?
如果把 return 0; 改为 return 99;
评:C标准只谈到main()返回0或1,其他的情况由编译器确定。你这里返回99,问过编译器吗?
要是你这样写 return 99.99; 那还是返回99,因为99.99被传给操作系统之前,被强制类型转换成整数类型了。
评:和main()八竿子打不着的事情,返回类型为int的函数都是这样处理
C编译器允许main()函数没有参数,或者有两个参数(有些实现允许更多的参数,但这只是对标准的扩展)。这两个参数,一个是int类型,一个是字符串类型。
评:C99已经把这种扩展作为了标准,所以谈不上什么“只是对标准的扩展”。
“一个是字符串类型”:在C语言中根本就不存在字符串类型,C语言操作字符串是通过char *类型指针。把char **当作字符串类型,C语言还没入门吧?
系统使用空格把各个字符串格开。
评:无中生有,没有任何依据。
把程序本身的名字赋值给argv[0],接着,把最后的第一个字符串赋给argv[1]。
评:什么叫“程序本身的名字”?argv[0]实际上与具体的实现相关。
“最后的第一个”,这是话么?
argv[0] ------> c(程序名) 。
评:很难说这个是什么。
编译运行,打开命令行并输入d love.txt 回车。这样,打开d.c文件所在的目录,你会发现多了一个名为 love.txt 的文件,打开后里面的内容正是世界上说的最多的那句话。
love.txt 文件和d.c文件所在目录没有关系,d.c是源文件而不是可执行文件。love.txt应该是在系统当前目录下。
使用命令行参数的理由或许就是练习命令行用法,以备以后需要编写基于命令行的程序。还有一个好处是,不需要C环境就可以运行已经编译好的程序。
运行已经编译好的程序和是否使用命令行参数没有任何关系。