gpt4 book ai didi

c++ - 了解 getopt() 示例。 int 与 char 的比较

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:15 24 4
gpt4 key购买 nike

大家好 我希望你能帮助我理解为什么 getopt 使用 int 以及 getopt 中 optopt 变量的处理。 C++ 的新手。

查看getopt,optopt被定义为一个整数。 http://www.gnu.org/software/libtool/manual/libc/Using-Getopt.html#Using-Getopt

这里的例子, http://www.gnu.org/software/libtool/manual/libc/Example-of-Getopt.html#Example-of-Getopt

在这个例子中,我不明白的部分是如何在 switch 语句中将整数“c”与字符进行比较。

据我所知,geopt 正在工作的主要参数是字符数组 argv,因此它处理返回 int 的事实对我来说似乎很奇怪,我的期望是 char 并且我需要转换任何数字参数诠释。 char 是否会自动转换为它的 ANSI 代码并再次转换回来? printf 语句

fprintf (stderr, "Unknown option `-%c'.\n", optopt);

据我所知,期待的是一个字符,但被赋予了一个整数。为什么 getopt 在处理字符数组时会使用 int?

我是否漏掉了一些非常明显的东西?我一定是。

最佳答案

当将整数与字符常量进行比较时,如 optopt == 'c' 中,字符常量实际上具有类型 int。事实上,在 C 中 charshort 是二等公民,在表达式中总是被提升为 int,所以传递或返回都没有用一个字符;无论如何它都会被提升为 int

这与 C++ 规则不同,但是在 C++ 程序中使用 getoptprintf 等 C 函数时应该注意的事项。

getopt 返回 int 的事实有一个额外的原因:它可能返回一个有效的 char值(通常为 0..255) -1。如果你想从 getopt 中得到一个 char,你必须首先检查 -1 的可能性:

int i = getopt(argc, argv, option_string);
if (i == -1)
// no more options
else {
char c = i;
// got a valid char, proceed
}

如果 getopt 返回一个 char,那么将无法区分可能有效的 (char)(-1)(要么-1 或 255) 从停止条件开始。参见 this page以便在非常相似的 EOF 值的上下文中进行更好的解释。

关于c++ - 了解 getopt() 示例。 int 与 char 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5094473/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com