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

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

  • 相关阅读:
    如何基于 String 实现同步锁?
    Web前端开发必不可少的9个开源框架
    Java知识,面试总会问到虚拟机,虚拟机类加载机制你懂吗?
    带你了解Java的序列化与反序列化
    想自己写框架?不了解Java注解机制可不行
    深度解密:Java与线程的关系
    手把手教你分析Mysql死锁问题
    windows server 2012 安装 DockerToolbox
    .NET CORE MVC  返回 JSON 数据
    .net core ajax提交Controller接收不到的问题处理方法
  • 原文地址:https://www.cnblogs.com/pmer/p/2328994.html
Copyright © 2020-2023  润新知