最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2013年08月19日 08:45:28   作者:  
以下是對(duì)c語(yǔ)言中的一個(gè)小bug進(jìn)行了詳細(xì)的分析介紹。需要的朋友可以過(guò)來(lái)參考下

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

復(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 類(lèi)型(因?yàn)閟izeof()返回類(lèi)型是無(wú)符號(hào)的),if 語(yǔ)句在有符號(hào)和無(wú)符號(hào)之間測(cè)試相等性,所以將

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

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

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

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

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

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

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

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

相關(guān)文章

  • c++類(lèi)型轉(zhuǎn)換及RTTI運(yùn)行階段類(lèi)型識(shí)別

    c++類(lèi)型轉(zhuǎn)換及RTTI運(yùn)行階段類(lèi)型識(shí)別

    這篇文章主要為大家介紹了c++類(lèi)型轉(zhuǎn)換及RTTI運(yùn)行階段類(lèi)型識(shí)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2023-05-05
  • C++產(chǎn)生隨機(jī)數(shù)的實(shí)現(xiàn)代碼

    C++產(chǎn)生隨機(jī)數(shù)的實(shí)現(xiàn)代碼

    本篇文章是對(duì)C++中產(chǎn)生隨機(jī)數(shù)的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中const關(guān)鍵字的用法圖文詳解

    C++中const關(guān)鍵字的用法圖文詳解

    在C++中const是一個(gè)關(guān)鍵字,用于聲明常量,它可以用于多種情況,包括聲明常量變量、常量指針、以及成員函數(shù)中的常量性,這篇文章主要給大家介紹了關(guān)于C++中const關(guān)鍵字用法的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • 深入淺出理解C語(yǔ)言指針的綜合應(yīng)用

    深入淺出理解C語(yǔ)言指針的綜合應(yīng)用

    指針是指向另一個(gè)變量的變量。意思是一個(gè)指針保存的是另一個(gè)變量的內(nèi)存地址。換句話說(shuō),指針保存的并不是普通意義上的數(shù)值,而是另一個(gè)變量的地址值。一個(gè)指針保存了另一個(gè)變量的地址值,就說(shuō)這個(gè)指針“指向”了那個(gè)變量
    2022-02-02
  • C語(yǔ)言float內(nèi)存布局示例詳解

    C語(yǔ)言float內(nèi)存布局示例詳解

    這篇文章主要為大家介紹了C語(yǔ)言float內(nèi)存布局示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Dijkstra算法最短路徑的C++實(shí)現(xiàn)與輸出路徑

    Dijkstra算法最短路徑的C++實(shí)現(xiàn)與輸出路徑

    今天小編就為大家分享一篇關(guān)于Dijkstra算法最短路徑的C++實(shí)現(xiàn)與輸出路徑,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • Visual?Studio下Eigen庫(kù)環(huán)境配置方式

    Visual?Studio下Eigen庫(kù)環(huán)境配置方式

    這篇文章主要介紹了Visual?Studio下Eigen庫(kù)環(huán)境配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C語(yǔ)言代碼實(shí)現(xiàn)簡(jiǎn)單2048游戲

    C語(yǔ)言代碼實(shí)現(xiàn)簡(jiǎn)單2048游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)2048游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Qt實(shí)現(xiàn)密碼顯示按鈕

    Qt實(shí)現(xiàn)密碼顯示按鈕

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)密碼顯示按鈕,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++移動(dòng)操作,RVO和NRVO詳細(xì)

    C++移動(dòng)操作,RVO和NRVO詳細(xì)

    本文將討論了何時(shí)C++會(huì)自動(dòng)進(jìn)行移動(dòng)操作,并且說(shuō)明了復(fù)制消除,RVO和NRVO優(yōu)的化等香瓜吧資料,需要的小伙伴可以參考一下
    2021-09-09

最新評(píng)論

青川县| 色达县| 会泽县| 福海县| 通渭县| 芦山县| 昌平区| 侯马市| 九江市| 武隆县| 文山县| 福泉市| 洱源县| 隆尧县| 博野县| 抚宁县| 阿巴嘎旗| 聊城市| 马鞍山市| 苗栗县| 白沙| 米林县| 突泉县| 兴宁市| 晋江市| 岱山县| 朝阳区| 仁寿县| 嘉荫县| 新乐市| 二连浩特市| 淮南市| 大余县| 晋江市| 岗巴县| 巴林左旗| 秭归县| 丰镇市| 万宁市| 东兴市| 新干县|