我有一个奇怪的问题,试图运行使用zmq和msgpack的这个非常简单的C program

server.c没有问题,但是在clinet.c:39
msgpack_pack_int (&mpkg, i);i的值似乎
0的形式拾取,并且在每次迭代时都不会更改。一世
尝试了很多不同的事情(例如,指向
i并使用它,还尝试将其拆分为一个函数等)
似乎没有任何帮助。我可以看到msgpack_pack_int()
宏,但是为什么会引入这种行为,以及
我要克服吗?是否有可能改变行为的标志
这种宏(如我所见,扩展为内联函数)...
我已经尝试过-Werror -Wallgccclang,什么也没有
要么警告;(*

我尝试调试它,并按预期i递增。

我什至尝试过,无论如何它都会做同样的事情:

void pack (msgpack_packer *p, msgpack_sbuffer *b) {

   static volatile int i = 0;

   printf("\ni=%d\n", i);
   msgpack_packer_init (p, b, msgpack_sbuffer_write);
   msgpack_pack_array (p, 2);
   msgpack_pack_int (p, i++);
   msgpack_pack_str (p, "/i/am/a/clinet/");

}


我什至尝试了一些本来应该与众不同的东西,但是这里也没有运气-

int count (void) {
    static int i = 0;
    i += 1; return i;
}


谁能看到为什么会这样?

更新1:另外,我重新编译了msgpack库本身,没有优化标志,
而且也没有改变行为。

更新2:从git repo安装了msgpack,我仍然遇到相同的问题。

最佳答案

事实证明,在每次迭代中我都这样做:

 msgpack_packer_init (&mpkg, &sbuf, msgpack_sbuffer_write);


只需执行一次,而应该在那儿:

 msgpack_sbuffer_init (&sbuf);


要么:

 msgpack_sbuffer_clear (&sbuf);


msg_pack*函数放在一起,实际上确实是合乎逻辑的
取自simple example
问题实际上出在文档中,多一点注释会有所帮助!

更新:working versionversion without memcpy

关于c - 传递给`msgpack_pack_int()`宏的计数器变量不会增加,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7448693/

10-11 22:50
查看更多