unistd.h库的getopt()函数

时间:2017-05-02 14:14:57

标签: c function

我目前正在尝试创建自己的getopt()函数版本。 但我不知道它如何将字符类型作为int类型返回。

有什么方法可以查看getopt()函数的源代码吗?

2 个答案:

答案 0 :(得分:3)

getopt()glibc的源代码位于:https://github.com/lattera/glibc/blob/master/posix/getopt.c

当然,您可能会看到更多实现,但这可能是最受欢迎的实现。这是来自FreeBSD的另一个:https://github.com/lattera/freebsd/blob/master/lib/libc/stdlib/getopt.c

答案 1 :(得分:1)

getopt(3)函数的返回值为int,以允许一个额外值(除了它返回的所有可能char之外)以标记期权条件结束。此额外值为EOF(与getchar(3)函数中一样),必须与任何char可能值不同。

为了解决这个问题以及不同 C 编译器将char实现为signedunsigned的可能性,两个函数都将返回值实现为字符作为unsigned byte0255的值(通过将所有负值映射到正数,这会将常数256添加到负值 - 这是一个例如,由于语言未明确指定如何完成此操作,因此负数范围为128..255),并将EOF保留为值-1

如果您正在编写要集成到系统标准c库中的getopt(3)函数,只需检查EOF(最可能是-1)使用的值,然后实现它因此,为默认char类型返回的值不会与/它发生冲突/重叠。