带命令行参数的main函数的误解[到处转载的垃圾]

参考带命令行参数的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环境就可以运行已经编译好的程序。

运行已经编译好的程序和是否使用命令行参数没有任何关系。

原文地址:https://www.cnblogs.com/pmer/p/2328994.html