当前位置:  技术问答>linux和unix

linux下的C程序getopt问题

    来源: 互联网  发布时间:2016-03-13

    本文导语:  我在linux下编了一个C程序,代码如下: #include  #include  int main(int argc,char **argv) { int ch; opterr = 0; while((ch = getopt(argc,argv,"a:bcde"))!= -1) switch(ch) { case 'a': printf("option a:%sn",optarg); break; case 'b': printf("optio...

我在linux下编了一个C程序,代码如下:
#include 
#include 
int main(int argc,char **argv)
{
int ch;
opterr = 0;
while((ch = getopt(argc,argv,"a:bcde"))!= -1)
switch(ch)
{
case 'a':
printf("option a:%sn",optarg);
break;
case 'b':
printf("option b :bn");
break;
break;
default:
printf("other option :%cn",ch);
}

printf("optopt +%cn",optopt);
}

编译的时候出现如下错误信息:
testopt.cpp: In function `int main(int, char**)':
testopt.cpp:7: `opterr' undeclared (first use this function)
testopt.cpp:7: (Each undeclared identifier is reported only once for each 
   function it appears in.)
testopt.cpp:8: `getopt' undeclared (first use this function)
testopt.cpp:12: `optarg' undeclared (first use this function)
testopt.cpp:22: `optopt' undeclared (first use this function)
make: *** [testopt.o] Error 1

怎么回事,unistd.h中不是包含了getopt的定义了吗。

|
首先opterr未定义。

|
试试
#include 

|
感觉还是你的头文件所在的目录不是系统默认所在目录。
或者你的头文件就有问题。
连域变量opterr都未找到。

|
 #include 

       int getopt(int argc, char * const argv[],
                  const char *optstring);

       extern char *optarg;
       extern int optind, opterr, optopt;

       #define _GNU_SOURCE
       #include 

       int getopt_long(int argc, char * const argv[],
                  const char *optstring,
                  const struct option *longopts, int *longindex);

       int getopt_long_only(int argc, char * const argv[],
                  const char *optstring,
                  const struct option *longopts, int *longindex);

  longopts is a pointer to the first element of an array of struct option declared in
        as

          struct option {
              const char *name;
              int has_arg;
              int *flag;
              int val;
          };

       The meanings of the different fields are:

       name   is the name of the long option.

       has_arg
              is:  no_argument  (or  0)  if  the  option  does  not  take   an   argument,
              required_argument   (or   1)   if   the  option  requires  an  argument,  or
              optional_argument (or 2) if the option takes an optional argument.

       flag   specifies how results are returned for a long option.  If flag is NULL, then
              getopt_long() returns val.  (For example, the calling program may set val to
              the equivalent short option character.)  Otherwise, getopt_long() returns 0,
              and  flag  points  to a variable which is set to val if the option is found,
              but left unchanged if the option is not found.

       val    is the value to return, or to load into the variable pointed to by flag.

     


|
Solaris手册是这样的:
[code=BatchFile]
Standard C Library Functions                           getopt(3C)

NAME
     getopt - command option parsing

SYNOPSIS
  SVID3, XPG3
     #include 

     int getopt(int argc, char * const argv[], const  char  *opt-
     string);
     extern char *optarg;
     extern int optind, opterr, optopt;

  POSIX.2, XPG4, SUS, SUSv2, SUSv3
     #include 

     int getopt(int argc, char * const argv[], const  char  *opt-
     string);
     extern char *optarg;
     extern int optind, opterr, optopt;
[/code]

|
#include  
#include  
int main(int argc,char **argv)
{
    int ch;
    int opterr = 0;
    while((ch = getopt(argc,argv,"a:bcde"))!= -1)
      switch(ch)
      {
          case 'a':
              printf("option a:%sn",optarg);
              break;
          case 'b':
              printf("option b :bn");
              break;
          default:
              printf("other option :%cn",ch);
      }

    printf("optopt +%cn",optopt);
}

|
我画蛇添足了,opterr 是在getopt.h中定义的一个外部变量,不用再次定义了。
这个程序没问题,我试过了。getopt.h 在unistd.h中包含了。

|
LZ,ubuntu6.06下可以运行,可能是你的系统中头文件的问题,比如找一下 这个文件是不是在
/usr/include下,如果是在/usr/include/unis文件夹下要写成等等

    
 
 

您可能感兴趣的文章:

  • linux下通过crond实现自动执行程序
  • 为什么linux下的C++程序这么少见? 请问那里有linux下的C++程序?什么类型的程序都可以.
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • linux上的程序怎样远程启动另一个linux系统上的某个程序
  • 如何使用linux下gdb来调试python程序
  • 在linux下面怎么安程序啊?我刚裝了一个 linux,下了一个迅雷安装程序,可是不知道怎么安装啊?真心请教。
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户
  • Linux程序员在公司里做什么程序?(Linux程序员请进)
  • 我的linux程序 如何 在pc机器上运行。现在我用arm-linux-g++ 编译后的程序在我的嵌入设备上运行。
  • Linux 编程怎么样在程序开启一个程序,和关闭一个程序?
  • Linux下的程序是在内存中运行的吗?为什么在程序运行的时候可以删除程序文件?
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户 100分相赠
  • linux初学者一简单问题!在线送分!linux设备驱动程序一书的第一个程序.
  • 最进想学习LINUX程序设计,想了解一下在LINUX下的C++程序开发工具有哪些?有快速做界面的那种吗?
  • 我写了个linux下的网络程序,程序在多个电脑间通信,但是我没有多个电脑,怎么调试这样的程序啊?
  • linux下,一个程序如何向另一个程序发送消息,另一个程序如何接收
  • 请问载linux下如何调试汇编程序,有没有像debug的程序。
  • linux的程序员是不是比windows程序员的薪水高啊?
  • 菜鸟求助:Linux 应用程序后台启动后关闭窗口程序退出
  • 请教:如何在linux服务器上实现一个程序,该程序可启动远程linux客户端上的一个脚本(sh后缀)的执行
  • 急,Linux shell脚本问题请教,关于getopts
  • linux系统中是否存在getopt.h?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux下时钟同步问题:Clock skew detected原因分析及解决方法
  • linux 繁体 汉字输入法 问题 linux 繁体 汉字输入法 问题
  • Linux 下c++开发error while loading shared libraries问题解决
  • 先安装linux,后安装winxp,能否解决正常启动linux的问题不?(初学者问题,很容易回答)
  • 弱弱的一问,linux下的中文问题及网络问题,分不是问题
  • Linux新手问,Linux安装问题。
  • linux下游戏问题。(菜鸟问题)
  • 初学Linux,发现Linux下的版本问题很头痛。【系列问题】
  • 高深问题:有了linux内核源代码如何做成一个linux操作系统
  • 一个很菜的问题,关ARM与linux内核裁剪的问题!
  • vmware装的linux,通过win2000访问linux的web服务器有问题
  • 初次接触linux,关于linux 用户权限问题请教!
  • Linux下是否存在磁盘碎片问题和内存碎片问题?
  • linux开发的应用程序部署到其他linux的问题
  • vmware上装LINUX的问题,WIN7可以拼的通linux的IP,linux拼不通win7的IP
  • Linux互ping在局域网内大量丢包,但是linux和windows互ping就没问题。
  • 最菜的问题—关于linux“动态库”的问题
  • linux下挂载linux分区的问题
  • 一个小问题。Linux下编程语言的问题。
  • linux问题 secureCRT连接的问题 在线等急!~~
  • Linux下环境变量问题以及FLEX安装问题
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • linux和unix iis7站长之家


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3