什么可能是使用`int x = x;`表达式(C语言)?

时间:2013-04-25 10:47:45

标签: c syntax coding-style

我有一个用C语言编写的库。在代码中,我找到了几行int x = x;。我需要用/ Zw标志重写所有这些代码以进行编译。在某些意味着int x = some_struct->x;的地方,但在另一些地方,我不明白它是什么。在某些地方,它首先使用x变量。所以在哪些情况下可以使用int x = x;表达式。

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:未初始化的本地变量&#39; token1&#39;用过的
没有旗帜:所有这一切都可以正常使用 更新2
它是theora 1.1.1 lib
恢复
根据评论中的人的建议,我用int x = x;替换每个int x = 0并且一切正常=)每个人都在寻找答案

2 个答案:

答案 0 :(得分:6)

如果您确实拥有int x = x;,则使用它的次数不多。这篇文章尝试用自己初始化x,即用未初始化的变量的值。

这可能会抑制与未初始化或未使用的变量相关的某些编译器警告/错误。但是一些编译器也可以捕获这些可疑的案例。

这可能还会导致C标准的观点出现未定义的行为。

编辑Random Number Bug in Debian Linux是一篇关于未初始化变量的使用和滥用以及一天可能支付的价格的文章(有更多链接)。

答案 1 :(得分:5)

它可以防止编译器发出变量未使用的警告。