大家好我希望你能帮助我理解为什么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);
正如我所理解的那样期待一个char,但是给了一个int。为什么getopt在处理字符数组时会使用int?
我错过了一些非常明显的东西吗?我一定是。
答案 0 :(得分:6)
当将整数与optopt == 'c'
中的字符常量进行比较时,字符常量实际上具有类型int
。事实上,在C char
和short
中是二等公民,并且在表达式中始终被提升为int
,因此传递或返回char
是没有用的;无论如何它都被提升为int
。
这与C ++规则不同,但在C ++程序中使用getopt
和printf
等C函数时应注意的事项。
getopt
返回 int
的事实还有另一个原因:它可能会返回有效的char
值(通常为0..255)< em>或 -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
}
如果getopt
返回char
,则无法将可能有效的(char)(-1)
(-1或255)与停止条件区分开来。有关EOF
值的上下文中的更好解释,请参阅this page。