zmqとmsgpackを使用しているこの非常に単純なCプログラムを実行しようとすると、非常に奇妙な問題が発生します。
に問題はありませんがserver.c
、clinet.c:39
これがmsgpack_pack_int (&mpkg, i);
あり、の値は、反復ごとに変化しないi
ように取得されているようです。0
私はさまざまなことを試しましたが(たとえば、ポインターを作成して
i
それを使用したり、関数に分割したりするなど)、何も役に立たないようです。それはマクロであることがわかりますmsgpack_pack_int()
が、なぜそれがそのような振る舞いを導入するのでしょうか、そしてそれを克服するために何ができるでしょうか?この種のマクロの動作を変更する可能性のあるフラグはありますか(インライン関数に展開されるのがわかります)... -Werror -Wall
、with 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をインストールしても、同じ問題が発生します。