2759|8

613

帖子

2

TA的资源

纯净的硅(初级)

楼主
 

STM32学习第七贴,函数变参篇,欢迎高手来喷,来指导attach_img [复制链接]

这段代码是网上百度抄来的,主要有两个问题,32位编译是正确的,但是64位编译是错误的,各位大虾指导一下。
#include

#define va_list void*
#define va_arg(arg, type)    *(type*)arg; arg = (char*)arg + sizeof(type); //
#define va_start(arg, start) arg = (va_list)(((char*)&(start)) + sizeof(start)) //

int sum(int nr, ...)
{
    int i = 0;
    int result = 0;
    va_list arg = NULL;
    va_start(arg, nr);

    for(i = 0; i < nr; i++)
    {
        result += va_arg(arg, int);  
    }
    return result;
}

int main(int argc, char* argv[])
{
    printf("%d\n", sum(4, 100,100,100,100));
    printf("%d\n", sum(3, 200, 200, 200));


    return 0;
}


这个是64位编出来错的

这个是32位编出来对的





此帖出自stm32/stm8论坛

最新回复

威武不过兰姐,雄壮不过司机  详情 回复 发表于 2017-6-30 09:02
点赞 关注
个人签名我是一头搞电子的猪,猪是一种好色的动物,猪八戒就是代表.       
 

回复
举报

7452

帖子

2

TA的资源

五彩晶圆(高级)

沙发
 
本帖最后由 freebsder 于 2017-6-29 14:08 编辑

你看的什么年份老窖的百度?
没这么麻烦,可能你看的还是错的。
  1. #include <stdarg.h>
  2. #include <stdio.h>
  3. int sum(int nr, ...)
  4. {
  5.     int i = 0;
  6.     int result = 0;
  7.     va_list ap;
  8.     va_start(ap, nr);
  9.     for(i = 0; i < nr; i++)
  10.     {
  11.         result += va_arg(ap, int);
  12.     }
  13.     va_end(ap);

  14.     return result;
  15. }

  16. int main(int argc, char* argv[])
  17. {
  18.     printf("%d\n", sum(4, 100,100,100,100));
  19.     printf("%d\n", sum(3, 200, 200, 200));

  20.     return 0;
  21. }
复制代码




此帖出自stm32/stm8论坛

点评

F叔,为啥你这个64位和32位就都可以  详情 回复 发表于 2017-6-29 14:14
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 

回复

613

帖子

2

TA的资源

纯净的硅(初级)

板凳
 
freebsder 发表于 2017-6-29 14:05
你看的什么年份老窖的百度?
没这么麻烦,可能你看的还是错的。[code]#include
#include  ...

F叔,为啥你这个64位和32位就都可以
此帖出自stm32/stm8论坛
 
个人签名我是一头搞电子的猪,猪是一种好色的动物,猪八戒就是代表.       
 

回复

7452

帖子

2

TA的资源

五彩晶圆(高级)

4
 
本帖最后由 freebsder 于 2017-6-29 14:18 编辑

因为你是乱搞的!我很早就说过乱搞会被日的。
va_* 算是标准库里的标准宏,在 stdarg.h 里面有。你自己#define一套不对的,那不被日还想怎样?
此帖出自stm32/stm8论坛

点评

抚叔威武雄壮  详情 回复 发表于 2017-6-29 16:45
F叔,能否自己搞一个正确的宏  详情 回复 发表于 2017-6-29 14:27
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

613

帖子

2

TA的资源

纯净的硅(初级)

5
 
freebsder 发表于 2017-6-29 14:17
因为你是乱搞的!我很早就说过乱搞会被日的。
va_* 算是标准库里的标准宏,在 stdarg.h 里面有。你自己#de ...

F叔,能否自己搞一个正确的宏
此帖出自stm32/stm8论坛
 
个人签名我是一头搞电子的猪,猪是一种好色的动物,猪八戒就是代表.       
 
 

回复

7452

帖子

2

TA的资源

五彩晶圆(高级)

6
 
stdarg.h 里面有
抄一个。64和32不一样的。
此帖出自stm32/stm8论坛

点评

完全看不懂stdarg.h里的代码,吐血  详情 回复 发表于 2017-6-29 14:53
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

613

帖子

2

TA的资源

纯净的硅(初级)

7
 
freebsder 发表于 2017-6-29 14:37
stdarg.h 里面有
抄一个。64和32不一样的。

完全看不懂stdarg.h里的代码,吐血
此帖出自stm32/stm8论坛
 
个人签名我是一头搞电子的猪,猪是一种好色的动物,猪八戒就是代表.       
 
 

回复

3414

帖子

0

TA的资源

纯净的硅(高级)

8
 
freebsder 发表于 2017-6-29 14:17
因为你是乱搞的!我很早就说过乱搞会被日的。
va_* 算是标准库里的标准宏,在 stdarg.h 里面有。你自己#de ...

抚叔威武雄壮
此帖出自stm32/stm8论坛

点评

威武不过兰姐,雄壮不过司机  详情 回复 发表于 2017-6-30 09:02
 
个人签名

So TM what......?

 

 

回复

7452

帖子

2

TA的资源

五彩晶圆(高级)

9
 

威武不过兰姐,雄壮不过司机
此帖出自stm32/stm8论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表