2013-04-25 61 views
1

我有一個用C語言編寫的庫。在代碼中,我找到了這樣幾行,如int x = x;。我需要用/ Zw標誌重寫所有這些代碼才能編譯。在一些地方,這意味着int x = some_struct->x;,但在另一種情況下,我不明白它是什麼。在某些地方,它首先使用x變量。所以在哪些情況下可以使用這樣的int x = x;表達式。有什麼可以使用`int x = x;`表達式(C語言)?

void oc_enc_tokenize_dc_frag_list(oc_enc_ctx *_enc,int _pli, 
    const ptrdiff_t *_coded_fragis,ptrdiff_t _ncoded_fragis, 
    int _prev_ndct_tokens1,int _prev_eob_run1){ 
    const ogg_int16_t *frag_dc; 
    ptrdiff_t   fragii; 
    unsigned char  *dct_tokens0; 
    unsigned char  *dct_tokens1; 
    ogg_uint16_t  *extra_bits0; 
    ogg_uint16_t  *extra_bits1; 
    ptrdiff_t   ti0; 
    ptrdiff_t   ti1r; 
    ptrdiff_t   ti1w; 
    int    eob_run0; 
    int    eob_run1; 
    int    neobs1; 
    int    token; 
    int    eb; 
    int    token1=token1; 
    int    eb1=eb1; 
    /*Return immediately if there are no coded fragments; otherwise we'd flush 
     any trailing EOB run into the AC 1 list and never read it back out.*/ 
    if(_ncoded_fragis<=0)return; 
    frag_dc=_enc->frag_dc; 
    dct_tokens0=_enc->dct_tokens[_pli][0]; 
    dct_tokens1=_enc->dct_tokens[_pli][1]; 
    extra_bits0=_enc->extra_bits[_pli][0]; 
    extra_bits1=_enc->extra_bits[_pli][1]; 
    ti0=_enc->ndct_tokens[_pli][0]; 
    ti1w=ti1r=_prev_ndct_tokens1; 
    eob_run0=_enc->eob_run[_pli][0]; 
    /*Flush any trailing EOB run for the 1st AC coefficient. 
     This is needed to allow us to track tokens to the end of the list.*/ 
    eob_run1=_enc->eob_run[_pli][1]; 
    if(eob_run1>0)oc_enc_eob_log(_enc,_pli,1,eob_run1); 
    /*If there was an active EOB run at the start of the 1st AC stack, read it 
     in and decode it.*/ 
    if(_prev_eob_run1>0){ 
     token1=dct_tokens1[ti1r]; 
     eb1=extra_bits1[ti1r]; 
     ti1r++; 
    eob_run1=oc_decode_eob_token(token1,eb1); 

代碼的exaple - 可變token1 - 它在文件中第一次使用的token1token1在其他文件中從未遇到,它不是全球性的,不是靜態的任何地方......

更新
與/度Zw標誌:錯誤C4700:未初始化的局部變量 'TOKEN1' 使用
無標誌:所有的正常工作與此LIB
更新2
theora 1.1.1 LIB
恢復
在評論球員的意見,我更換每int x = x;int x = 0,一切工作正常=)答案

+4

你在那裏迷失了我。你需要更清楚自己想要做什麼。還有一些代碼示例可以幫助 – 2013-04-25 10:48:53

+4

你可以編輯你的問題來包含一個包含'int x = x;'行之一的函數,這會讓你感到困惑嗎? – simonc 2013-04-25 10:50:04

+2

什麼是/ Zw標誌?我想是MSVC嗎? – 2013-04-25 10:50:38

回答

6

如果你字面上有int x = x;,沒有太多用處。這件作品嚐試初始化自己的x,即用一個未初始化的變量的值。

這可能會抑制一些與未初始化或未使用變量相關的編譯器警告/錯誤。但是一些編譯器也可以捕獲這些可疑的情況。

這可能還會導致C標準觀點中的未定義行爲。

編輯Random Number Bug in Debian Linux是一篇關於未初始化變量的使用和濫用以及一天可能支付的價格的文章(還有其他鏈接)。

+0

如果它的全局,那麼它可能不會被undefined – 2013-04-25 10:53:39

+0

@Koushik你不能初始化一個全局變量本身,只有一個常量表達式。 – 2013-04-25 10:54:08

+0

哦,也許它的C++我想對不起。 – 2013-04-25 10:55:01

5

大家感謝名單這可以防止編譯器發出的警告變量未被使用。

+1

我會說「一些編譯器」。其他編譯器比這更聰明。 – Art 2013-04-25 11:21:05

相關問題