2011-09-16 274 views
0

我有一個非常奇怪的問題,嘗試運行這是使用ZMQmsgpack這個很簡單C program計數器變量()`宏不會增加

沒有與server.c沒有問題的,但是在clinet.c:39有 是這個msgpack_pack_int (&mpkg, i);i的價值似乎 被拾起爲0,並在每次迭代不會改變。我 已經嘗試了一堆不同的東西(例如,使指針 i並使用它,也試圖將它分成一個功能等) 並沒有什麼似乎幫助。我可以看到msgpack_pack_int()是一個宏,但是爲什麼它會引入這樣的行爲和我能做些什麼來克服呢?是否有可能改變行爲 這種宏觀的(因爲我看到它擴展到內聯函數)... 我試圖-Werror -Wall,與gccclang,並沒有什麼 在警告或者出現一個標誌;( *

我試圖調試它和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,我仍然有同樣的問題。

+0

valgrind也沒有太大幫助 - https://gist.github.com/1222962 – errordeveloper

回答

0

事實證明,在每次迭代我這樣做:

msgpack_packer_init (&mpkg, &sbuf, msgpack_sbuffer_write); 

一個需要做一次,這應該是有代替:

msgpack_sbuffer_init (&sbuf); 

或:

msgpack_sbuffer_clear (&sbuf); 

將​​函數放在一起確實相當合乎邏輯 這是從simple example和 採取的問題是真的與文檔,一個額外的評論會幫助!

更新:working version & version without memcpy