在Windows c ++上getopt函数的替代方法是什么?

时间:2015-05-12 02:02:46

标签: c++ windows posix getopt

下面的代码我正在使用Posix C:

while ((opt = getopt(argc, argv, "a:p:h")) != -1)

如何使用替代功能将此代码移植到Windows C ++?

由于

2 个答案:

答案 0 :(得分:1)

如果你已经搜索过,你会找到另一个线程来覆盖getopt的一些兼容性库,以及基于Windows的系统的其他实现。

getopt.h: Compiling Linux C-Code in Windows

另一方面,你总是可以使用va_arg,va_list,va_start和va_end函数来处理参数。

/* va_arg example */
#include <stdio.h>      /* printf */
#include <stdarg.h>     /* va_list, va_start, va_arg, va_end */

int FindMax (int n, ...)
{
  int i,val,largest;
  va_list vl;
  va_start(vl,n);
  largest=va_arg(vl,int);
  for (i=1;i<n;i++)
  {
    val=va_arg(vl,int);
    largest=(largest>val)?largest:val;
  }
  va_end(vl);
  return largest;
}

int main ()
{
  int m;
  m= FindMax (7,702,422,631,834,892,104,772);
  printf ("The largest value is: %d\n",m);
  return 0;
}

参考:http://www.cplusplus.com/reference/cstdarg/va_list/

答案 1 :(得分:1)

Microsoft在开源IoTivity项目中提供了一个很好的实现(以及一些其他帮助程序),您可以在这里重复使用(等待您可能拥有的任何许可要求):

看看&#34; src&#34;和&#34;包括&#34;这里的目录是&#34; getopt.h / .c&#34;。

https://github.com/iotivity/iotivity/tree/master/resource/c_common/windows