我有一個非常奇怪的問題,嘗試運行這是使用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