【发布时间】:2011-09-16 18:07:42
【问题描述】:
我在尝试运行这个非常简单的C program 时遇到了一个非常奇怪的问题,它使用 zmq 和 msgpack。
server.c 没有问题,但是在clinet.c:39 那里
这是msgpack_pack_int (&mpkg, i); 和 i 的值似乎
以0 的形式获取,并且在每次迭代中都不会改变。一世
尝试了很多不同的事情(例如,制作一个指向
i 并使用它,还尝试将其拆分为函数等)
似乎没有任何帮助。我可以看到msgpack_pack_int() 是
一个宏,但是为什么它会引入这样的行为以及什么可以
我要克服它吗?是否有可以改变行为的标志
这种宏(我看到它扩展为内联函数)......
我试过-Werror -Wall,用gcc和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,但我仍然遇到同样的问题。
【问题讨论】:
-
valgrind 也没有太大帮助 - gist.github.com/1222962