免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4296 | 回复: 8
打印 上一主题 下一主题

[C] 菜鸟求救:在linux下用C语言实现参数个数可变得函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-12-31 10:20 |只看该作者 |倒序浏览
#include<stdio.h>;
#include<string.h>;
#include<stdarg.h>;
int demo(char,...)
void main(void)
{
    demo("DEMO","this","is","a","demo!","";
}
int demo(char msg, ...)
{
    va_list argp;
    int argno = 0;
    char para;
    va_start(argp,msg);
    while(1)
    {
        para = va_arg(argp,char);
        if(stricmp(para,"" == 0)
        break;
        printf("parameter %d is:%s\n", argno, para);
        argno++;
        va_end(argp);
        return 0;

    }
}
这是我在网上摘下的sample,可在我的linux下却一直编译不过
命令cc ***.c 报错:
unix.c: In function `demo':
unix.c:6: parse error before '{' token
unix.c:5: parm types given both in parmlist and separately
unix.c:4: parameter name omitted
unix.c:14: `msg' undeclared (first use in this function)
unix.c:14: (Each undeclared identifier is reported only once
unix.c:14: for each function it appears in.)
unix.c:14: warning: second parameter of `va_start' not last named argument
unix.c:17: warning: `char' is promoted to `int' when passed through `...'
unix.c:17: warning: (so you should pass `int' not `char' to `va_arg')
百思不得其解,望大侠帮忙

论坛徽章:
0
2 [报告]
发表于 2003-12-31 10:37 |只看该作者

菜鸟求救:在linux下用C语言实现参数个数可变得函数

#include<stdio.h>;
#include<string.h>;
#include<varargs.h>;
int demo();
void main(void)
{
    demo("DEMO","this","is","a","demo!","\0";
}
int demo(char *msg, ...)
va_dcl
{
    va_list argp;
    int argno = 0;
    char *para;
    va_start(argp,msg);
    while(1)
    {
        para = va_arg(argp,char*);
        if(strcmp(para,"\0" == 0)
        break;
        printf("parameter #%d is:%s\n", argno, para);
        argno++;
        va_end(argp);
        return 0;

    }
}
gcc unix.c,报错:
unix.c: In function `main':
unix.c:6: warning: return type of `main' is not `int'
unix.c: At top level:
unix.c:10: conflicting types for `demo'
unix.c:10: a parameter list with an ellipsis can't match an empty parameter name list declaration
unix.c:4: previous declaration of `demo'
unix.c: In function `demo':
unix.c:10: parm types given both in parmlist and separately
unix.c:15:22: macro "va_start" passed 2 arguments, but takes just 1
unix.c:15: `va_start' undeclared (first use in this function)
unix.c:15: (Each undeclared identifier is reported only once
unix.c:15: for each function it appears in.)

论坛徽章:
0
3 [报告]
发表于 2003-12-31 10:39 |只看该作者

菜鸟求救:在linux下用C语言实现参数个数可变得函数

linux下要用va_dcl定义,后面不加;
va_start
va_end
等函数也有所变化
http://www2.ccw.com.cn/tips/2k01/012601_03.asp

论坛徽章:
0
4 [报告]
发表于 2003-12-31 10:44 |只看该作者

菜鸟求救:在linux下用C语言实现参数个数可变得函数

拜托以后不要写那么恶劣的程序.
下面这段代码你去测试一下。

  1. #include<stdio.h>;
  2. #include<string.h>;
  3. #include<stdarg.h>;
  4. int demo(char *,...) ;

  5. int main(void)
  6. {
  7.         demo("DEMO","this","is","a","demo!","");
  8.         return 0;
  9. }
  10. int demo(char *msg, ...)
  11. {
  12.         va_list argp;
  13.         int argno = 0;
  14.         char *para;
  15.         va_start(argp,msg);
  16.         while(1)
  17.         {
  18.                 para = va_arg(argp,char *);
  19.                 if(strcasecmp(para,"") == 0)
  20.                         break;
  21.                 printf("parameter %d is:%s\n", argno, para);
  22.                 argno++;
  23.                 va_end(argp);
  24.         }
  25.         return 0;
  26. }
复制代码
[/code]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2003-12-31 10:49 |只看该作者

菜鸟求救:在linux下用C语言实现参数个数可变得函数


  1. #include<stdio.h>;
  2. #include<string.h>;
  3. #include<stdarg.h>;
  4. int demo(char*,...);

  5. int main(void)
  6. {
  7.         demo("DEMO","this","is","a","demo!","");
  8.         return 0;
  9. }
  10. int demo(char *msg, ...)
  11. {
  12.         va_list argp;
  13.         int argno = 0;
  14.         char *para;
  15.         va_start(argp,msg);
  16.         while(1)
  17.         {
  18.                 para = va_arg(argp,char*);
  19.                 if(strcmp(para,"") == 0)
  20.                         break;
  21.                 printf("parameter %d is:%s\n", argno, para);
  22.                 argno++;
  23.                 //return 0;
  24.         }
  25.         va_end(argp);
  26. }
复制代码

自己参考一下吧,我对这个也不懂。论坛里面有这方面的帖子,
搜搜看。

论坛徽章:
0
6 [报告]
发表于 2003-12-31 12:51 |只看该作者

菜鸟求救:在linux下用C语言实现参数个数可变得函数

我编程才在起步,所以无论编程风格还是思想都狠恶劣,不过,我狠希望自己有天不是菜鸟
所以还会来请教各位大侠,
这里我先谢过,真是十分感谢各位。
用了那个说我恶劣的大侠的代码以后确实没有报错了

论坛徽章:
0
7 [报告]
发表于 2003-12-31 13:12 |只看该作者

菜鸟求救:在linux下用C语言实现参数个数可变得函数

没用过这函数

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2003-12-31 13:47 |只看该作者

菜鸟求救:在linux下用C语言实现参数个数可变得函数

原帖由 "aliceapple" 发表:
我编程才在起步,所以无论编程风格还是思想都狠恶劣,不过,我狠希望自己有天不是菜鸟
所以还会来请教各位大侠,
这里我先谢过,真是十分感谢各位。
用了那个说我恶劣的大侠的代码以后确实没有报错了


找到了解决办法就好。

时间长了,你想写恶劣的代码都难

论坛徽章:
0
9 [报告]
发表于 2003-12-31 13:50 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP