日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言可移植性较差吗,c陷阱与缺陷--可移植性缺陷

發(fā)布時間:2025/3/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言可移植性较差吗,c陷阱与缺陷--可移植性缺陷 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

引入

c語言是比較底層的語言,相對于c++和java等高級語言而言。c語言在許多不同的系統(tǒng)平臺上都有各自的實現(xiàn),由于各自的實現(xiàn)之間有細(xì)微的差別,導(dǎo)致了如今的移植性問題。

在書中說到,由于程序的生命期一般比硬件更長,所以應(yīng)該注意語言自身的可移植性。但時至今天,這個說法或許需要更正了。

但作者的原意在于,注意可移植性問題可以使你的程序生命期更長,可施展的空間

更大。

一?c語言標(biāo)準(zhǔn)的變更

c語言標(biāo)準(zhǔn)的變更使得語言的特性更多,更方便程序的工作。但是這種變更經(jīng)常不具備向后兼容性,如此要在語言的重用性和更強大的語言特性間做個選擇。

二?標(biāo)識符名稱的限制

這種限制主要體現(xiàn)在其大小寫和長度上面。

三?整數(shù)的大小

c語言中為編程者提供了3種不同長度的整數(shù):shor型、int型和long型,c語言的定義中對各種類型整數(shù)的相對長度進行了規(guī)定:

1?3種類型的整數(shù)其長度是非遞減的。

2?一個普通(int類型)整數(shù)足夠大以容納任何數(shù)組下標(biāo)。

3?字符長度由硬件特性決定。

注:?現(xiàn)代大多數(shù)機器的字符長度為8位,然而,現(xiàn)在越來越多的c語言實現(xiàn)的字符長度都是16位,已處理諸如漢字之類的語言的大字符集。但是字符類型char仍然是8位的。

在32位機器上,vc6.0的編譯環(huán)境下,shor類型為16位,int和long類型都是32位。

解決方法?用類型定義來定義“新的”類型,即使類型長度需要變動之需要改動類型定義即可。

如?typedef long

tenmil;//tenmil類型表示的是最大的類型

四?字符是有符號整數(shù)還是無符號整數(shù)

根據(jù)系統(tǒng)不一樣可能有不一樣的定義,但是如果需要統(tǒng)一的話,可以把字符轉(zhuǎn)變?yōu)闊o符號數(shù)然后再處理。

五?移位運算符

1?在向右移位時,空出來的位可能由0或符號位的副本來填充。

2?移位計數(shù)(即移位操作的位數(shù))的范圍為[0,被移位的對象的長度)

六?內(nèi)存位置0

在所有的c程序中,無用null指針的效果都是未定義的。但對于0內(nèi)存地址的數(shù)據(jù),不同的機器有自己不同的權(quán)限保護。

七?除法運算時發(fā)生的截斷

例如

q = a / b;

r = a % b;

我們希望a、b、q、r之間維護以下的關(guān)系:

1?最重要的一點,我們希望q*b + r =

a,因為這是定義余數(shù)的關(guān)系。

2?如果我們改變a的正負(fù)號,我們希望這會改變q的符號,但這不會改變q的絕對值。

3?當(dāng)b〉0時,我們希望保證r>=0且r

但這三條性質(zhì)不能同時具備,大多數(shù)的程序設(shè)計語言選擇了放棄第3條,使得性質(zhì)1和性質(zhì)2可以得到滿足。

八?隨機數(shù)的大小

ANSI

C標(biāo)準(zhǔn)中定義了一個常數(shù)RAND_MAX,它的值等于了隨機數(shù)的最大取值。

九?大小寫轉(zhuǎn)換

庫函數(shù)toupper和tolower起初被實現(xiàn)為宏:

#define toupper(c) ((c) + 'A' - 'a')

#define tolower(c) ((c) + 'a' - 'A')

這兩個宏都依賴于特定實現(xiàn)中字符集的性質(zhì),即需要所有的大寫字母與相應(yīng)的小寫字母之間的差值是一個常量。這個假定對ASCII字符集和EBCDIC字符集來說都是成立的。

十?首先釋放,然后重新分配

大多數(shù)c語言實現(xiàn)都是用了3個內(nèi)存分配函數(shù):malloc,

realloc和free。

但是問題在于free掉的內(nèi)存會被系統(tǒng)重新分配,但是如果在系統(tǒng)沒有重新分配之前,再次使用這段內(nèi)存的話仍能獲得之前的內(nèi)存內(nèi)容。

例如

free(p);

p = realloc (p, newsize);

在某些系統(tǒng)中是允許的。

但是這種做法還是有危險的。因為并非所有的c實現(xiàn)按在某塊內(nèi)存被釋放后還能較長時間地保留。

十一?可移植性問題的一個例子

原型:

void

printnum (long n, void (*p)90)

{

if(n<0)?{

(*p) ('-');

n = -n;

}

if (n >= 10)

printnum(n/10, p);

(*p) ((int)(n % 10) + '0');

}

這是個打印整數(shù)的函數(shù),以下為考慮到可移植性后經(jīng)過改動的程序:

void

