了解getopt()示例.int与char的比较

Tom*_*mmy 1 c c++ integer-promotion

大家好,我希望你能帮助我理解为什么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

在这个例子中,我不理解的部分是如何将`c',一个整数与switch语句中的char进行比较.

据我所知,geopt的主要参数是字符数组argv,因此它处理返回int的事实对我来说似乎很奇怪,我的期望是char,我需要将任何数字参数转换为int.char是自动转换为它的ANSI代码又回来了吗?printf语句

fprintf (stderr, "Unknown option `-%c'.\n", optopt);
Run Code Online (Sandbox Code Playgroud)

正如我所理解的那样期待一个char,但是给了一个int.为什么getopt在处理字符数组时会使用int?

我错过了一些非常明显的东西吗 我必须.

Fre*_*Foo 6

当将整数与字符常量进行比较时optopt == 'c',字符常量实际上具有类型int.事实上,在C语言中char,他们short是二等公民,并且总是int在表达中被提升,所以传递或返回是没有用的char; int无论如何它都被提升了.

这是从C++的规则不同,但有些事你应该知道用C功能,如当getopt和printf在C++程序.

getopt 返回 an 的事实int还有另一个原因:它可能返回有效值char(通常为0..255)或 -1.如果你想要char离开getopt,你必须首先检查-1可能性:

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

如果getopt返回a char,则无法区分可能有效(char)(-1)(-1或255)和停止条件.有关值的上下文中的更好解释,请参阅此页面EOF,这非常相似.