我有一个非常奇怪的问题,试图运行这个使用zmq和msgpack的非常简单的C 程序。
没有问题server.c
,但是clinet.c:39
有这个msgpack_pack_int (&mpkg, i);
,并且 的值i
似乎被拾取为0
并且在每次迭代中都不会改变。我尝试了很多不同的事情(例如,创建一个指向
i
并使用它的指针,还尝试将其拆分为一个函数等),但似乎没有任何帮助。我可以看到这msgpack_pack_int()
是一个宏,但为什么它会引入这种行为,我能做些什么来克服它?是否有一个标志可以改变这种宏的行为(因为我看到它扩展为内联函数)......我已经尝试过-Werror -Wall
,使用gcc
and clang
,也没有任何警告出现;(*
我尝试调试它并按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,我仍然遇到同样的问题。