51Testing软件测试论坛

标题: b 定义为uint32_t为什么会等于-1? [打印本页]

作者: szxiaosong    时间: 2010-6-11 11:25
标题: b 定义为uint32_t为什么会等于-1?
代码:

#include "lrs.h"

vuser_init()
{
        typedef unsigned short int        uint16_t;
    typedef unsigned  long int         uint32_t;
        uint16_t a;
        uint32_t b;
        int i;
    lrs_startup(257);       
        a=0;b=0;
        a--;b--;
        lr_output_message("a INFO==>%i,%i",sizeof(a),sizeof(b));
        for (i=1;i<10;i++) {
                lr_output_message("INFO==>%i,%i",a,b);
                a++;b++;
        }
    return 0;
}

执行结果:

vuser_init.c(13): a INFO==>2,4
vuser_init.c(15): INFO==>65535,-1
vuser_init.c(15): INFO==>0,0
vuser_init.c(15): INFO==>1,1
vuser_init.c(15): INFO==>2,2
vuser_init.c(15): INFO==>3,3
vuser_init.c(15): INFO==>4,4
vuser_init.c(15): INFO==>5,5
vuser_init.c(15): INFO==>6,6
vuser_init.c(15): INFO==>7,7

问题:
vuser_init.c(15): INFO==>65535,-1
a的输出是我们预想的。
但是b 定义为uint32_t为什么会等于-1?
作者: szxiaosong    时间: 2010-6-11 15:49
技术贴要顶起
作者: szxiaosong    时间: 2010-6-11 16:05
vs2008下测试本段代码
b=4294967295。

结论:loadrunner的bug。

热烈欢迎高手的不同意见
作者: szxiaosong    时间: 2010-6-12 14:54
这个版,没有讨论的气氛
作者: xavier_007    时间: 2010-6-12 18:03
lr_output_message("INFO==>%d,%ul",a,b);
这样输出是对的
不知道为啥
lr的c和vs中编译的c还是不一样的。也许mercury这么定义有他们的理由
例如我们平时用(for i =0; i<12; i++)
在lr必须先定义i
还有对字符指针的赋值等

[ 本帖最后由 xavier_007 于 2010-6-12 18:04 编辑 ]




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2