麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C > 正文

關(guān)于c語言的一個(gè)小bug詳解

2020-01-26 15:56:17
字體:
供稿:網(wǎng)友

不多說,說了都是累贅!直接看代碼吧!

復(fù)制代碼 代碼如下:

<SPAN style="FONT-SIZE: 14px">#include <stdio.h>
int array[] = {23, 34, 12, 17, 204, 99, 16};
#define TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))
int main (void)
{
    int d = -1, x;
    if( d <= (TOTAL_ELEMENTS -2))
    {  
        x = array[d+1];
        printf("d <= TOTAL_ELEMENTS-2/n");
    }  
    else
    {  
        printf("the bug is out!/n");
    }  
    return 0;
}
</SPAN>

有興趣的可以先猜猜結(jié)果是啥,然后再運(yùn)行下,看看結(jié)果是不是和自己想的一樣? 其中的道理又是什么呢?

gcc 下如行結(jié)果如下:
復(fù)制代碼 代碼如下:

<SPAN style="FONT-SIZE: 14px">zy@pc:~/workspace/homework/commonfunc$ ./a.out
the bug is out!
</SPAN>

復(fù)制代碼 代碼如下:

<SPAN style="FONT-SIZE: 14px">
TOTAL_ELEMENTS </SPAN>

所定義的值是unsigned int 類型(因?yàn)閟izeof()返回類型是無符號(hào)的),if 語句在有符號(hào)和無符號(hào)之間測(cè)試相等性,所以將

d升級(jí)為無符號(hào)(unsigned int )類型,-1轉(zhuǎn)換成 unsigned int 的結(jié)果是一個(gè)非常巨大的正整數(shù)的,致使表達(dá)式為假,

所以要想結(jié)果正確,先得強(qiáng)轉(zhuǎn)類型

復(fù)制代碼 代碼如下:

<SPAN style="FONT-SIZE: 14px">if( d <=   (int)(TOTAL_ELEMENTS -2))
</SPAN>

這樣就能得到正確的結(jié)果啦!

對(duì)無符號(hào)的建議;
1 盡量不要在代碼中使用無符號(hào)類型,以免增加不必要的復(fù)雜性,尤其是僅僅因?yàn)闊o符號(hào)數(shù)不存在負(fù)值而用它來表示

2 盡量使用int這樣有符號(hào)類型,這樣在涉及升級(jí)混合類型的復(fù)雜細(xì)節(jié)時(shí),不必?fù)?dān)心邊界情況(-1 翻譯成非常大的整數(shù))

3 只有在使用位段和二進(jìn)制掩碼時(shí),才使用無符號(hào)數(shù)。而且應(yīng)該在表達(dá)式中使用強(qiáng)制類型轉(zhuǎn)換,使操作數(shù)均為有符號(hào)數(shù)或者無符號(hào)數(shù),這樣不必由編譯器來選擇結(jié)果的類型。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 亚洲91精品| 欧美日本亚洲视频 | 久久久久久久久久久久久久国产 | 日本精品免费观看 | 欧美日本中文字幕 | 丰满年轻岳中文字幕一区二区 | 毛片免 | 久章草在线视频 | 中文字幕一区二区三区四区 | 粉嫩粉嫩一区二区三区在线播放 | wwwxxx免费视频 | 欧美日韩视频第一页 | 国产成人精品网站 | 国产日韩大片 | 国产做爰 | 久久综合九色综合久久久精品综合 | 国产自在自线午夜精品视频在 | 狠狠干天天| 欧美a∨亚洲欧美亚洲 | 国产免费观看视频 | www亚洲免费 | 欧美视频一二三区 | 一级黄色免费观看 | 性欧美性欧美 | 好吊色37pao在线观看 | 亚洲无av | 激情小说激情电影 | 羞羞视频免费网站男男 | 精品一区二区三区免费视频 | 羞羞的动漫在线观看 | 亚洲网在线观看 | 国产精品亚洲综合一区二区三区 | 天天躁狠狠躁夜躁2020挡不住 | 久久经典国产视频 | 国产免费一区二区三区网站免费 | 成人毛片在线免费看 | 国产精品九九久久一区hh | 黄色大片在线观看 | 91久久精品一 | 国产精品美女久久久免费 | 免费观看黄色片视频 |