szxiaosong 发表于 2010-6-11 11:25:02

b 定义为uint32_t为什么会等于-1?

代码:

#include "lrs.h"

vuser_init()
{
        typedef unsigned short int        uint16_t;
    typedef unsignedlong 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:02

技术贴要顶起

szxiaosong 发表于 2010-6-11 16:05:17

vs2008下测试本段代码
b=4294967295。

结论:loadrunner的bug。

热烈欢迎高手的不同意见

szxiaosong 发表于 2010-6-12 14:54:17

这个版,没有讨论的气氛

xavier_007 发表于 2010-6-12 18:03:06

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 编辑 ]
页: [1]
查看完整版本: b 定义为uint32_t为什么会等于-1?