我有一个非常奇怪的问题,尝试运行这是使用ZMQ和msgpack这个很简单C program。计数器变量()`宏不会增加
没有与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回购安装msgpack,我仍然有同样的问题。
valgrind也没有太大帮助 - https://gist.github.com/1222962 – errordeveloper