printeg (long n, void (*p)())

{

long q;

int r;

q = n / 10;

r = n % 10;

if (r>0) {

r - =10;

q++;

}

if (n <= -10)

printneg (q, p);

(*p) ("0123456789"[-r]);

}

修改點:

1?在字符集上0-9的字符未必是連續(xù)有序的。

2?n<0時,由于有符號數(shù)的范圍一般是-2[n]~2[n]-1(2[n]表示2的n次冪,n為位數(shù)),所以當(dāng)-2[n]取

正數(shù)時變?yōu)?[n]時已經(jīng)溢出了。解決方法為從負(fù)數(shù)方向去解決這個問題。

后語:

考慮可移植性是個復(fù)雜和繁瑣的問題,因為以后的硬件什么的怎么變化無法預(yù)計。但是,努力提高軟件的可移植性,實際上延長了軟件的生命期。

tips

軟件中出現(xiàn)的很多可移植性問題或其他問題,很多時候在于邊界條件上。所以在寫程序時,不妨把邊界條件作為一個重要的考慮點進行測試。

以下為本章的第二道聯(lián)系題我的答案:

int

ctol(char ctl)

//該處在答案中不存在,但考慮到字符集自身排序問題還是在此處加上了,

//不過效率顯然降低了。

{

int i=0;

char num[10] = "0123456789";

for(;i<10;i++)

{

if(num[i] == ctl)

return i;

}

}

long

atol(char *cl)

{

int result = 0;

int i = 0;

if((*cl == '+') || (*cl == '-'))

i++;

while(1)

{

if((cl[i] < '0') || (cl[i]

> '9'))

{

assert(0,

"invalid input!");

}

result = result*10 +

ctol(cli[i]);?i++;

}

if(*cl == '-')

result = -result;

return result;

}

總結(jié)

以上是生活随笔為你收集整理的c语言可移植性较差吗,c陷阱与缺陷--可移植性缺陷的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品人妻无码一区二区三区蜜桃一 | 成年人视频免费在线观看 | 又黄又爽又刺激的视频 | 国产性猛交╳xxx乱大交一区 | 国产精品久久久久久久免费 | 91禁蘑菇在线看 | 国产老女人乱淫免费可以 | 激情影院内射美女 | 无码国产精品一区二区色情男同 | 国产色综合天天综合网 | 欧美日韩在线播放三区四区 | 久久精国产 | 91色在线视频 | 九九久久国产视频 | 一区二区三区不卡在线观看 | 五月六月丁香 | 亚洲国产精品免费视频 | 先锋影音av在线资源 | 人妻丰满熟妇岳av无码区hd | www.色啪啪.com | 天天操天天爱天天干 | 欧美一级乱黄 | 亚洲成人精品一区 | 91免费.| 色爽爽爽 | jizzzxxxx| 国产夫妇交换聚会群4p | 国产精品99久久久久久久女警 | 欧美 变态 另类 人妖 | 性高潮久久久久久久久久 | 午夜精品免费 | 91av视频 | 久久露脸国语精品国产91 | 午夜激情综合 | 91麻豆精品视频 | 波多野结av衣东京热无码专区 | 成人午夜淫片100集 伊人久久国产 | 国产在线极品 | 三级电影网址 | 高清国产一区二区三区 | 夜夜春很很躁夜夜躁 | 免费污污视频在线观看 | 91在线免费视频 | 亚洲欧洲在线播放 | 俺去射 | 国产精品人成在线观看免费 | 亚洲国产日韩一区 | 20日本xxxxxxxxx46 欧美激情一级 | 麻豆成人久久精品一区二区三区 | 麻豆精品国产传媒av绿帽社 | 久久色网| 国产传媒专区 | 青青青视频免费 | 狂野欧美性猛交xxⅹ李丽珍 | 国产传媒在线视频 | 成年女人18级毛片毛片免费 | 成人中文在线 | 少妇一级淫免费观看 | 午夜精品福利一区二区 | 国产精品成人网 | 老司机午夜福利视频 | 国产做爰视频免费播放 | 人人干97| 真人一及毛片 | 亚洲少妇15p | 久久久精品人妻一区二区三区四 | 国产高清视频 | 亚洲色图制服诱惑 | 中文字幕在线视频免费 | 日韩亚洲视频在线观看 | 色戒av| 2019国产在线| 午夜不卡影院 | 一区二区黄色片 | 男人天堂社区 | sese久久 | 久草国产精品 | av白浆| 婷婷色图 | 一本一道久久综合 | 亚洲一区二区三区四区av | av在线精品 | 精品亚洲在线 | 97操碰| 能在线观看的av网站 | 亚洲最大成人网色 | 麻豆成人久久精品一区二区三区 | 自拍欧美日韩 | 亚洲高清视频一区二区 | 国产精品网站在线 | 99久久精品国产毛片 | 国产精品免费观看视频 | 日韩中文字幕视频 | 插插看| h视频在线免费看 | 国产网站免费在线观看 | 午夜精品无码一区二区三区 | 成人毛片在线免费观看 | 日本少妇高潮喷水xxxxxxx |