getopt() 如何知道何时停止?

How does getopt() know when to stop?

我有一些看起来像这样的东西:

while((ch = getopt(argc, argv, "d:t")) != EOF) { ... }

我可能会这样调用函数:

./foo -d "my house" -t some more thoughts

getopt() 以某种方式知道 -d 和 -t 是选项,但在那之后它知道 'some' 'more' 和 'thoughts' 是稍后使用的。 getopt() 寻找什么来知道它已完成处理 args?什么是 EOF?

如评论中所述,将 EOFgetopt() 一起使用是完全错误的(并且 "happens" 在将 -1 用于 EOF 的系统上工作) .使用 -1.

关于你的另一个问题:

What does getopt() look for to know that it's done processing args?

答案很简单。 getopt() 要求 在调用您的程序时使用选项 其他参数之前。所以它会在第一次找到

时停止
  • 或者 NULL(表示 argv[] 结束)或者当达到 argc 时(取决于实现)或者
  • 一个不以 - 开头且未被配置字符串中的 : 使用的参数。