免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2235 | 回复: 10
打印 上一主题 下一主题

求高人洋细注解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-19 17:28 |只看该作者 |倒序浏览
#include "stand.h"
#include <string.h>

int     opterr = 1,             /* if error message should be printed */
        optind = 1,             /* index into parent argv vector */
        optopt,                 /* character checked for validity */
        optreset;               /* reset getopt */
char    *optarg;                /* argument associated with option */

#define BADCH   (int)'?'
#define BADARG  (int)':'
#define EMSG    ""

/*
* getopt --
*      Parse argc/argv argument vector.
*/
int
getopt(nargc, nargv, ostr)
        int nargc;
        char * const *nargv;
        const char *ostr;
{
        static char *place = EMSG;              /* option letter processing */
        char *oli;                              /* option letter list index */

        if (optreset || !*place) {              /* update scanning pointer */
                optreset = 0;
                if (optind >= nargc || *(place = nargv[optind]) != '-') {
                        place = EMSG;
                        return (-1);
                }
                if (place[1] && *++place == '-') {      /* found "--" */
                        ++optind;
                        place = EMSG;
                        return (-1);
                }
        }                                       /* option letter okay? */
        if ((optopt = (int)*place++) == (int)':' ||
            !(oli = strchr(ostr, optopt))) {
                /*
                 * if the user didn't specify '-' as an option,
                 * assume it means -1.
                 */
                if (optopt == (int)'-')
                        return (-1);
                if (!*place)
                        ++optind;
                if (opterr && *ostr != ':')
                        (void)printf("illegal option -- %c\n", optopt);
                return (BADCH);
        }
        if (*++oli != ':') {                    /* don't need argument */
                optarg = NULL;
                if (!*place)
                        ++optind;
        }
        else {                                  /* need an argument */
                if (*place)                     /* no white space */
                        optarg = place;
                else if (nargc <= ++optind) {   /* no arg */
                        place = EMSG;
                        if (*ostr == ':')
                                return (BADARG);
                        if (opterr)
                                (void)printf("option requires an argument -- %c\n", optopt);
                        return (BADCH);
                }
                else                            /* white space */
                        optarg = nargv[optind];
                place = EMSG;
                ++optind;
        }
        return (optopt);                        /* dump back option letter */
}

论坛徽章:
0
2 [报告]
发表于 2007-06-19 18:23 |只看该作者
不是已经有注释了吗?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
3 [报告]
发表于 2007-06-19 18:41 |只看该作者
原帖由 langue 于 2007-6-19 18:23 发表
不是已经有注释了吗?

楼主要的是详细注释。

论坛徽章:
0
4 [报告]
发表于 2007-06-19 18:42 |只看该作者
原帖由 MMMIX 于 2007-6-19 18:41 发表

楼主要的是详细注释。


已经够了

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2007-06-19 18:53 |只看该作者
原帖由 zwylinux 于 2007-6-19 18:42 发表


已经够了

呵呵,对楼主来说够不够要他/她说了才算。

BTW,不知道楼主是从哪翻出来这段代码,没事折腾这个干吗?还让别人给他/她详细注释 :em12:

论坛徽章:
0
6 [报告]
发表于 2007-06-19 19:13 |只看该作者
不喜欢代码的格式。

论坛徽章:
0
7 [报告]
发表于 2007-06-19 19:29 |只看该作者
这段代码似乎是在向 ANSI 过渡的时期中完成的。

论坛徽章:
0
8 [报告]
发表于 2007-06-19 22:27 |只看该作者
原帖由 langue 于 2007-6-19 19:29 发表
这段代码似乎是在向 ANSI 过渡的时期中完成的。


怎么看出来,我只能看出来是标准C之前的。

但是不知道80年的和85年的有什么区别,其实C的历史说长也不长,15年

论坛徽章:
0
9 [报告]
发表于 2007-06-19 22:49 |只看该作者
原帖由 flw2 于 2007-6-19 22:27 发表


怎么看出来,我只能看出来是标准C之前的。

但是不知道80年的和85年的有什么区别,其实C的历史说长也不长,15年

* Copyright (c) 1987 Regents of the University of California.
* All rights reserved.


兴许使用这段代码的程序设计人员忘记加上版权信息了。请看出处:

http://cvsweb.netbsd.org/bsdweb. ... ext/x-cvsweb-markup

当然日后做过些修改,比如 optreset,是 4.4-Lite 中引入的。这里是区别:

http://cvsweb.netbsd.org/bsdweb. ... ext&tr2=1.1.1.2

.

论坛徽章:
0
10 [报告]
发表于 2007-06-19 23:20 |只看该作者
另外,K&R 第一版于 1978 年问世。也就是说,C 的历史远比 15 年悠久。
通常的说法是,C 语言是 D. M. Ritchie 在 1972 年开发出来的。当然整个过程还需要回溯到 1969 年。

[ 本帖最后由 langue 于 2007-6-19 23:41 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP