【问题标题】:What is the alternative to getopt function on Windows c++? [duplicate]Windows c++ 上 getopt 函数的替代方法是什么? [复制]
【发布时间】:2015-07-22 17:11:05
【问题描述】:

下面的代码我使用的是 Posix C:

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

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

谢谢

【问题讨论】:

  • 如果有人正在寻找适用于两个平台的东西,您可以使用cargs 之类的东西。

标签: c++ windows posix getopt


【解决方案1】:

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

在此处查看“getopt.h/.c”的“src”和“include”目录。

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

【讨论】:

    【解决方案2】:

    如果您进行了搜索,您会发现另一个线程针对基于 Windows 的系统的 getopt 以及其他实现的一些兼容性库。

    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/

    【讨论】:

    • getopt 用于解释存储在最有可能解析命令行参数的单个指针数组中的文本参数。可变参数函数不相似或不兼容。我认为 OP 已经在一些 Windows DLL 中寻找类似的功能,他们可以在其中编写一个小的胶水函数来适应现有代码,而不是重新实现 getopt。
    猜你喜欢
    • 2017-03-09
    • 2015-04-12
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多