我目前正在尝试创建自己的getopt()函数版本。 但我不知道它如何将字符类型作为int类型返回。
有什么方法可以查看getopt()函数的源代码吗?
答案 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
实现为signed
或unsigned
的可能性,两个函数都将返回值实现为字符作为unsigned byte
从0
到255
的值(通过将所有负值映射到正数,这会将常数256
添加到负值 - 这是一个例如,由于语言未明确指定如何完成此操作,因此负数范围为128..255
),并将EOF
保留为值-1
。
如果您正在编写要集成到系统标准c库中的getopt(3)
函数,只需检查EOF
(最可能是-1
)使用的值,然后实现它因此,为默认char
类型返回的值不会与/它发生冲突/重叠。