锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
http://blog.csdn.net/dylgsy/archive/2006/08/16/1076044.aspx UML綾誨浘鍏崇郴鍏ㄩ潰鍓栨瀽
http://www.ibm.com/developerworks/cn/rational/r-shenzj/ 鍒╃敤Rational Rose榪涜C++浠g爜鍜屾暟鎹簱緇撴瀯鍒嗘瀽
vs2008 鏀寔 c++ 綾誨浘浜?br>
]]>
搴撴湁鍔ㄦ佷笌闈?rùn)鎬佷袱縐嶏紝鍔ㄦ侀氬父鐢?so涓哄悗緙錛岄潤(rùn)鎬佺敤.a涓哄悗緙銆備緥濡傦細(xì)libhello.so libhello.a
涓轟簡(jiǎn)鍦ㄥ悓涓緋葷粺涓嬌鐢ㄤ笉鍚岀増鏈殑搴擄紝鍙互鍦ㄥ簱鏂囦歡鍚嶅悗鍔犱笂鐗堟湰鍙蜂負(fù)鍚庣紑,渚嬪錛?libhello.so.1.0,鐢變簬紼嬪簭榪炴帴榛樿浠?so涓烘枃浠跺悗緙鍚嶃傛墍浠ヤ負(fù)浜?jiǎn)鋴社敤杩欎簺搴撳Q岄氬父浣跨敤寤虹珛絎﹀彿榪炴帴鐨勬柟寮忋?
ln -s libhello.so.1.0 libhello.so.1
ln -s libhello.so.1 libhello.so
浣跨敤搴?
褰撹浣跨敤闈?rùn)鎬佺殑紼嬪簭搴撴椂錛岃繛鎺ュ櫒浼?xì)鎵惧嚭绋嬪簭鎵闇鐨勫嚱鏁幫紝鐒跺悗灝嗗畠浠嫹璐濆埌鎵ц鏂囦歡錛岀敱浜庤繖縐嶆嫹璐濇槸瀹屾暣鐨勶紝鎵浠ヤ竴鏃﹁繛鎺ユ垚鍔燂紝闈?rùn)鎬佺▼搴忓簱涔熷氨涓嶅啀闇瑕佷簡(jiǎn)銆傜劧鑰岋紝瀵瑰姩鎬佸簱鑰岃█錛屽氨涓嶆槸榪欐牱銆傚姩鎬佸簱浼?xì)鍦ㄦ墽琛尳E嬪簭鍐呯暀涓嬩竴涓爣璁扳樻寚鏄庡綋紼嬪簭鎵ц鏃訛紝棣栧厛蹇呴』杞藉叆榪欎釜搴撱傜敱浜庡姩鎬佸簱鑺傜渷絀洪棿錛宭inux涓嬭繘琛岃繛鎺ョ殑緙虹渷鎿嶄綔鏄鍏堣繛鎺ュ姩鎬佸簱錛屼篃灝辨槸璇達(dá)紝濡傛灉鍚屾椂瀛樺湪闈?rùn)鎬佸拰鍔ㄦ佸簱錛屼笉鐗瑰埆鎸囧畾鐨勮瘽錛屽皢涓庡姩鎬佸簱鐩歌繛鎺ャ?
鐜板湪鍋囪鏈変竴涓彨hello鐨勭▼搴忓紑鍙戝寘錛屽畠鎻愪緵涓涓潤(rùn)鎬佸簱libhello.a 涓涓姩鎬佸簱libhello.so,涓涓ご鏂囦歡hello.h,澶存枃浠朵腑鎻愪緵sayhello()榪欎釜鍑芥暟
/* hello.h */
void sayhello();
鍙﹀榪樻湁涓浜涜鏄庢枃妗c傝繖涓涓吀鍨嬬殑紼嬪簭寮鍙戝寘緇撴瀯
1.涓庡姩鎬佸簱榪炴帴
linux榛樿鐨勫氨鏄笌鍔ㄦ佸簱榪炴帴錛屼笅闈㈣繖孌電▼搴弔estlib.c浣跨敤hello搴撲腑鐨剆ayhello()鍑芥暟
/*testlib.c*/
#include <hello.h>
#include <stdio.h>
int main()
{
sayhello();
return 0;
}
浣跨敤濡備笅鍛戒護(hù)榪涜緙栬瘧
$gcc -c testlib.c -o testlib.o
鐢ㄥ涓嬪懡浠よ繛鎺ワ細(xì)
$gcc testlib.o -lhello -o testlib
鍦ㄨ繛鎺ユ椂瑕佹敞鎰忥紝鍋囪libhello.o 鍜宭ibhello.a閮藉湪緙虹渷鐨勫簱鎼滅儲(chǔ)璺緞涓?usr/lib涓嬶紝濡傛灉鍦ㄥ叾瀹冧綅緗鍔犱笂-L鍙傛暟
涓庝笌闈?rùn)鎬佸簱榪炴帴楹葷儲(chǔ)涓浜涳紝涓昏鏄弬鏁伴棶棰樸傝繕鏄笂闈㈢殑渚嬪瓙錛?
$gcc testlib.o -o testlib -WI,-Bstatic -lhello
娉細(xì)榪欎釜鐗瑰埆鐨?-WI錛?Bstatic"鍙傛暟錛屽疄闄呬笂鏄紶緇欎簡(jiǎn)榪炴帴鍣╨d.
鎸囩ず瀹冧笌闈?rùn)鎬佸簱榪炴帴錛屽鏋滅郴緇熶腑鍙湁闈?rùn)鎬佸簱褰撶劧灝變笉闇瑕佽繖涓弬鏁頒簡(jiǎn)銆?
濡傛灉瑕佸拰澶氫釜搴撶浉榪炴帴錛岃屾瘡涓簱鐨勮繛鎺ユ柟寮忎笉涓鏍鳳紝姣斿涓婇潰鐨勭▼搴忔棦瑕佸拰libhello榪涜闈?rùn)鎬佽繛鎺ワ紝鍙堣鍜宭ibbye榪涜鍔ㄦ佽繛鎺ワ紝鍏跺懡浠ゅ簲涓猴細(xì)
$gcc testlib.o -o testlib -WI,-Bstatic -lhello -WI,-Bdynamic -lbye
3.鍔ㄦ佸簱鐨勮礬寰勯棶棰?
涓轟簡(jiǎn)璁╂墽琛岀▼搴忛『鍒╂壘鍒板姩鎬佸簱錛屾湁涓夌鏂規(guī)硶錛?
(1)鎶婂簱鎷瘋礉鍒?usr/lib鍜?lib鐩綍涓嬨?
(2)鍦↙D_LIBRARY_PATH鐜鍙橀噺涓姞涓婂簱鎵鍦ㄨ礬寰勩備緥濡傚姩鎬佸簱libhello.so鍦?home/ting/lib鐩綍涓嬶紝浠ash涓轟緥錛屼嬌鐢ㄥ懡浠わ細(xì)
$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/ting/lib
(3) 淇敼/etc/ld.so.conf鏂囦歡錛屾妸搴撴墍鍦ㄧ殑璺緞鍔犲埌鏂囦歡鏈熬錛屽茍鎵цldconfig鍒鋒柊銆傝繖鏍鳳紝鍔犲叆鐨勭洰褰曚笅鐨勬墍鏈夊簱鏂囦歡閮藉彲瑙併?
4.鏌ョ湅搴撲腑鐨勭鍙?
鏈夋椂鍊欏彲鑳介渶瑕佹煡鐪嬩竴涓簱涓埌搴曟湁鍝簺鍑芥暟錛宯m鍛戒護(hù)鍙互鎵撳嵃鍑哄簱涓殑娑夊強(qiáng)鍒扮殑鎵鏈夌鍙楓傚簱鏃㈠彲浠ユ槸闈?rùn)鎬佺殑涔熷彲浠ユ槸鍔ㄦ佺殑銆俷m鍒楀嚭鐨勭鍙鋒湁寰堝錛屽父瑙佺殑鏈変笁縐嶏紝涓縐嶆槸鍦ㄥ簱涓璋冪敤錛屼絾騫舵病鏈夊湪搴撲腑瀹氫箟(琛ㄦ槑闇瑕佸叾浠栧簱鏀寔)錛岀敤U琛ㄧず錛涗竴縐嶆槸搴撲腑瀹氫箟鐨勫嚱鏁幫紝鐢═琛ㄧず錛岃繖鏄渶甯歌鐨勶紱鍙﹀涓縐嶆槸鎵璋撶殑鈥滃急鎬佲濈鍙鳳紝瀹冧滑铏界劧鍦ㄥ簱涓瀹氫箟錛屼絾鏄彲鑳借鍏朵粬搴撲腑鐨勫悓鍚嶇鍙瘋鐩栵紝鐢╓琛ㄧず銆備緥濡傦紝鍋囪寮鍙戣呭笇鏈涚煡閬撲笂澶彁鍒扮殑hello搴撲腑鏄惁瀹氫箟浜?jiǎn)printf():
$nm libhello.so |grep printf
U printf
U琛ㄧず絎﹀彿printf琚紩鐢紝浣嗘槸騫舵病鏈夊湪鍑芥暟鍐呭畾涔夛紝鐢辨鍙互鎺ㄦ柇錛岃姝e父浣跨敤hello搴擄紝蹇呴』鏈夊叾瀹冨簱鏀寔錛屽啀浣跨敤ldd鍛戒護(hù)鏌ョ湅hello渚濊禆浜庡摢浜涘簱錛?
$ldd hello
libc.so.6=>/lib/libc.so.6(0x400la000)
/lib/ld-linux.so.2=>/lib/ld-linux.so.2 (0x40000000)
浠庝笂闈㈢殑緇撴灉鍙互緇х畫(huà)鏌ョ湅printf鏈緇堝湪鍝噷琚畾涔夛紝鏈夊叴瓚e彲浠o on
鐢熸垚搴?
絎竴姝ヨ鎶婃簮浠g爜緙栫粠鎴愮洰鏍囦唬鐮併備互涓嬮潰鐨勪唬鐮佷負(fù)渚嬶紝鐢熸垚涓婇潰鐢ㄥ埌鐨刪ello搴擄細(xì)
/* hello.c */
#include <stdio.h>
void sayhello()
{
printf("hello,world\n");
}
鐢╣cc緙栫粠璇ユ枃浠訛紝鍦ㄧ紪緇庢椂鍙互浣跨敤浠諱綍鍏ㄦ硶鐨勭紪緇庡弬鏁幫紝渚嬪-g鍔犲叆璋冭瘯浠g爜絳夛細(xì)
gcc -c hello.c -o hello.o
1.榪炴帴鎴愰潤(rùn)鎬佸簱
榪炴帴鎴愰潤(rùn)鎬佸簱浣跨敤ar鍛戒護(hù)錛屽叾瀹瀉r鏄痑rchive鐨勬剰鎬?
$ar cqs libhello.a hello.o
2.榪炴帴鎴愬姩鎬佸簱
鐢熸垚鍔ㄦ佸簱鐢╣cc鏉ュ畬鎴愶紝鐢變簬鍙兘瀛樺湪澶氫釜鐗堟湰錛屽洜姝ら氬父鎸囧畾鐗堟湰鍙鳳細(xì)
$gcc -shared -Wl,-soname,libhello.so.1 -o libhello.so.1.0 hello.o
鍙﹀鍐嶅緩绔嬩袱涓鍙瘋繛鎺ワ細(xì)
$ln -s libhello.so.1.0 libhello.so.1
$ln -s libhello.so.1 libhello.so
榪欐牱涓涓猯ibhello鐨勫姩鎬佽繛鎺ュ簱灝辯敓鎴愪簡(jiǎn)銆傛渶閲嶈鐨勬槸浼爂cc -shared 鍙傛暟浣垮叾鐢熸垚鏄姩鎬佸簱鑰屼笉鏄櫘閫氭墽琛岀▼搴忋?
-Wl 琛ㄧず鍚庨潰鐨勫弬鏁頒篃灝辨槸-soname,libhello.so.1鐩存帴浼犵粰榪炴帴鍣╨d榪涜澶勭悊銆傚疄闄呬笂錛屾瘡涓涓簱閮芥湁涓涓猻oname錛屽綋榪炴帴鍣ㄥ彂鐜板畠姝e湪鏌ユ壘鐨勭▼搴忓簱涓湁榪欐牱涓涓悕縐幫紝榪炴帴鍣ㄤ究浼?xì)灏唖oname宓屽叆榪炵粨涓殑浜岃繘鍒舵枃浠跺唴錛岃屼笉鏄畠姝e湪榪愯鐨勫疄闄呮枃浠跺悕錛屽湪紼嬪簭鎵ц鏈熼棿錛岀▼搴忎細(xì)鏌ユ壘鎷ユ湁soname鍚嶅瓧鐨勬枃浠訛紝鑰屼笉鏄簱鐨勬枃浠跺悕錛屾崲鍙ヨ瘽璇達(dá)紝soname鏄簱鐨勫尯鍒嗘爣蹇椼?
榪欐牱鍋氱殑鐩殑涓昏鏄厑璁哥郴緇熶腑澶氫釜鐗堟湰鐨勫簱鏂囦歡鍏卞瓨錛屼範(fàn)鎯笂鍦ㄥ懡鍚嶅簱鏂囦歡鐨勬椂鍊欓氬父涓巗oname鐩稿悓
libxxxx.so.major.minor
鍏朵腑錛寈xxx鏄簱鐨勫悕瀛楋紝major鏄富鐗堟湰鍙鳳紝minor 鏄鐗堟湰鍙?img src ="http://m.shnenglu.com/zjj2816/aggbug/10403.html" width = "1" height = "1" />
]]>
銆銆涓?6浣嶇浉姣旓紝32浣嶆剰鍛崇潃紼嬪簭鏇村揩銆佸彲鐩存帴瀵誨潃璁塊棶鏇村鐨勫唴瀛樺拰鏇村ソ鐨勫鐞嗗櫒鏋舵瀯銆傞壌浜庢錛岃秺鏉ヨ秺澶氱殑紼嬪簭鍛樺凡緇忓紑濮嬭冭檻鍒╃敤64浣嶅鐞嗗櫒鎵甯︽潵鐨勫法澶т紭鍔夸簡(jiǎn)銆?br />
銆銆鍏嬮浄鐮旂┒(Cray Research 搴斾負(fù)鍝佺墝鍚?璁$畻鏈哄凡緇忓紑濮嬩嬌鐢?4浣嶅瓧錛屽茍鍙闂洿澶х殑鍐呭瓨鍦板潃銆傜劧鑰岋紝浣滀負(fù)姝e湪鍚戝紑鍙戞爣鍑嗚蔣浠跺拰涓庡叾浠栨搷浣滅郴緇熺浉浜掑姫鍔涚殑涓閮ㄥ垎錛屾垜浠凡緇忓仠姝簡(jiǎn)縐繪閭d簺鍘熸湰鍩轟簬32浣嶅鐞嗗櫒鐨勪唬鐮併備簨瀹炰笂錛屾垜浠笉鏂亣鍒版垜浠О涔嬩負(fù)鈥?2浣嶄富涔夆濈殑浠g爜錛岃繖浜涗唬鐮侀兘鏄湪鍋囧畾鏈哄櫒瀛楅暱涓?2浣嶇殑鎯呭喌涓嬬紪鍐欑殑錛屽洜鑰屽緢闅劇Щ妞嶈繖縐嶄唬鐮侊紝鎵浠ュ繀欏葷‘绔嬩竴浜涚畝鍗曠殑鎸囧鏂歸拡錛屼互渚垮姪浜庣紪鍐欒法16銆?2銆?4浣嶅鐞嗗櫒騫沖彴鐨勪唬鐮併?br />
銆銆鐢變簬鏈変竴浜涢仐鐣欓棶棰橈紝C璇?/a>璦鍦ㄦ暟鎹被鍨嬪拰鏁版嵁鏋勯犳柟闈紝鏄懼緱鏈夌偣榪囧墿浜?jiǎn)銆傚彲浠ヤ嬌鐢ㄧ殑涓嶄粎浠呮槸char銆乻hort銆乮nt鍜宭ong綾誨瀷錛岃繕鏈夌浉搴旂殑unsigned錛堟棤絎﹀彿錛夌被鍨嬶紝褰撶劧浣犲彲鍦ㄧ粨鏋?structure)鍜岃仈鍚?union)涓販鍚堜嬌鐢紝鍙互鍦ㄨ仈鍚堜腑鍖呭惈緇撴瀯錛屽啀鍦ㄧ粨鏋勪腑鍖呭惈鑱斿悎錛屽鏋滆繕瀚屾暟鎹被鍨嬩笉澶熷鏉傦紝榪樺彲浠ヨ漿鎹㈡垚姣旂壒浣嶏紝褰撶劧涔熷彲浠ユ妸涓縐嶆暟鎹?a class="bluekey" target="_blank">綾誨瀷杞崲鎴愬彟涓縐嶄綘鎯寵鐨勬暟鎹被鍨嬨傛鏄洜涓鴻繖浜涘伐鍏峰お寮哄ぇ錛屽鏋滀笉瀹夊叏鍦頒嬌鐢ㄥ畠浠紝灝辨湁鍙兘浼?xì)浼ゅ埌鑷纷兒?jiǎn)銆?br />
銆銆楂樼駭浠g爜鐨勯珮綰х粨鏋?/b>
銆銆鍦↘ernighan鍜孭lauger緇忓吀鐨勩奣he Elements of Programming Style銆嬩竴涔︿腑錛屼粬浠殑寤鴻鏄滈夋嫨浣跨▼搴忕湅涓婂幓綆鍗曠殑鏁版嵁琛ㄧず娉曗濄傚涓漢鑰岃█錛岃繖鎰忓懗鐫涓洪珮綰х紪紼嬩嬌鐢ㄩ珮綰?a class="bluekey" target="_blank">鏁版嵁緇撴瀯錛岃屼綆綰х紪紼嬩嬌鐢ㄤ綆綰ф暟鎹粨鏋勩?br />
銆銆鍦ㄦ垜浠Щ妞嶇殑紼嬪簭涓紝鏈変竴涓父瑙佺殑32浣嶄富涔塨ug錛屼笉濡傛嬁瀹冩潵鍋氫釜渚嬪瓙錛岀鍐呭皵澶у緙栧啓鐨勭敤浜庣綉闂翠簰璁跨殑璺敱鍗忚寮曟搸錛屽湪浼厠鍒╃綉緇滅幆澧冧笅錛堟寚TCP/IP錛夛紝鑷劧鏄嬌鐢╥net_addr( )鏉ユ妸琛ㄧずInternet鍦板潃鐨?a class="bluekey" target="_blank">瀛楃涓?/a>杞崲鎴愪簩榪涘埗褰㈠紡銆侷nternet鍦板潃紕板閥涔熸槸32浣嶇殑錛屽氨濡傝繍琛屼集鍏嬪埄緗戠粶緋葷粺鐨勫叾浠栬綆楁満涓鏍鳳紝閮芥槸鏈夌潃鍚屾牱鐨勫瓧瀹姐?
銆銆浣嗕篃瀛樺湪鐫鏈夊叧Internet鍦板潃鐨勯珮綰у畾涔夛細(xì)in_ addr緇撴瀯銆傝繖涓粨鏋勫畾涔夊寘鎷簡(jiǎn)瀛愬煙s_ addr錛屽畠鏄竴涓寘鍚簡(jiǎn)Internet鍦板潃鐨剈nsigned long鏍囬噺銆俰net_addr()鎺ュ彈涓涓寚鍚戝瓧絎︾殑鎸囬拡錛屽茍涓旇繑鍥炰竴涓猽nsigned long錛屽湪杞崲鍦板潃瀛楃涓茶繃紼嬩腑濡傛灉鍙戠敓閿欒錛宨net_addr灝嗚繑鍥?1銆?br />
銆銆紼嬪簭Gated璇誨彇浠ユ枃鏈牸寮忓瓨鏀綢nternet鍦板潃鐨勯厤緗枃浠訛紝騫舵妸瀹冧滑鏀懼叆sockaddr_in錛堣繖鏄竴涓寘鍚簡(jiǎn)緇撴瀯in_addr鐨勯珮綰х粨鏋勶級(jí)銆備緥1(a)涓殑浠g爜鍙互鍦?2浣嶇數(shù)鑴戜笂姝e父榪愯錛屼絾縐繪鍒板厠闆風(fēng)爺絀惰綆楁満涓婏紝鍗存棤娉曡繍琛岋紝涓轟粈涔堝憿錛?br />
銆銆渚?錛氶珮綰т唬鐮佺殑楂樼駭緇撴瀯
銆銆(a)struct sockaddr_in saddrin
char *str;
if ((saddrin.sin_addr.s_addr = inet_addr(str)) == (unsigned long)-1) {
銆do_some_error_handling;
}
銆銆(b)struct sockaddr_in saddrin
char *str;
if (inet_aton(str, &saddrin.sin_addr) ! = OK) {
銆do_some_error_handling;
}
銆銆鍥犱負(fù)鍙inet_addr鑳藉姝g‘鍦拌В鏋愬瓧絎︿覆錛岄偅涔堜竴鍒嘜K銆傚綋inet_addr鍦?4浣嶈綆楁満涓婅繑鍥炰竴涓敊璇椂錛岃繖孌典唬鐮佸嵈鏈兘鎹曟崏鍒般備綘蹇呴』瑕佽冭檻姣旇緝璇彞涓殑鏁版嵁浣嶅錛屾潵紜畾鍒板簳鏄摢鍑轟簡(jiǎn)閿欍?br />
銆銆棣栧厛錛宨net_addr榪斿洖閿欒鍊尖斺攗nsigned long -1錛屽湪64浣嶄腑琛ㄧず涓烘瘮鐗逛綅鍏ㄤ負(fù)1錛岃繖涓艱瀛樺偍鍦ㄧ粨鏋刬n_addr涓嬬殑瀛愬煙s_addr涓紝鑰宨n_addr蹇呴』鏄?2浣嶆潵鍖歸厤Internet鍦板潃錛屾墍浠ュ畠鏄竴涓?2姣旂壒浣嶇殑unsigned int錛堝湪鎴戜滑鐨勭紪璇戝櫒涓婏紝int鏄?4浣嶏級(jí)銆傜幇鍦ㄦ垜浠瓨鍌ㄨ繘32涓?錛屽瓨鍌ㄨ繘鐨勫煎皢涓巙nsigned long -1姣旇緝銆傚綋鎴戜滑瀛樺偍32涓?浜巙nsigned int鏃訛紝緙栬瘧鍣ㄨ嚜鍔ㄦ妸32浣嶆彁鍗囦負(fù)64浣嶏紱榪欐牱錛屾暟鍊?x00000000 ffffffff涓?xffffffff ffffffff鐨勬瘮杈冨綋鐒跺氨澶辮觸浜?jiǎn)銆傝繖鏄竴涓緢闅懼彂鐜扮殑bug錛岀壒鍒槸鍦ㄨ繖縐嶅洜涓?2浣嶅埌64浣嶇殑闅愬紡鎻愬崌涓娿?br />
銆銆閭f垜浠榪欎釜bug鎬庝箞鍔炲憿錛熶竴涓В鍐蟲(chóng)柟娉曟槸鍦ㄨ鍙ヤ腑姣旇緝0xffffffff錛岃屼笉鏄?1錛屼絾榪欏張浼?xì)鋴射唬鐮佹洿鍔犱緷璧栦簬鐗瑰畾澶畯鐨勫璞°傚彟涓涓柟娉曟槸錛屼嬌鐢ㄤ竴涓腑闂寸殑unsigned long鍙橀噺錛屼粠鑰屽湪鎶婄粨鏋滃瓨鍏ockaddr_in鍓嶏紝鎵ц姣旇緝錛屼絾榪欎細(xì)璁╃▼搴忎唬鐮佹洿澶嶆潅銆?br />
銆銆鐪熸鐨勯棶棰樻墍鍦ㄦ槸錛屾垜浠湡鏈涗竴涓猽nsigned long鍊間笌涓涓?2浣嶉噺錛堝Internet鍦板潃錛夌浉絳夈侷nternet鍦板潃蹇呴』浠?2浣嶅艦寮忚繘琛屽瓨鍌紝浣嗘湁浜涙椂鍊欑敤涓涓爣閲忥紝鏉ヨ闂繖涓湴鍧鐨勪竴閮ㄥ垎錛屾槸闈炲父鏂逛究鐨勩傚湪32浣嶅瓧闀跨殑鐢?shù)鑴戜腑锛岀敤涓涓猯ong鏁板鹼紙甯歌褰撲綔32浣嶏級(jí)鏉ヨ闂繖涓湴鍧錛岀湅涓婂幓娌′粈涔堥棶棰樸傝鎴戜滑鏆傛椂涓嶆兂涓涓綆綰х殑鏁版嵁欏癸紙32浣岻nternet鍦板潃錛夋槸鍚︿笌涓涓満鍣ㄥ瓧鐩哥瓑錛岄偅涔堥珮綰ф暟鎹被鍨嬬粨鏋刬n_addr灝卞簲璇ヨ涓鐩翠嬌鐢ㄣ傚洜涓篿n_addr涓病鏈夋棤鏁堝鹼紝閭d箞搴旀湁涓涓崟鐙殑鐘舵佺敤浣滆繑鍥炲箋?br />
銆銆瑙e喅鏂規(guī)鏄畾涔変竴涓柊鐨勫嚱鏁幫紝灝卞儚inet_addr閭f牱錛屼絾榪斿洖涓涓姸鎬佸鹼紝鑰屼笖鎺ュ彈涓涓粨鏋刬n_addr浣滀負(fù)鍙傛暟錛屽弬瑙佷緥1(b)銆傚洜涓洪珮綰х殑鏁版嵁鍏冪礌鍙互涓鐩翠嬌鐢紝鑰岃繑鍥炵殑鍊兼槸娌℃湁婧㈠嚭鐨勶紝鎵浠ヨ繖涓唬鐮佹槸鍙互璺ㄦ灦鏋勭Щ妞嶇殑錛岃屼笉綆″瓧闀挎槸澶氬皯銆傝櫧鐒朵集鍏嬪埄鍙戝竷浜?jiǎn)NET2錛屽叾涓殑紜畾涔変簡(jiǎn)涓涓柊鐨勫嚱鏁癷net_aton()錛屼絾濡傛灉璇曠潃鏀瑰彉inet_addr()涓殑浠g爜錛屽皢浼?xì)鎹熷潖璁稿绋嬪簭銆?br />
銆銆浣庣駭浠g爜鐨勪綆綰х粨鏋?/b>
銆銆浣庣駭緙栫▼鎰忓懗鐫鐩存帴鎿嶇旱鐗╃悊璁懼鎴栬呯壒瀹氬崗璁殑閫氳鏍煎紡錛屼緥濡傦紝璁懼椹卞姩紼嬪簭緇忓父浣跨敤闈炲父綺劇‘鐨勪綅妯″紡鏉ユ搷綰墊帶鍒跺瘎瀛樺櫒銆傛澶栵紝緗戠粶鍗忚閫氳繃鐗瑰畾鐨勬瘮鐗逛綅妯″紡浼犺緭鏁版嵁欏規(guī)椂錛屼篃蹇呴』閫傚綋鍦拌漿璇戙?br />
銆銆涓轟簡(jiǎn)鎿嶇旱鐗╃悊鏁版嵁欏癸紝姝ゅ鐨勬暟鎹粨鏋勫繀欏誨噯紜湴鍙嶆槧琚搷綰電殑鍐呭銆傛瘮鐗逛綅鏄竴涓笉閿欑殑閫夋嫨錛屽洜涓哄畠浠濂芥寚瀹氫簡(jiǎn)姣旂壒鐨勪綅鏁板強(qiáng)鎺掑垪銆備簨瀹炰笂錛屾鏄繖縐嶇簿紜害錛屼嬌姣旂壒浣嶇浉瀵逛簬short銆乮nt銆乴ong錛屾洿濂藉湴鏄犲儚浜?jiǎn)鐗╃悊缁撴瀯锛坰hort銆乮nt銆乴ong浼?xì)鍥犱负鐢?shù)鑴戠殑涓嶅悓鑰屾敼鍙橈紝鑰屾瘮鐗逛綅涓嶄細(xì)錛夈?br />
銆銆褰撴槧鍍忎竴涓墿鐞嗙粨鏋勬椂錛屾槸閫氳繃瀹氫箟鏍煎紡鏉ヤ嬌姣旂壒浣嶈揪鍒拌繖縐嶇簿搴︾殑錛岃繖灝變嬌浣犲繀欏諱竴鐩翠嬌鐢ㄤ竴縐嶇紪鐮侀鏍兼潵璁塊棶緇撴瀯銆傛鏃剁殑姣忎釜浣嶅煙閮芥槸鍛藉悕鐨勶紝浣犲啓鍑虹殑浠g爜鍙洿鎺ヨ闂繖浜涗綅鍩熴傚綋璁塊棶鐗╃悊緇撴瀯鏃訛紝鏈変歡浜嬪彲鑳戒綘騫朵笉鎯沖幓鍋氾紝閭e氨鏄嬌鐢ㄦ爣閲忔暟緇?short銆乮nt銆乷r long)錛岃闂繖浜涙暟緇勭殑浠g爜閮藉亣瀹氬瓨鍦ㄤ竴涓壒瀹氱殑姣旂壒浣嶅錛屽綋縐繪榪欎簺浠g爜鍒頒竴鍙頒嬌鐢ㄤ笉鍚屽瓧瀹界殑鐢?shù)鑴戜笂鏃跺Q屽氨鍙兘涓嶆紜簡(jiǎn)銆?br />
銆銆鍦ㄦ垜浠Щ妞峆EX鍥懼儚搴撴椂閬囧埌鐨勪竴涓棶棰橈紝灝辨秹鍙?qiáng)鍒板叾鏄犲儚鐨勫崗璁秷鎭l撴瀯銆傚湪鏌愬彴鐢?shù)鑴戜笂锛屽鏋渋nt鏁村瀷鐨勯暱搴︿笌娑堟伅涓殑鍏冪礌涓鏍鳳紝閭d緥2(a)涓殑浠g爜灝變細(xì)宸ヤ綔寰楀緢姝e父銆?2浣嶇殑鏁版嵁鍏冪礌鍦?2瀛楅暱鐨勭數(shù)鑴戜笂娌℃湁闂錛屾嬁鍒?4浣嶇殑鍏嬮浄璁$畻鏈轟笂錛屽畠?yōu)鍑洪敊浜?jiǎn)銆傚渚?(b)鑰岃█錛屼笉鍗曡鏀瑰彉緇撴瀯瀹氫箟錛岃繕瑕佹敼鍙樻墍鏈夋秹鍙?qiáng)鍒癱oord鏁扮粍鐨勪唬鐮併傝繖鏍鳳紝鎽嗗湪鎴戜滑闈㈠墠灝辨湁涓や釜閫夋嫨錛岃涔堥噸鍐欐秹鍙?qiáng)姝ゆ秷鎭殑鎵鏈変唬鐮侊紝瑕佷箞瀹氫箟涓涓綆綰х殑緇撴瀯鍜屼竴涓珮綰х殑緇撴瀯錛岀劧鍚庣敤涓孌電壒孌婄殑浠g爜鎶婃暟鎹粠涓涓嫹璐濆埌鍙︿竴涓綋涓紝涓嶈繃鎴戜篃涓嶆湡鏈涘彲浠ユ壘鍑烘瘡涓zcoord = draw_ msg.coord[2]鐨勫紩鐢紝鑰屼笖錛屽綋鐜板湪闇瑕佺Щ妞嶅埌涓涓柊鏋舵瀯涓婃椂錛屾妸鎵鏈夌殑浠g爜閮芥敼鍐欐垚濡備緥2(c)鎵紺烘棤鐤戞槸涓欏硅壈鑻︾殑宸ヤ綔銆傝繖涓壒孌婄殑闂鏄敱浜庡拷瑙嗗瓧闀跨殑涓嶅悓鑰屽甫鏉ョ殑錛屾墍浠ヤ笉鑳藉亣璁懼湪鍙Щ妞嶇殑浠g爜涓満鍣ㄥ瓧闀褲乻hort銆乮nt銆乴ong閮芥槸鍏鋒湁鍚屾牱鐨勫ぇ灝忋?br />
銆銆渚?錛氫綆綰т唬鐮佺殑浣庣駭緇撴瀯
銆銆(a)struct draw_msg {
銆int objectid;
銆int coord[3];
}
銆銆(b)struct draw_msg {
銆int objectid:32;
銆int coord1:32;
銆int coord2:32;
銆int coord3:32;
}
銆銆(c)
緇撴瀯鎵撳寘鍜屽瓧瀵歸綈int *iptr, *optr, *limit;
int xyz[3];
iptr = draw_msg.coord;
limit = draw_msg.coord + sizeof(draw_msg.coord);
optr = xyz;
while (iptr < limit)
*optr++ = *iptr++;
銆銆 姝f槸鍥犱負(fù)緙栬瘧鍣ㄤ細(xì)瀵圭粨鏋勮繘琛屾墦鍖咃紝鎵浠ヤ笉鍚岃綆楁満涓婂瓧闀跨殑鍙樺寲錛岃繕瀵艱嚧浜?jiǎn)鍙︿竴涓棶棰樸侰緙栬瘧鍣ㄥ湪瀛?word)鐨勮竟鐣屼笂瀵歸綈瀛楅暱錛屽綋鍏鋒湁涓涓瓧闀跨殑鏁版嵁鍚庨潰绱ф帴鐫涓涓緝?yōu)畯鐨勬暟鎹椨灱寴q欑鏂規(guī)硶浼?xì)漶旂敓鍐呭瓨绌壕~猴紙涓嶈繃涔熸湁渚嬪錛屾瘮濡傝褰撴湁瓚沖澶氱殑灝忔暟鎹垰濂藉彲浠ュ~鍏呬竴涓瓧鏃訛級(jí)銆?br />
銆銆 涓浜涜仾鏄庣殑紼嬪簭鍛樺湪澹版槑鑱斿悎鏃訛紝寰(xiàn)寰(xiàn)鍦ㄥ叾涓細(xì)甯︽湁涓や釜鎴栨洿澶氱殑緇撴瀯錛屽叾涓竴涓粨鏋勫垰濂藉~鍏呰仈鍚堬紝鍙︿竴涓垯鍙互鐢ㄦ潵浠庝笉鍚岀殑瑙掑害鏉ョ湅寰呰繖涓仈鍚堬紝鍙傝渚?(a)銆傚亣璁捐繖孌典唬鐮佹槸涓?6浣嶅瓧闀跨殑璁$畻鏈烘墍鍐欙紝int涓?6浣嶏紝long涓?2浣嶏紝閭d箞瀛樺彇榪欎釜緇撴瀯鐨勪唬鐮佸皢浼?xì)寰楀埌姝e父鐨勬槧灏勫叧绯诲Q堝鍥?錛夛紝鑰屼緥3(b)涓殑浠g爜涔熶細(xì)鎸夐鏈熺殑閭f牱宸ヤ綔銆傚彲鏄紝濡傛灉榪欐浠g爜涓鏃︾Щ妞嶅埌鍙︿竴鍙板叿鏈?2浣嶅瓧闀跨殑璁$畻鏈轟笂鏃訛紝鏄犲皠鍏崇郴灝辨敼鍙樹(shù)簡(jiǎn)銆傚鏋滄柊璁$畻鏈轟笂鐨勭紪璇戝櫒鍏佽浣犱嬌鐢?6浣嶇殑int錛岄偅涔堝瓧鐨勫榻愬氨浼?xì)鍍忓?鎵紺轟簡(jiǎn)錛屾垨鑰呭鏋滅紪璇戝櫒閬靛驚K&R綰﹀畾錛岄偅涔坕nt灝嗕細(xì)鍜屼竴涓瓧錛?2姣旂壒錛変竴鏍烽暱錛屽榻愬氨濡傚浘3鎵紺猴紝鍦ㄤ換涓鎯呭喌涓嬶紝榪欓兘灝嗗鑷撮棶棰樸?br />
銆銆渚?錛氱粨鏋勬墦鍖呭拰瀛楀榻?br />
銆銆(a)union parse_hdr {
銆struct hdr {
銆銆char data1;
銆銆char data2;
銆銆int data3;
銆銆int data4;
} hdr;
struct tkn {
銆int class;
銆long tag;
} tkn;
} parse_item;
銆銆(b)char *ptr = msgbuf;
parse_item.hdr.data1 = *ptr++;
parse_item.hdr.data2 = *ptr++;
parse_item.hdr.data3 = (*ptr++ << 8 | *ptr++);
parse_item.hdr.data4 = (*ptr++ << 8 | *ptr++);
if (parse.tkn.class >= MIN_TOKEN_CLASS && parse.tkn.class <= MAX_TOKEN_CLASS) {
銆interpret_tag(parse.tkn.tag);
}
銆銆鍦ㄧ涓涓儏鍐典腑錛堝浘2錛夛紝tag鍩熶笉鏄儚鏈熸湜鐨勯偅鏍風(fēng)嚎鎬ф媺闀匡紝鑰岃濉厖浜?jiǎn)涓浜涘瀮鍦俱傝屽湪絎簩涓儏鍐典腑錛堝浘3錛夛紝鏃犺鏄痗lass榪樻槸tag鍩燂紝閮戒笉鍐嶆湁鎰忎箟錛屼袱涓猚har鍊煎洜涓鴻鎵撳寘鎴愪竴涓猧nt錛屾墍浠ヤ篃閮戒笉鍐嶆紜傚啀嬈″己璋冿紝棣栧厛涓嶈鍋囪鏍囧噯鏁版嵁綾誨瀷澶у皬涓鏍鳳紝鍏舵榪樿浜?jiǎn)瑙e畠浠槸鎬庢牱琚槧灝勬垚鍏朵粬鏁版嵁綾誨瀷鐨勶紝榪欐墠鏄功鍐欏彲縐繪浠g爜鐨勬渶濂芥柟娉曘?br />
銆銆鏈哄櫒瀵誨潃鐗規(guī)?/b>
銆銆鍑犱箮鎵鏈夌殑澶勭悊鍣ㄩ兘鍦ㄥ瓧杈圭晫涓婁互瀛椾負(fù)鍗曚綅榪涜瀵誨潃錛岃屼笖閫氬父閮戒負(fù)姝や綔浜?jiǎn)涓浜涗紭鍖栥傚彟鏈変竴浜涚殑澶勭悊鍣ㄥ厑璁稿叾浠栫被鍨嬬殑瀵誨潃錛屽浠ュ瓧鑺備負(fù)鍗曚綅瀵誨潃銆佹垨鍦ㄥ崐涓瓧杈圭晫涓婁互鍗婂瓧涓哄崟浣嶅鍧錛岀敋鑷寵繕鏈変竴浜涘鐞嗗櫒鏈夎緟鍔╃‖浠跺厑璁稿湪濂囨暟杈圭晫涓婂悓鏃朵互瀛楀拰鍗婂瓧榪涜瀵誨潃銆?br />
銆銆瀵誨潃鏈哄埗鍦ㄤ笉鍚岃綆楁満涓婁細(xì)鏈夋墍鍙樺寲錛屾渶蹇殑瀵誨潃妯″紡鏄湪瀛楄竟鐣屼笂浠ュ瓧涓哄崟浣嶈繘琛屽鍧銆傚叾浠栨柟寮忕殑瀵誨潃闇瑕佽緟鍔╃‖浠訛紝閫氬父閮戒細(xì)瀵瑰唴瀛樿闂鍔犱簡(jiǎn)涓浜涙椂閽熷懆鏈熴傝岃繖浜涜繃澶氱殑妯″紡鍜岀壒孌婄‖浠剁殑鏀寔錛屾槸涓嶳ISC澶勭悊鍣ㄧ殑璁捐鍒濊》鑳岄亾鑰岄┌鐨勶紝灝辨嬁鍏嬮浄璁$畻鏈烘潵璇達(dá)紝灝卞彧鏀寔鍦ㄥ瓧杈圭晫涓婁互瀛椾負(fù)鍗曚綅榪涜瀵誨潃銆?br />
銆銆鍦ㄩ偅浜涗笉鎻愪緵澶氱鏁版嵁綾誨瀷瀵誨潃鏂瑰紡鐨勮綆楁満涓婏紝緙栬瘧鍣ㄥ彲浠ユ彁渚涗竴浜涙ā鎷熴備緥濡傦細(xì)緙栬瘧鍣ㄥ彲浠ョ敓鎴愪竴浜涙寚浠わ紝褰撹鍙栦竴涓瓧鏃訛紝閫氳繃縐諱綅鍜屽睆钄斤紝鏉ユ壘鍒版墍鎯寵鐨勪綅緗紝浠ユ鏉ユā鎷熷湪瀛椾腑鐨勫崐瀛楀鍧錛屼絾榪欎細(xì)闇瑕侀澶栫殑鏃墮挓鍛ㄦ湡錛屽茍涓斾唬鐮佷綋縐細(xì)鏇村ぇ銆?br />
銆銆浠庤繖鐐逛笂鏉ヨ錛屼綅鍩熺殑鏁堢巼鏄潪甯鎬綆鐨勶紝鍦ㄤ互浣嶅煙鏉ュ彇鍑轟竴涓瓧鏃訛紝瀹冧滑浜х敓鐨勪唬鐮佷綋縐渶澶с傚綋浣犲瓨鍙栧悓涓涓瓧涓殑鍏朵粬浣嶅煙鏃訛紝鍙堥渶瑕佸鍖呭惈榪欎釜浣嶅煙瀛楃殑鍐呭瓨錛岄噸鏂拌繘琛屼竴閬嶅鍧錛岃繖灝辨槸鍏稿瀷鐨勪互絀洪棿鎹㈡椂闂淬?
銆銆褰撳湪璁捐鏁版嵁緇撴瀯鏃訛紝鎴戜滑鎬繪槸鎯崇敤鍙互淇濆瓨鏁版嵁鐨勬渶灝忔暟鎹被鍨嬶紝鏉ヨ揪鍒拌妭鐪佺┖闂寸殑鐩殑銆傛垜浠湁鏃跺皬姘斿緱緇忓父浣跨敤char鍜宻hort錛屾潵瀛樺彇浣嶇壒鍩燂紝榪欏氨鍍忔槸涓轟簡(jiǎn)鑺傜渷涓瑙掗挶錛岃岃姳浜?jiǎn)涓鍏冮挶銆傚偍瀛樼┖闂翠笂鐨勯珮鏁堬紝浼?xì)浠樺嚭鍦ńE嬪簭閫熷害鍜屼綋縐笂闅愯棌鐨勪唬浠楓?br />
銆銆璇曟兂浣犲彧涓轟竴涓揣鍑戠粨鏋勫垎閰嶄簡(jiǎn)涓灝忕偣鐨勭┖闂達(dá)紝浣嗗嵈浜х敓浜?jiǎn)澶ч噺鐨勪唬鐮佹潵瀛樺彇缁撴瀯涓殑鍩熷Q岃屼笖榪欐浠g爜榪樻槸緇忓父鎵ц鐨勶紝閭d箞錛屼細(xì)鍥犱負(fù)闈炲瓧瀵誨潃錛岃屽鑷翠唬鐮佽繍琛岀紦鎱紝鑰屼笖鍏呮枼浜?jiǎn)澶ч噺鐢ㄤ簬鎻愬彇鍩熺殑浠g爜锛尳E嬪簭浣撶Н涔熷洜姝ゅ澶с傝繖浜涢澶栦唬鐮佹墍鍗犵殑絀洪棿錛屼細(xì)璁╀綘鍓嶉潰涓鴻妭鐪佺┖闂存墍鍋氱殑鍔姏浠樹(shù)箣涓滄祦銆?br />
銆銆鍦ㄩ珮綰ф暟鎹粨鏋勪腑錛岀壒瀹氱殑姣旂壒瀹氫綅宸蹭笉鏄繀欏葷殑浜?jiǎn)锛屽簲鍦ㄦ墍鏈夌殑鍩熶腑閮戒嬌鐢ㄥ瓧(word)錛岃屼笉瑕佹搷蹇?jī)瀹冧滑鎵鍗犵敤鐨勭┖闂淬傜壒鍒槸鍦ㄧ▼搴忔煇浜涗緷璧栦簬鏈哄櫒鐨勯儴鍒嗭紝搴旇涓哄瓧鍑嗗涓涓猼ypedef錛屽涓嬶細(xì)/*鍦ㄨ繖鍙拌綆楁満涓婏紝int鏄竴涓瓧闀?/
typedef word int;
銆銆鍦ㄩ珮綰х粨鏋勪腑錛屽鎵鏈夊煙閮戒嬌鐢ㄥ瓧鏈夊涓嬪ソ澶勶細(xì)
銆銆a.. 瀵瑰叾浠栬綆楁満鏋舵瀯鐨勫彲縐繪鎬?
銆銆b.. 緙栬瘧鍣ㄥ彲鑳界敓鎴愭渶蹇殑浠g爜
銆銆c.. 澶勭悊鍣ㄥ彲鑳芥渶蹇湴璁塊棶鍒版墍闇鍐呭瓨
銆銆d.. 緇濆娌℃湁緇撴瀯瀵歸綈鐨勬剰澶栧彂鐢?br />
銆銆蹇呴』涔熸壙璁わ紝鍦ㄦ煇浜涙椂鍊欙紝鏄笉鑳藉仛鍒板叏閮ㄤ嬌鐢ㄥ瓧鐨勩備緥濡傦紝鏈変竴涓緢澶х殑緇撴瀯錛屼絾涓嶄細(xì)琚粡甯稿瓨鍙栵紝濡傛灉浣跨敤浜?jiǎn)鏁板崈涓瓧鐨勮瘽锛屼綋绉癁畣浼?xì)澧炲ぇ25%錛屼絾浣跨敤瀛楅氬父浼?xì)鑺傜渷绌洪棿銆佹彁楂樻墽琛岄熷害錛岃屼笖鏇村叿縐繪鎬с?br />
銆銆浠ヤ笅鏄垜浠殑緇撹錛?/b>
銆銆涔﹀啓璺ㄥ鉤鍙扮Щ妞嶇殑浠g爜錛屽叾瀹炴槸浠剁畝鍗曠殑浜嬫儏銆傛渶鍩烘湰鐨勮鍒欐槸錛屽敖鍙兘鍦伴殣钘忔満鍣ㄥ瓧闀跨殑緇嗚妭錛岀敤闈炲父綺劇‘鐨勬暟鎹厓绱犱綅澶у皬鏉ユ槧灝勭墿鐞嗘暟鎹粨鏋勩傛垨鑰呭儚鍓嶉潰鎵寤鴻鐨勶紝涓洪珮綰х紪紼嬩嬌鐢ㄩ珮綰ф暟鎹粨鏋勶紝鑰屼綆綰х紪紼嬩嬌鐢ㄤ綆綰ф暟鎹粨鏋勶紝褰撻槓鏄庨珮綰ф暟鎹粨鏋勬椂錛屽鏍囧噯C鐨勬爣閲忕被鍨嬶紝涓嶈浣滀換浣曞亣璁?img src ="http://m.shnenglu.com/zjj2816/aggbug/9539.html" width = "1" height = "1" />
]]>
銆銆鍦–璇█涓紝瀹忔槸浜х敓鍐呭祵浠g爜鐨勫敮涓鏂規(guī)硶銆傚浜庡祵鍏ュ紡緋葷粺鑰岃█錛屼負(fù)浜?jiǎn)鑳借緫謭版ц兘瑕佹眰錛屽畯鏄竴縐嶅緢濂界殑浠f浛鍑芥暟鐨勬柟娉曘?br />
銆銆鍐欎竴涓?鏍囧噯"瀹廙IN 錛岃繖涓畯杈撳叆涓や釜鍙傛暟騫惰繑鍥炶緝?yōu)畯鐨勪竴涓細(xì)
銆銆閿欒鍋氭硶錛?br />#define MIN(A,B) 銆( A <= B ? A : B )
銆銆姝g‘鍋氭硶錛?br />#define MIN(A,B) 錛堬紙A錛?lt;= (B) ? (A) : (B) )
銆銆瀵逛簬瀹忥紝鎴戜滑闇瑕佺煡閬撲笁鐐癸細(xì)
銆銆(1)瀹忓畾涔?鍍?鍑芥暟錛?br />
銆銆(2)瀹忓畾涔変笉鏄嚱鏁幫紝鍥犺岄渶瑕佹嫭涓婃墍鏈?鍙傛暟"錛?br />
銆銆(3)瀹忓畾涔夊彲鑳戒駭鐢熷壇浣滅敤銆?br />
銆銆涓嬮潰鐨勪唬鐮侊細(xì)least = MIN(*p++, b);
銆銆灝嗚鏇挎崲涓猴細(xì)( (*p++) <= (b) ?(*p++):(b) )
銆銆鍙戠敓鐨勪簨鎯呮棤娉曢鏂欍?
銆銆鍥犺屼笉瑕佺粰瀹忓畾涔変紶鍏ユ湁鍓綔鐢ㄧ殑"鍙傛暟"銆?br />
銆銆浣跨敤瀵勫瓨鍣ㄥ彉閲?/b>
銆銆褰撳涓涓彉閲忛綣佽璇誨啓鏃訛紝闇瑕佸弽澶嶈闂唴瀛橈紝浠庤岃姳璐瑰ぇ閲忕殑瀛樺彇鏃墮棿銆備負(fù)姝わ紝C璇█鎻愪緵浜?jiǎn)涓縐嶅彉閲忥紝鍗沖瘎瀛樺櫒鍙橀噺銆傝繖縐嶅彉閲忓瓨鏀懼湪CPU鐨勫瘎瀛樺櫒涓紝浣跨敤鏃訛紝涓嶉渶瑕佽闂唴瀛橈紝鑰岀洿鎺ヤ粠瀵勫瓨鍣ㄤ腑璇誨啓錛屼粠鑰屾彁楂樻晥鐜囥傚瘎瀛樺櫒鍙橀噺鐨勮鏄庣鏄痳egister銆傚浜庡驚鐜鏁拌緝澶氱殑寰幆鎺у埗鍙橀噺鍙?qiáng)弩@鐜綋鍐呭弽澶嶄嬌鐢ㄧ殑鍙橀噺鍧囧彲瀹氫箟涓哄瘎瀛樺櫒鍙橀噺錛岃屽驚鐜鏁版槸搴旂敤瀵勫瓨鍣ㄥ彉閲忕殑鏈濂藉欓夎呫?br />
銆銆(1) 鍙湁灞閮ㄨ嚜鍔ㄥ彉閲忓拰褰㈠弬鎵嶅彲浠ュ畾涔変負(fù)瀵勫瓨鍣ㄥ彉閲忋傚洜涓哄瘎瀛樺櫒鍙橀噺灞炰簬鍔ㄦ佸瓨鍌ㄦ柟寮忥紝鍑¢渶瑕侀噰鐢ㄩ潤(rùn)鎬佸瓨鍌ㄦ柟寮忕殑閲忛兘涓嶈兘瀹氫箟涓哄瘎瀛樺櫒鍙橀噺錛屽寘鎷細(xì)妯″潡闂村叏灞鍙橀噺銆佹ā鍧楀唴鍏ㄥ眬鍙橀噺銆佸眬閮╯tatic鍙橀噺錛?br />
銆銆(2) register鏄竴涓?寤鴻"鍨嬪叧閿瓧錛屾剰鎸囩▼搴忓緩璁鍙橀噺鏀懼湪瀵勫瓨鍣ㄤ腑錛屼絾鏈緇堣鍙橀噺鍙兘鍥犱負(fù)鏉′歡涓嶆弧瓚沖茍鏈垚涓哄瘎瀛樺櫒鍙橀噺錛岃屾槸琚斁鍦ㄤ簡(jiǎn)瀛樺偍鍣ㄤ腑錛屼絾緙栬瘧鍣ㄤ腑騫朵笉鎶ラ敊錛堝湪C++璇█涓湁鍙︿竴涓?寤鴻"鍨嬪叧閿瓧錛歩nline錛夈?br />
銆銆涓嬮潰鏄竴涓噰鐢ㄥ瘎瀛樺櫒鍙橀噺鐨勪緥瀛愶細(xì)/* 姹?+2+3+鈥?+n鐨勫?*/
WORD Addition(BYTE n)
{
銆register i,s=0;
銆for(i=1;i<=n;i++)
銆{
銆銆s=s+i;
銆}
銆return s;
}
銆銆鏈▼搴忓驚鐜痭嬈★紝i鍜宻閮借棰戠箒浣跨敤錛屽洜姝ゅ彲瀹氫箟涓哄瘎瀛樺櫒鍙橀噺銆?br />
銆銆鍐呭祵姹囩紪
銆銆紼嬪簭涓鏃墮棿瑕佹眰鑻涘埢鐨勯儴鍒嗗彲浠ョ敤鍐呭祵姹囩紪鏉ラ噸鍐欙紝浠ュ甫鏉ラ熷害涓婄殑鏄捐憲鎻愰珮銆備絾鏄紝寮鍙戝拰嫻嬭瘯姹囩紪浠g爜鏄竴浠惰緵鑻︾殑宸ヤ綔錛屽畠?yōu)畣鑺辫匆?guī)洿闀跨殑鏃墮棿錛屽洜鑰岃鎱庨噸閫夋嫨瑕佺敤姹囩紪鐨勯儴鍒嗐?br />
銆銆鍦ㄧ▼搴忎腑錛屽瓨鍦ㄤ竴涓?0-20鍘熷垯錛屽嵆20%鐨勭▼搴忔秷鑰椾簡(jiǎn)80%鐨勮繍琛屾椂闂達(dá)紝鍥犺屾垜浠鏀硅繘鏁堢巼錛屾渶涓昏鏄冭檻鏀硅繘閭?0%鐨勪唬鐮併?br />
銆銆宓屽叆寮廋紼嬪簭涓富瑕佷嬌鐢ㄥ湪綰挎眹緙栵紝鍗沖湪C紼嬪簭涓洿鎺ユ彃鍏asm{ }鍐呭祵姹囩紪璇彞錛?br />/* 鎶婁袱涓緭鍏ュ弬鏁扮殑鍊肩浉鍔狅紝緇撴灉瀛樻斁鍒板彟澶栦竴涓叏灞鍙橀噺涓?*/
int result;
void Add(long a, long *b)
{
銆_asm
銆{
銆銆MOV AX, a
銆銆MOV BX, b
銆銆ADD AX, [BX]
銆銆MOV result, AX
銆}
}
銆銆鍒╃敤紜歡鐗規(guī)?/b>
銆銆棣栧厛瑕佹槑鐧紺PU瀵瑰悇縐嶅瓨鍌ㄥ櫒鐨勮闂熷害錛屽熀鏈笂鏄細(xì)
CPU鍐呴儴RAM銆>銆澶栭儴鍚屾RAM銆>銆澶栭儴寮傛RAM銆>銆FLASH/ROM
銆銆瀵逛簬紼嬪簭浠g爜錛屽凡緇忚鐑у綍鍦‵LASH鎴朢OM涓紝鎴戜滑鍙互璁〤PU鐩存帴浠庡叾涓鍙栦唬鐮佹墽琛岋紝浣嗛氬父榪欎笉鏄竴涓ソ鍔炴硶錛屾垜浠渶濂藉湪緋葷粺鍚姩鍚庡皢FLASH鎴朢OM涓殑鐩爣浠g爜鎷瘋礉鍏AM涓悗鍐嶆墽琛屼互鎻愰珮鍙栨寚浠ら熷害錛?br />
銆銆瀵逛簬UART絳夎澶囷紝鍏跺唴閮ㄦ湁涓瀹氬閲忕殑鎺ユ敹BUFFER錛屾垜浠簲灝介噺鍦˙UFFER琚崰婊″悗鍐嶅悜CPU鎻愬嚭涓柇銆備緥濡傝綆楁満緇堢鍦ㄥ悜鐩爣鏈洪氳繃RS-232浼犻掓暟鎹椂錛屼笉瀹滆緗甎ART鍙帴鏀跺埌涓涓狟YTE灝卞悜CPU鎻愪腑鏂紝浠庤屾棤璋撴氮璐逛腑鏂鐞嗘椂闂達(dá)紱
銆銆濡傛灉瀵規(guī)煇璁懼鑳介噰鍙朌MA鏂瑰紡璇誨彇錛屽氨閲囩敤DMA璇誨彇錛孌MA璇誨彇鏂瑰紡鍦ㄨ鍙栫洰鏍囦腑鍖呭惈鐨勫瓨鍌ㄤ俊鎭緝澶ф椂鏁堢巼杈冮珮錛屽叾鏁版嵁浼犺緭鐨勫熀鏈崟浣嶆槸鍧楋紝鑰屾墍浼犺緭鐨勬暟鎹槸浠庤澶囩洿鎺ラ佸叆鍐呭瓨鐨勶紙鎴栬呯浉鍙嶏級(jí)銆侱MA鏂瑰紡杈冧箣涓柇椹卞姩鏂瑰紡錛屽噺灝戜簡(jiǎn)CPU 瀵瑰璁劇殑騫查錛岃繘涓姝ユ彁楂樹(shù)簡(jiǎn)CPU涓庡璁劇殑騫惰鎿嶄綔紼嬪害銆?br />
銆銆媧葷敤浣嶆搷浣?/b>
銆銆浣跨敤C璇█鐨勪綅鎿嶄綔鍙互鍑忓皯闄ゆ硶鍜屽彇妯$殑榪愮畻銆傚湪璁$畻鏈虹▼搴忎腑鏁版嵁鐨勪綅鏄彲浠ユ搷浣滅殑鏈灝忔暟鎹崟浣嶏紝鐞嗚涓婂彲浠ョ敤"浣嶈繍綆?鏉ュ畬鎴愭墍鏈夌殑榪愮畻鍜屾搷浣滐紝鍥犺岋紝鐏墊椿鐨勪綅鎿嶄綔鍙互鏈夋晥鍦版彁楂樼▼搴忚繍琛岀殑鏁堢巼銆備婦渚嬪涓嬶細(xì) /* 鏂規(guī)硶1 */
int i,j;
i = 879 / 16;
j = 562 % 32;
/* 鏂規(guī)硶2 */
int i,j;
i = 879 >> 4;
j = 562 - (562 >> 5 << 5);
銆銆瀵逛簬浠?鐨勬寚鏁版鏂逛負(fù)"*"銆?/"鎴?%"鍥犲瓙鐨勬暟瀛﹁繍綆楋紝杞寲涓虹Щ浣嶈繍綆?<< >>"閫氬父鍙互鎻愰珮綆楁硶鏁堢巼銆傚洜涓轟箻闄よ繍綆楁寚浠ゅ懆鏈熼氬父姣旂Щ浣嶈繍綆楀ぇ銆?br />
銆銆C璇█浣嶈繍綆楅櫎浜?jiǎn)鍙互鎻愰珮杩惤帡鏁堢巼澶栧Q屽湪宓屽叆寮忕郴緇熺殑緙栫▼涓紝瀹冪殑鍙︿竴涓渶鍏稿瀷鐨勫簲鐢紝鑰屼笖鍗佸垎騫挎硾鍦版鍦ㄨ浣跨敤鐫鐨勬槸浣嶉棿鐨勪笌錛?amp;錛夈佹垨錛坾錛夈侀潪錛垀錛夋搷浣滐紝榪欒窡宓屽叆寮忕郴緇熺殑緙栫▼鐗圭偣鏈夊緢澶у叧緋匯傛垜浠氬父瑕佸紜歡瀵勫瓨鍣ㄨ繘琛屼綅璁劇疆錛岃濡傦紝鎴戜滑閫氳繃灝咥M186ER鍨?0186澶勭悊鍣ㄧ殑涓柇灞忚斀鎺у埗瀵勫瓨鍣ㄧ殑絎綆6浣嶈緗負(fù)0錛堝紑涓柇2錛夛紝鏈閫氱敤鐨勫仛娉曟槸錛?br />#define INT_I2_MASK 0x0040
wTemp = inword(INT_MASK);
outword(INT_MASK, wTemp &~INT_I2_MASK);
銆銆鑰屽皢璇ヤ綅璁劇疆涓?鐨勫仛娉曟槸錛?br />#define INT_I2_MASK 0x0040
wTemp = inword(INT_MASK);
outword(INT_MASK, wTemp | INT_I2_MASK);
銆銆鍒ゆ柇璇ヤ綅鏄惁涓?鐨勫仛娉曟槸錛?br />#define INT_I2_MASK 0x0040
wTemp = inword(INT_MASK);
if(wTemp & INT_I2_MASK)
{
鈥?/* 璇ヤ綅涓? */
}
銆銆涓婅堪鏂規(guī)硶鍦ㄥ祵鍏ュ紡緋葷粺鐨勭紪紼嬩腑鏄潪甯稿父瑙佺殑錛屾垜浠渶瑕佺墷鍥烘帉鎻°?
銆銆鎬葷粨
銆銆鍦ㄦц兘浼樺寲鏂歸潰姘歌繙娉ㄦ剰80-20鍑嗗錛屼笉瑕佷紭鍖栫▼搴忎腑寮閿涓嶅ぇ鐨勯偅80%錛岃繖鏄姵鑰屾棤鍔熺殑銆?br />
銆銆瀹忓畾涔夋槸C璇█涓疄鐜扮被浼煎嚱鏁板姛鑳借屽張涓嶅叿鍑芥暟璋冪敤鍜岃繑鍥炲紑閿鐨勮緝濂芥柟娉曪紝浣嗗畯鍦ㄦ湰璐ㄤ笂涓嶆槸鍑芥暟錛屽洜鑰岃闃叉瀹忓睍寮鍚庡嚭鐜頒笉鍙鏂欑殑緇撴灉錛屽瀹忕殑瀹氫箟鍜屼嬌鐢ㄨ鎱庤屽涔嬨傚緢閬楁喚錛屾爣鍑咰鑷充粖娌℃湁鍖呮嫭C++涓璱nline鍑芥暟鐨勫姛鑳斤紝inline鍑芥暟鍏煎叿鏃犺皟鐢ㄥ紑閿鍜屽畨鍏ㄧ殑浼樼偣銆?br />
銆銆浣跨敤瀵勫瓨鍣ㄥ彉閲忋佸唴宓屾眹緙栧拰媧葷敤浣嶆搷浣滀篃鏄彁楂樼▼搴忔晥鐜囩殑鏈夋晥鏂規(guī)硶銆?br />
銆銆闄や簡(jiǎn)緙栫▼涓婄殑鎶宸у錛屼負(fù)鎻愰珮緋葷粺鐨勮繍琛屾晥鐜囷紝鎴戜滑閫氬父涔熼渶瑕佹渶澶у彲鑳藉湴鍒╃敤鍚勭紜歡璁懼鑷韓鐨勭壒鐐規(guī)潵鍑忓皬鍏惰繍杞紑閿錛屼緥濡傚噺灝忎腑鏂鏁般佸埄鐢―MA浼犺緭鏂瑰紡絳夈?
]]>
5.鍔ㄦ佸唴瀛樺垎閰?br />6.鍑芥暟鎸囬拡錛屽洖璋冩満鍒訛紝浜嬩歡鏈哄埗錛屾秷鎭満鍒?/p>
]]>
涓銆?闈㈠悜瀵硅薄鎬濇兂鐨勭洰鐨勬槸妗嗘灦鍖栵紝鎵嬫鏄娊璞?br />
鐩鎬俊寰堝浜洪兘鏄庣櫧闈㈠悜瀵硅薄璁蹭簡(jiǎn)浠涔堬細(xì)綾伙紝鎶借薄綾伙紝緇ф壙錛屽鎬併備絾鏄槸浠涔堝師鍥犱績(jī)浣胯繖浜涙蹇電殑浜х敓鍛紵
鎵撲釜姣旀柟璇達(dá)細(xì)浣犲幓涔版樉紺哄櫒錛岀劧鑰屾樉紺哄櫒鐨勫搧鐗屾牱寮忔槸澶氱澶氭牱鐨勶紝浣犲湪涔扮殑榪囩▼涓彂鐢熺殑浜嬫儏涔熸槸涓嶅彲棰勬祴鐨勩傚浜庤繖鏍風(fēng)殑浜嬫儏錛屾垜浠湪紼嬪簭璇█涓浣曞幓鎻忚堪鍛€傞潰鍚戝璞$殑鎬濇兂灝辨槸涓轟簡(jiǎn)瑙e喅榪欐牱鐨勯棶棰樸傜紪鍐欎竴涓▼搴忥紙鐢氳嚦璇存槸涓涓伐紼嬶級(jí)錛屼粠鏃犲埌鐢ㄦ槸鍥伴毦鐨勶紝浠庢湁鍒頒赴瀵屾槸鏇村姞鍥伴毦鐨勩傞潰鍚戝璞″皢紼嬪簭鐨勫悇涓涓哄寲涓哄璞★紝鑰屽張鐢ㄦ娊璞$殑鍔炴硶灝嗚繖浜涘璞″綊綾伙紙鎶借薄錛夛紝浠庤屽皢閿欑患澶嶆潅鐨勪簨鎯呯畝鍖栦負(fù)鍑犱釜涓昏鐨勬湁鏈虹粍鍚堬紙妗嗘灦鍖栵級(jí)銆?br />
鍏跺疄鎴戜滑鐨勮韓杈瑰緢澶氫笢瑗塊兘鏄繖鏍風(fēng)粍鎴愮殑錛氭瘮濡傝鐢?shù)鑴戝Q氱數(shù)鑴戞槸鐢變富鏉匡紝CPU鍔犱笂鍚勭鍗$粍鎴愮殑銆傝繖灝辨槸涓涓鏋跺寲銆傝屽拷鐣ヤ笉鍚岀殑CPU錛屼笉鍚岀殑涓繪澘錛屼笉鍚岀殑澹板崱錛岀綉鍗★紝鏄懼崱鐨勫尯鍒紝榪欏氨鏄娊璞°傚啀姣斿璇寸幇鍦ㄧ殑鏁欒偛緗戯細(xì)鏄敱涓繪牳蹇?jī)鑺傜偣锛?xì)娓呭崕錛屽寳澶э紝鍖楅偖絳夊嚑涓紝鐒跺悗鏄悇涓瓙鑺傜偣錛屼緷嬈$粍鎴愪簡(jiǎn)鏁翠釜鏁欒偛緗戠綉緇溿?br />
鎵浠ユ垜瑙夊緱闈㈠悜瀵硅薄鐨勭紪紼嬫濇兂灝辨槸錛氫竴涓ぇ鍨嬪伐紼嬫槸鍒嗗眰嬈$粨鏋勭殑錛屾瘡灞傚張鐢辨娊璞$殑緇撴瀯榪炴帴涓烘暣浣擄紙妗嗘灦鍖栵級(jí)錛屽悇涓娊璞$粨鏋勪箣闂存槸褰兼鐙珛鐨勶紝鍙互鐙珛榪涘寲錛堢戶(hù)鎵匡紝澶氭侊級(jí)銆傚眰嬈′箣闂達(dá)紝緇撴瀯涔嬮棿鍚勬湁緇熶竴鐨勯氳鏂瑰紡錛堥氬父鏄秷鎭紝浜嬩歡鏈哄埗錛夈?br />
浜屻?浠ュ墠 C 璇█緙栫▼涓父鐢ㄧ殑鈥滈潰鍚戝璞♀濇柟娉?br />
鍏跺疄C璇█璇炵敓浠ユ潵錛屼漢浠氨鎯充簡(jiǎn)寰堝鍔炴硶鏉ヤ綋鐜扳滈潰鍚戝璞♀濈殑鎬濇兂銆備笅闈㈠氨鏉ヨ璇存垜鎵鐭ラ亾鐨勬柟娉曘傚厛璇翠竴浜涘ぇ瀹剁啛鎮(zhèn)夌殑涓滀笢錛屾參鎱㈠啀璁茶寮傜殑銆傚懙鍛?br />
1錛?瀹忓畾涔夛細(xì)
鏈夌殑浜轟笉紱佽闂紝瀹忓畾涔夋庝箞鎵埌榪欓噷鏉ヤ簡(jiǎn)錛屾垜浠彲浠ュ厛鐪嬩竴涓畝鍗曠殑渚嬪瓙錛?br />
錛僤efine MacroFunction Afunction
鐒跺悗鍦ㄧ▼搴忛噷闈綘璋冪敤浜?jiǎn)澶ч噺鐨凙Function錛屼絾鏄湁涓澶╋紝浣犵獊鐒跺彂鐜頒綘瑕佺敤BFunction浜?jiǎn)锛屽Q堜笉榪嘇Function鍙堜笉鑳戒笉瑕侊紝寰堟湁鍙兘浣犱互鍚庤繕瑕佽皟鐢級(jí)錛岃繖涓椂鍊欙紝浣犲氨鍙互錛僤efine MacroFunction Bfunction鏉ヨ揪鍒拌繖鏍風(fēng)殑鐩殑銆?br />
褰撶劧錛屼笉寰椾笉璇磋繖鏍風(fēng)殑鍔炴硶鏄痶oo simple錛宻ometime na茂ve鐨勶紝鍥犱負(fù)涓涓緢婊戠ń鐨勯棶棰樻槸濡傛灉鎴戜竴鑸鏀逛負(fù)BFunction錛屼竴鍗婁笉鍙樻庝箞鍔烇紵 閭e氨鍙ソ鏌ユ壘鏇挎崲浜?jiǎn)銆?br />
2錛?闈?rùn)鎬佺殑鍏ュ彛鍑芥暟錛屼繚璇佸嚱鏁板悕鐩稿悓錛屽埄鐢ㄦ爣蹇椾綅璋冪敤瀛愬嚱鏁幫細(xì)
榪欐牱鐨勫吀鍨嬪簲鐢ㄥ緢澶氾紝姣斿璇寸綉鍗¢┍鍔ㄩ噷闈㈡湁涓涓叆鍙e嚱鏁癗ilan錛坕nt FunctionCode錛孭ara*錛夈傚叿浣撶殑鍙傛暟鏄粈涔堣涓嶆竻妤氫簡(jiǎn)銆備笉榪嘚iLan鐨勪富浣撴槸榪欐牱鐨勶細(xì)
Long Nilan錛坕nt FunctionCode錛孭ara*錛墈
Switch(FunctionCode){
Case SendPacket: send(鈥?)
Case ReceivePacket: receive(鈥?
鈥?.
}
鍐欏埌榪欓噷澶у鏄庣櫧浠涔堟剰鎬濅簡(jiǎn)鍚с備繚璇佺浉鍚岀殑鍑芥暟鍚嶅氨鏄錛氱綉鍗¢┍鍔ㄦ槸鍜宲NA+鍗忚鏍堜簰榪炵殑錛岄偅涔堝浣曚繚璇乸NA+鍗忚鏍堝拰涓嶅悓鐨勯┍鍔ㄩ兘鍏煎鍛紝涓涓畝鍗曠殑鍔炴硶灝辨槸浠呬粎浣跨敤涓涓叆鍙e嚱鏁般傞氳繃鏀瑰彉濡傛灉鍑芥暟鐨勫弬鏁板鹼紝鏉ヨ皟鐢ㄥ唴閮ㄧ殑鍚勪釜鍑芥暟銆傝繖鏍風(fēng)殑鍋氭硶鏄彲浠ヨ繘鍖栫殑錛氬鏋滀互鍚庢兂璋冪敤鏂扮殑鍑芥暟錛屽鍔犵浉搴旂殑鍑芥暟鍙傛暟鍊煎氨濂戒簡(jiǎn)銆傚鏋滄垜浠皢緗戝崱椹卞姩鍜宲NA+鍗忚鏍堢湅浣滀袱涓眰鐨勮瘽錛屾垜浠彲浠ュ彂鐜幫細(xì)
灞備笌灞備箣闂寸殑浜掕繛鎺ュ彛鏄緢灝忕殑錛堣繖閲屾槸涓涓叆鍙e嚱鏁幫級(jí)錛屼竴鑸槸閲囩敤鍚嶅瓧瑙f瀽鐨勫姙娉曡屼笉鏄叿浣撶殑鍑芥暟璋冪敤錛堝埄鐢‵unctionCode璋冪敤鍑芥暟錛孨ilan浠呬粎瀹炵幇鍚嶅瓧瑙f瀽鐨勫姛鑳斤級(jí) 鈥曗曪紒鎺ュ彛闄愬埗鍜屽悕瀛楄В鏋?br />
鎺ュ彛闄愬埗錛氬眰涓庡眰涔嬮棿浠呬粎鐭ラ亾鏈夐檺鐨勫嚱鏁?br />
鍚嶅瓧瑙f瀽錛氬眰涓庡眰涔嬮棿寤虹珛鍏卞悓鐨勫悕瀛椾笌鍑芥暟鐨勫搴斿叧緋伙紝涔嬮棿鍒╃敤鍚嶅瓧璋冪敤鍔熻兘銆?br />
3錛嶤ALLBACK鍑芥暟銆?br />
鎴戣寰楄繖鏄疌璇█鐨勪竴涓垱涓撅紝铏界劧瀹冨緢綆鍗曪紝灝辮薄濡備綍鎶婇浮铔嬬珫璧鋒潵涓鏍鳳紝浣嗘槸浣犲鏋滄病鎯沖埌鐨勮瘽錛屽樋鍢褲傚鏋滆闈?rùn)鎬佸叆鍙e嚱鏁板疄鐜頒簡(jiǎn)涓涓彲綆$悊鐨勫畯瑙傜殑璇濓紝CallBack灝辨槸瀹炵幇浜?jiǎn)涓涓彲榪涘寲鐨勫井瑙傦細(xì)瀹冧嬌寰椾竴涓嚱鏁板彲浠ュ湪涓嶉噸鏂扮紪璇戠殑鎯呭喌涓嬪疄鐜板姛鑳界殑娣誨姞錛佷絾鏄湪鏈鏈鏃╂湡鐨勬椂鍊欙紝涔熸湁铔浜烘寔鍙嶅鎬佸害錛屽洜涓哄畠鐢ㄤ簡(jiǎn)鍑芥暟鎸囬拡銆傚嚱鏁版寚閽堣櫧鐒剁伒媧伙紝浣嗘槸鐢變簬瀹冭璁塊棶鍐呭瓨?shù)袱娆℃墠鍙互璋冪敤鍒板嚱鏁板Q岀涓嬈¤闂嚱鏁版寚閽堬紝絎簩嬈℃墠鏄湡姝g殑鍑芥暟璋冪敤銆傚畠鐨勬晥鐜囨槸涓嶅鏅氬嚱鏁扮殑銆備絾鏄湪涓涓笉澶嫑鍒葷殑鐜涓嬶紝鍑芥暟璋冪敤鏈韓灝變笉鎬庝箞鑰楁椂錛屽嚱鏁版寚閽堢殑鎬ц兘鍙堜笉鏄壒鍒碂緋曪紝浣跨敤鍑芥暟鎸囬拡鍏跺疄鏄竴涓渶濂界殑閫夋嫨銆備絾鏄嚱鏁版寚閽堥櫎浜?jiǎn)鎬ц兘錛屾渶楹葷儲(chǔ)鐨勫湴鏂瑰氨鏄細(xì)瀵艱嚧紼嬪簭鐨勨滄敮紱葷牬紕庘濄傝瘯鎯籌細(xì)鍦ㄧ▼搴忎腑錛屼綘璇誨埌涓涓嚱鏁版寚閽堢殑鏃跺欙紝濡傛灉浣犳劊鏄笉鐭ラ亾榪欎釜鍑芥暟鎸囬拡鎸囧悜鐨勬槸鍝釜鍑芥暟錛岄偅涓劅瑙夌湡鐨勫緢緋熺硶銆傦紙鍙互鐪嬪悗闈㈢殑鏂囩珷錛岃浣跨敤鍏堣繘鐨勭▼搴忔鏋訛紝閬垮厤榪欐牱鐨勬儏鍐碉級(jí)
涓夈?Event 鍜?Message
鐪嬩簡(jiǎn)涓婇潰鐨勬弿榪幫紝鐩鎬俊澶у澶氬皯鏈変簺鏄庣櫧涓轟粈涔堣浣跨敤Event鍜孧essage浜?jiǎn)銆傚叿浣撶殑鍑芥暟璋冪敤浼?xì)甯︽潵寰堝鐨勯棶棰樺Q堣櫧鐒朵粠鏁堢巼涓婅錛岃繖鏍峰仛鏄緢濂界殑錛夈備負(fù)浜?jiǎn)鎻愰珮绋嬪簭鐨勭亯|椿鎬э紝Event鍜孧essage鐨勫姙娉曚駭鐢熶簡(jiǎn)銆傜敤鍚嶅瓧瑙f瀽鐨勫姙娉曚唬鏇塊氬父鐨勫嚱鏁拌皟鐢紝榪欐牱錛屽鏋滃弻鏂瑰榪欐牱鐨勮В鏋愭槸涓鑷寸殑璇濓紝灝卞彲浠ヨ揪鍒頒竴涓粺涓銆備笉榪嘐vent鍜孧essage鐨勪綔鐢ㄨ繕?shù)笉浠呬粎鏄姝ゃ?br />
Event鍜孧essage榪樻湁寤虹珛榪涚▼闂撮氫俊鐨勫姛鑳姐傝繘紼嬪皢鑷繁鐨勬秷鎭彂緇欌滄帶鍒朵腑蹇?jī)鈥濓紙綆鍗曠殑灝辨槸涓涓秷鎭槦鍒楋紝鍜屼竴涓獁hile寰幆涓嶆柇鐨勫彇娑堟伅闃熷垪鐨勫唴瀹瑰茍鎵ц錛夛紝鎺у埗紼嬪簭寰楀埌娑堟伅錛屽垎鍙戠粰鐩稿簲鐨勮繘紼嬶紝榪欐牱鍏朵粬榪涚▼灝卞彲浠ュ緱鍒拌繖涓秷鎭茍榪涜鍝嶅簲銆?br />
Event鍜孧essage鏄緢鐏墊椿鐨勶紝鍥犱負(fù)浣犲彲浠ラ殢鏃舵坊鍔犳垨鑰呭叧闂竴涓繘紼嬶紝錛堜粎浠呴渶瑕佹坊鍔犲垎鍙戞秷鎭殑鍒楄〃灝卞彲浠ヤ簡(jiǎn)錛塃vent鍜孧essage 浠庣▼搴忓疄鐜頒笂灝嗘垜瑙夊緱鏄竴鏍風(fēng)殑錛屽彧涓嶈繃姒傚康涓嶅悓銆侲vent澶氱敤浜庢寚涓涓姩浣滐紝姣斿紜歡鍙戠敓浜?jiǎn)浠涔堜簨鎯咃紝闇瑕佽皟鐢ㄤ竴涓粈涔堝嚱鏁扮瓑絳夈侻essage澶氱敤浜庢寚涓涓寚紺猴紝姣斿浠涔堢▼搴忓彂鐢熶簡(jiǎn)浠涔堟搷浣滃懡浠ょ瓑絳夈?br />
鍥涖?灝忕粨
鍏跺疄緙栫▼搴忓拰鍐欐枃绔犱竴鏍鳳紝閮芥槸鍏堟湁涓涓彁綰詫紝鐒跺悗鎱㈡參鐨勪赴瀵屻傚厛鎶借薄鍖栧緱鍒扮▼搴忕殑楠ㄦ灦錛岀劧鍚庡啀鑰冭檻鍚勪釜鏂歸潰鐨勫叾浠栧唴瀹癸細(xì)紼嬪簭鏋佺鐨勬椂鍊欎細(xì)鍙戠敓浠涔堥棶棰橈紵紼嬪簭鐨勮繖涓湴鏂圭殑鍔熻兘鐜板湪榪樹(shù)笉瀹屽杽錛屼互鍚庡啀瀹屽杽浼?xì)鏈変粈涔堥棶棰橈紵紼嬪簭鏄笉鏄彲浠ユ墿灞曠殑錛?br />
浜屻佺被妯℃嫙鐨勬ц兘鍒嗘瀽
聽(tīng) 綾繪ā鎷熶腑浣跨敤浜?jiǎn)澶ч噺鐨勫嚱鏁版寚閽堝Q岀粨鏋勪綋絳夌瓑錛屾湁蹇呴』瀵規(guī)榪涜鎬ц兘鍒嗘瀽錛屼互渚胯瀵熻繖鏍風(fēng)殑緇撴瀯瀵圭▼搴忕殑鏁翠綋鎬ц兘鏈変粈涔堢▼搴︾殑褰卞搷銆?br />
銆銆1錛庡嚱鏁拌皟鐢ㄧ殑寮閿
#define COUNTER XX
void testfunc()
{
聽(tīng) int i,k=0;
聽(tīng) for(i=0;i<YY;i++)
}
銆銆鍦ㄦ祴璇曠▼搴忛噷闈紝鎴戜滑浣跨敤鐨勬槸涓涓祴璇曞嚱鏁幫紝鍑芥暟浣撳唴閮ㄥ彲浠ラ氳繃鏀瑰彉YY鐨勫兼潵鏀瑰彉鍑芥暟鐨勮楁椂銆傛祴璇曞姣旀槸 寰幆璋冪敤XX嬈″嚱鏁幫紝鍜屽驚鐜疿X嬈″嚱鏁板唴閮ㄧ殑YY寰幆銆?br />
銆銆緇撴灉鍙戠幇錛屽湪YY瓚沖灝忥紝X瓚沖澶х殑鎯呭喌涓嬶紝鍑芥暟璋冪敤鑰楁椂鎴愪負(fù)浜?jiǎn)涓昏鍘熷洜銆傛墍浠ュ綋涓涓滅畝鍗曗濆姛鑳介渶瑕佲滃弽澶嶁濊皟鐢ㄧ殑鏃跺欙紝灝嗗畠緙栧啓涓哄嚱鏁板皢浼?xì)瀵规ц兘鏈夊獎(jiǎng)鍝嶃傝繖涓椂鍊欏彲浠ヤ嬌鐢ㄥ畯錛屾垨鑰卛nline鍏抽敭瀛椼?br />
銆銆浣嗘槸錛屽疄闄呬笂鎴戣緗甔X錛?0000000錛?鍗冧竾錛夌殑鏃跺欙紝鎵嶅嚭鐜癿s綰у埆鐨勮楁椂錛屽浜庨潪瀹炴椂鎿嶄綔錛圲I絳夌瓑錛夛紝鍗充嬌鏄緢鎱㈢殑cpu錛堝祵鍏ュ紡10M綰у埆鐨勶級(jí)錛屼篃鍙細(xì)鍦╔X錛?0涓囩殑鏃跺欏嚭鐜扮煭鏆傜殑鍑芥暟璋冪敤鑰楁椂錛屾墍浠ュ疄闄呬笂榪欎釜鏄彲浠ュ拷鐣ョ殑銆?br />
銆銆2錛庢櫘閫氬嚱鏁拌皟鐢ㄥ拰鍑芥暟鎸囬拡璋冪敤鐨勫紑閿
void (*tf)();
tf=testfunc;
銆銆嫻嬭瘯紼嬪簭淇敼涓轟竴涓嬌鐢ㄥ嚱鏁拌皟鐢紝涓涓嬌鐢ㄥ嚱鏁版寚閽堣皟鐢ㄣ傛祴璇曞彂鐜板鏃墮棿鍩烘湰娌℃湁浠涔堝獎(jiǎng)鍝嶃傦紙鍦ㄧ涓嬈$紪鍐欑殑鏃跺欙紝鍙戠幇鍦ㄥ嚱鏁拌皟鐢ㄥ嚭鐜拌楁椂鐨勬儏鍐典笅錛圶X錛?浜匡級(jí)錛屽嚱鏁版寚閽堢殑璋冪敤瑕佹參錛坮elease鐗堟湰錛夛紝璋冪敤鑰楁椂350錛?00銆傚悗鏉ユ墠鍙戠幇榪欎釜褰卞搷鏄敱浜庡皢鍙橀噺鐢寵涓哄叏灞鐨勫師鍥狅紝鍏ㄥ眬鍙橀噺鐨勮闂姣斿眬閮ㄥ彉閲忔參寰堝錛夈?br />
銆銆3錛庡嚱鏁版寚閽堝拰鎸囬拡緇撴瀯璁塊棶鐨勫紑閿
struct a {
聽(tīng) void (*tf)();
}
銆銆嫻嬭瘯紼嬪簭淇敼涓轟嬌鐢ㄧ粨鏋勭殑鍑芥暟鎸囬拡錛屾祴璇曞彂鐜板鏃墮棿鍩烘湰娌℃湁浠涔堝獎(jiǎng)鍝嶃傚叾瀹炰嬌鐢ㄧ粨鏋勫茍涓嶄細(xì)浜х敓褰卞搷錛屽洜涓虹粨鏋勭殑璁塊棶鏄浐瀹氬亸縐婚噺鐨勩傛墍浠ョ粨鏋勫彉閲忕殑璁塊棶鍜屾櫘閫氬彉閲忕殑璁塊棶瀵逛簬鏈哄櫒鐮佹潵璇存槸涓鏍風(fēng)殑銆?br />
銆銆嫻嬭瘯緇撹錛氫嬌鐢ㄧ被妯℃嫙鐨勫姙娉曞鎬ц兘涓嶄細(xì)浜х敓澶ぇ鐨勫獎(jiǎng)鍝嶃?br />
涓夈丆璇█鐨勫鎬佸疄鐜?br />
銆銆鐩鎬俊寰堝浜洪兘鐪嬭繃璁捐妯″紡鏂歸潰鐨勪功錛屽ぇ瀹舵湁浠涔堜綋浼?xì)鍛㈠Q烞ridge錛孭roxy錛孎actory榪欎簺璁捐妯″紡閮芥槸鍩轟簬鎶借薄綾葷殑銆備嬌鐢ㄦ娊璞″璞℃槸榪欓噷鐨勪竴涓牳蹇?jī)銆?br />聽(tīng) 聽(tīng)
銆銆鍏跺疄鎴戣寰楁鏋跺寲緙栫▼鐨勪竴涓牳蹇?jī)闂鏄娊璞″Q岀敤鎶借薄鐨勫璞℃瀯寤虹▼搴忕殑涓諱綋妗嗘灦錛岃繖鏄潰鍚戝璞$紪紼嬬殑鏅亶鎬濇兂銆傜敤鎶借薄鏋勫緩楠ㄦ灦錛屽啀鍔犱笂澶氭佸氨褰㈡垚浜?jiǎn)涓涓畬鏁寸殑紼嬪簭銆傜敱浜嶤錛嬶紜璇█鏈韓瀹炵幇浜?jiǎn)鐟?hù)鎵垮拰澶氭侊紝浣跨敤榪欐牱鐨勭紪紼嬬悊蹇碉紙鐞嗗康鍟ユ剰鎬濓紵璺熶釜椋庯紝鍢垮樋錛夊湪C錛嬶紜涓槸鍗佸垎鏅亶鐨勭幇璞★紝鍙互璇碫irtual錛堝鎬侊級(jí)鏄疺C鐨勭伒欖傘?br />
銆銆浣嗘槸錛屼嬌鐢–璇█鐨勬垜浠兘蹇妸榪欎釜澶氭佸繕鍏夊厜浜?jiǎn)銆傛垜甯稿惉瑙佸墠杈堣錛岀被錛熷鎬侊紵鎴戜滑鐢ㄧ殑鏄疌錛屾妸榪欎簺蹇樹(shù)簡(jiǎn)鍚с傚緢涓嶅垢鐨勬槸錛屾垜鏄竴涓浐鎵х殑浜恒傝繖涔堝ソ鐨勪笢瑗匡紝涓哄暐涓嶇敤鍛€傚緢楂樺叴鐨勶紝鍦ㄦ渶榪戠殑涓浜涚函C浠g爜涓紝鎴戠湅瑙佷簡(jiǎn)C涓殑澶氭侊紒涓嬮潰涓斿惉鎴戞參鎱㈤亾鏉ャ?br />
銆銆1. VC涓殑Interface鏄粈涔?br />
銆銆Interface錛氫腑鏂囪В閲婃槸鎺ュ彛錛屽叾瀹炲畠琛ㄧず鐨勬槸涓涓函铏氱被銆備笉榪囨垜鎵瑕佽鐨勬槸錛屽湪VC涓殑Interface鍏跺疄灝辨槸struct錛屾煡鎵綢nterface鐨勫畾涔夛紝浣犲彲浠ュ彂鐜版湁榪欐牱鐨勫畯瀹氫箟錛?br />
聽(tīng) 聽(tīng) #Ifndef Interface
聽(tīng) 聽(tīng) #define Interface struct
聽(tīng) 聽(tīng) #endif
銆銆鑰屼笖錛屽疄闄呬笂鍦╒C涓紝濡傛灉涓涓被鏈塚irtual鐨勫嚱鏁幫紝鍒欑被閲岄潰浼?xì)鏈塿table錛屽畠瀹為檯涓婃槸涓涓櫄鍑芥暟鍒楄〃銆傚疄闄呬笂C錛嬶紜鏄粠C鍙戝睍鑰屾潵鐨勶紝瀹冧笉榪囨槸鍦ㄨ璦綰у埆涓婃敮鎸佷簡(jiǎn)寰堝鏂板姛鑳斤紝鍦–璇█涓紝鎴戜滑涔熷彲浠ヤ嬌鐢ㄨ繖鏍風(fēng)殑鍔熻兘錛屽墠鎻愭槸鎴戜滑涓嶅緱涓嶈嚜宸卞疄鐜般?br />
銆銆2錛嶤涓浣曞疄鐜扮函铏氱被錛堟垜縐板畠涓虹函铏氱粨鏋勶級(jí)
銆銆姣旇緝鍓嶉潰錛岀浉淇″ぇ瀹跺凡緇忚眮鐒跺紑鏈椾簡(jiǎn)銆備嬌鐢╯truct緇勫悎鍑芥暟鎸囬拡灝卞彲浠ュ疄鐜扮函铏氱被銆?br />
銆銆渚嬪瓙錛?br />
聽(tīng) typedef struct {
聽(tīng) 聽(tīng) void (*Foo1)();
聽(tīng) 聽(tīng) char (*Foo2)();
聽(tīng) 聽(tīng) char* (*Foo3)(char* st);
聽(tīng) }
聽(tīng) MyVirtualInterface;
聽(tīng) 聽(tīng)
銆銆榪欐牱鍋囪鎴戜滑鍦ㄤ富浣撴鏋朵腑瑕佷嬌鐢ㄦˉ妯″紡銆傦紙鎴戜滑鐨勪富綾繪槸DoMyAct錛屾帴鍙e叿浣撳疄鐜扮被鏄疉ct1錛孉ct2錛変笅闈㈡垜灝嗕緷嬈′粙緇嶈繖浜涒滅被鈥濄傦紙C涓殑鈥滅被鈥濆湪鍓嶉潰鏈夎鏄庯紝榪欓噷鎹簡(jiǎn)涓涓紝鏄嬌鐢ㄦ棭鏈熺殑鏁扮粍鐨勫姙娉曪級(jí)
銆銆涓葷被DoMyAct錛?涓葷被涓惈鏈塎yVirtualInterface* m_pInterface; 涓葷被鏈変笅鍑芥暟錛?br />
聽(tīng) DoMyAct_SetInterface(MyVirtualInterface* pInterface)
聽(tīng) {
聽(tīng) 聽(tīng) m_pInterface= pInterface;
聽(tīng) }
聽(tīng) DoMyAct_Do()
聽(tīng) {
聽(tīng) 聽(tīng) if(m_pInterface==NULL) return;
聽(tīng) 聽(tīng) m_pInterface->Foo1();
聽(tīng) 聽(tīng) c=m_pInterface->Foo2();
聽(tīng) }
銆銆瀛愮被Act1錛氬疄鐜拌櫄緇撴瀯錛屽惈鏈塎yVirtualInterface st[MAX]; 鏈変互涓嬪嚱鏁幫細(xì)
聽(tīng) MyVirtualInterface* Act1_CreatInterface()
聽(tīng) {
聽(tīng) 聽(tīng) index=FindValid() //瀵硅薄姹犳垨鑰呬嬌鐢∕alloc 錛佸簲璇ョ暀鍦ㄥ闈㈢敵璇鳳紝瀹炰緥鍖?br />聽(tīng) 聽(tīng) if(index==-1) return NULL;
聽(tīng) 聽(tīng) St[index].Foo1=Act1_Foo1; // Act1_Foo1瑕佸湪涓嬮潰鍏蜂綋瀹炵幇
聽(tīng) 聽(tīng) St[index].Foo2=Act1_Foo2;
聽(tīng) 聽(tīng) St[index].Foo3=Act1_Foo3;
聽(tīng) 聽(tīng) Return &st [index];
聽(tīng) }
銆銆瀛愮被Act2鍚屼笂銆?br />
銆銆鍦╩ain涓紝鍋囪鏈変竴涓璞ist銆侺ist涓瓨璐殑鏄疢yVirtualInterface鎸囬拡錛屽垯鏈夛細(xì)
聽(tīng) if( (p= Act1_CreatInterface()) != NULL)
聽(tīng) List_AddObject(&List, p); //Add Al
聽(tīng) While(p=List_GetObject()){
聽(tīng) 聽(tīng) DoMyAct_SetInterface(p);//浣跨敤Interface浠f浛浜?jiǎn)鍘熸潵澶Ы媷骞呯殑Switch Case
聽(tīng) 聽(tīng) DoMyAct_Do();//涓嶈鐞嗕細(xì)鍏蜂綋鐨勪粈涔堟牱鐨勫姩浣滐紝just do it
聽(tīng) }
聽(tīng) FREE ALL
鍥涖佺被妯℃嫙鍜屽鎬?緇ф壙
銆銆鍦ㄩ潰鍚戝璞$殑璇█閲岄潰錛屽嚭鐜頒簡(jiǎn)綾葷殑姒傚康銆傝繖鏄紪紼嬫濇兂鐨勪竴縐嶈繘鍖栥傛墍璋撶被錛氭槸瀵圭壒瀹氭暟鎹殑鐗瑰畾鎿嶄綔鐨勯泦鍚堜綋銆傛墍浠ヨ綾誨寘鍚簡(jiǎn)涓や釜鑼冪暣錛氭暟鎹拰鎿嶄綔銆傝孋璇█涓殑struct浠呬粎鏄暟鎹殑闆嗗悎銆傦紙liyuming1978@163.com)
銆銆1錛庡疄渚嬶細(xì)涓嬮潰鍏堜粠涓涓皬渚嬪瓙鐪嬭搗
#ifndef C_Class
聽(tīng) 聽(tīng) #define C_Class struct
#endif
C_Class A {
聽(tīng) 聽(tīng) C_Class A *A_this;
聽(tīng) 聽(tīng) void (*Foo)(C_Class A *A_this);
聽(tīng) 聽(tīng) int a;
聽(tīng) 聽(tīng) int b;
};
C_Class B{ 聽(tīng) 聽(tīng) 聽(tīng) 聽(tīng) 聽(tīng) //B緇ф壙浜?jiǎn)A
聽(tīng) 聽(tīng) C_Class B *B_this; //欏哄簭寰堥噸瑕?br />聽(tīng) 聽(tīng) void (*Foo)(C_Class B *Bthis); 聽(tīng) 聽(tīng) 聽(tīng) 聽(tīng) //铏氬嚱鏁?br />聽(tīng) 聽(tīng) int a;
聽(tīng) 聽(tīng) int b;
聽(tīng) 聽(tīng) int c;
};
void B_F2(C_Class B *Bthis)
{
聽(tīng) 聽(tīng) printf("It is B_Fun\n");
}
void A_Foo(C_Class A *Athis)
{
聽(tīng) 聽(tīng) printf("It is A.a=%d\n",Athis->a);//鎴栬呰繖閲?br />// 聽(tīng) exit(1);
// 聽(tīng) printf("綰櫄 涓嶅厑璁告墽琛孿n");//鎴栬呰繖閲?br />}
void B_Foo(C_Class B *Bthis)
{
聽(tīng) 聽(tīng) printf("It is B.c=%d\n",Bthis->c);
}
void A_Creat(struct A* p)
{
聽(tīng) 聽(tīng) p->Foo=A_Foo;
聽(tīng) 聽(tīng) p->a=1;
聽(tīng) 聽(tīng) p->b=2;
聽(tīng) 聽(tīng) p->A_this=p;
}
void B_Creat(struct B* p)
{
聽(tīng) 聽(tīng) p->Foo=B_Foo;
聽(tīng) 聽(tīng) p->a=11;
聽(tīng) 聽(tīng) p->b=12; 聽(tīng) 聽(tīng)
聽(tīng) 聽(tīng) p->c=13;
聽(tīng) 聽(tīng) p->B_this=p;
}
int main(int argc, char* argv[])
{
聽(tīng) 聽(tīng) C_Class A *ma,a;
聽(tīng) 聽(tīng) C_Class B *mb,b;
聽(tīng) 聽(tīng) A_Creat(&a);//瀹炰緥鍖?br />聽(tīng) 聽(tīng) B_Creat(&b);
聽(tīng) 聽(tīng) mb=&b;
聽(tīng) 聽(tīng) ma=&a;
聽(tīng) 聽(tīng) ma=(C_Class A*)mb;//寮曞叆澶氭佹寚閽?br />聽(tīng) 聽(tīng) printf("%d\n",ma->a);//鍙儨鐨勫氨鏄?鍑芥暟鍙橀噺娌℃湁private
聽(tīng) 聽(tīng) ma->Foo(ma);//澶氭?br />聽(tīng) 聽(tīng) a.Foo(&a);//涓嶆槸澶氭佷簡(jiǎn)
聽(tīng) 聽(tīng) B_F2(&b);//鎴愬憳鍑芥暟錛屽洜涓烘晥鐜囬棶棰樹(shù)笉浣跨敤鍑芥暟鎸囬拡
聽(tīng) 聽(tīng) return 0;
}
銆銆杈撳嚭緇撴灉錛?br />
11
It is B.c=13
It is A.a=1
It is B_Fun</P< p>
]]>