锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
contextSwitch(PContext pOldContext, PContext pNewContext)
{
if(saveContext(pOldContext))
{
//
// Restore new context only on a nonzero exit from saveContext().
//
restoreContext(pNewContext);
// This line is never executed!
}
// Instead, the restored task continues to execute at this point.
}
渚嬬▼ contextSwitch()瀹為檯涓婃槸琚皟搴︾▼搴忓噵鐢紝鑰岃皟搴︾▼搴忓張鍦ㄩ偅姝ょ粓姝腑鏂殑tb緋葷粺璋冪敤涓璋冪敤錛屽洜姝ゅ畠涓嶄竴瀹氬湪榪欓噷緇堟涓柇銆傛澶栵紝鐢變簬璋冪敤璋冨害紼嬪簭鐨勬搷浣滅郴緇熻皟鐢ㄦ槸鐢ㄩ珮綰ц璦鍐欑殑錛屾墍浠ュぇ閮ㄥ垎榪愯浠誨姟鐨勫瘎瀛樺櫒宸茬粡琚繚瀛樺埌瀹冭嚜宸卞綋鍦扮殑鏍堜腑浜嗐傝繖鍑忓皯浜嗕緥紼媠aveContext()鍜宺estoreContext()闇瑕佸仛鐨勫伐浣溿傚畠浠彧闇瑕佸叧蹇冩寚浠ゆ寚閽堬紝鏍堟寚閽堜互鍙婃爣蹇椾綅鐨勪繚瀛樸備緥紼?contextSwitch()鐨勫疄闄呰涓烘槸寰堥毦浠呬粎閫氳繃鐪嬪墠闈㈢殑浠g爜鏉ョ悊瑙g殑銆傚ぇ閮ㄥ垎鐨勮蔣浠跺紑鍙戣呬互榪炵畫鐨勬柟寮忔濊冮棶棰橈紝璁や負姣忎竴琛屼唬鐮佷細绱ф帴鐫涓婁竴鏉′唬鐮佺牬鎵ц銆傜劧鑰岋紝榪欎釜浠g爜瀹為檯涓哄茍琛屽湴鎵ц浜嗕袱嬈°傚綋涓涓換鍔★紙鏂頒換鍔★級杞彉鍒拌繍琛岀姸鎬侊紝鍙︿竴涓紙鏃т換鍔★級蹇呴』鍚屾椂榪斿洖鍒板氨緇姸鎬併傛兂涓涓嬫柊浠誨姟褰撳畠鍦╮estoreContext()浠g爜涓鎭㈠鐨勬椂鍊欏氨浼氭槑鐧姐傛棤璁烘柊浠誨姟浠ュ墠鍋氫粈涔堬紝瀹冨湪saveContext 浠g爜閲屾繪槸閱掔潃鐨?#8212;—鍥犱負榪欏氨鏄畠鐨勬寚浠ゅ瓨鏀劇殑鍦版柟銆傛柊浠誨姟濡備綍鐭ラ亾瀹冩槸鍚︽槸絎竴嬈★紙涔熷氨鏄紝鍦ㄥ噯澶囦紤鐪犵殑榪囩▼錛夋垨鑰呮槸絎簩嬈★紙閱掓潵鐨勮繃紼嬶級浠巗aveContext()涓嚭鏉ョ殑鍛紵瀹冪‘瀹為渶瑕佺煡閬撹繖涓樊鍒紝鍥犳鎴戜笉寰椾笉鐢ㄤ竴縐嶆湁鐐歸殣钄界殑鏂規硶鏉ュ疄鐜皊aveContext()銆備緥紼媠aveContext()涓嶆槸淇濆瓨浜嗗噯紜殑鐩墠鐨勬寚浠ゆ寚閽堛傚疄闄呬笂鏄繚瀛樹簡涓浜涙寚浠ゅ墠闈㈢殑鍦板潃銆傞偅鏍鳳紝褰撲繚瀛樼殑璁懼鍦烘櫙鎭㈠鐨勬椂鍊欙紝紼嬪簭浠巗aveContext 涓彟涓涓笅鍚岀殑鐐圭戶緇傝繖涔熶嬌寰梥aveContext 鍙兘榪斿洖涓嶅悓鐨勫鹼細褰撲換鍔¤浼戠湢鐨勬椂鍊欎負闈為浂錛屽綋浠誨姟鍞よ搗鐨勬椂鍊欎負闆躲備緥紼媍ontextSwitch()鍒╃敤榪欎釜榪斿洖鐨勫兼潵鍐沖畾鏄惁璋冪敤restoreContext()銆傚鏋滀笉榪涜榪欎釜媯嫻嬶紝閭d箞涓庤繖涓柊浠誨姟鐩稿叧鐨勪唬鐮佹案榪滀笉浼氭墽琛屻?/p>
鎴戠煡閬撹繖鍙兘鏄竴涓鏉傜殑浜嬩歡搴忓垪錛屽洜姝ゆ垜鍦ㄥ浘8-3 涓鏄庝簡鏁翠釜鐨勮繃紼嬨?/p>
鍧﹁█涔嬶紝涓涓搷浣滅郴緇熷茍涓嶆槸宓屽叆寮忔垨鍏跺畠璁$畻鏈虹郴緇熺殑蹇呴渶鐨勭粍浠訛紝瀹冩墍鑳藉仛鐨勶紝涔熸槸鍍忔椂鐢ㄧ▼搴忚瀹炵幇鐨勫姛鑳戒竴鏍楓傛湰涔︿腑鐨勬墍鏈変緥瀛愰兘璇存槑浜嗚繖涓鐐廣傚簲鐢ㄧ▼搴忔墽琛岃搗鏉ワ紝閮芥槸浠巑ain 寮濮嬶紝鐒跺悗榪涘叆緋葷粺璋冪敤銆佽繍琛屻佺粨鏉熴傝繖涓庣郴緇熶腑鍙湁涓涓換鍔℃槸涓鏍風殑銆傚浜庡簲鐢ㄧ▼搴忔潵璇達紝浠呬粎鏄疄鐜頒嬌LED 榪涜闂儊錛岃繖灝辨槸鎿嶄綔緋葷粺鐨勪富瑕佸姛鐢紙灞忚斀浜嗗緢澶氬鏉傜殑鎿嶄綔錛夈?/p>
濡傛灉浣犱互鍓嶆病浣滆繃瀵規搷浣滅郴緇熺殑鐮旂┒錛岄偅涔堬紝鍦ㄨ繖閲屽緱鎻愰啋涓涓嬶紝鎿嶄綔緋葷粺鏄潪甯稿鏉傜殑銆?a style="color: #000000" >tb鎿嶄綔緋葷粺鐨勫巶鍟嗚偗瀹氭槸鎯充嬌浣犵浉淇★紝浠栦滑鏄敮涓鑳界敓浜у嚭鍔熻兘寮哄ぇ鍙堟槗鐢ㄧ殑鎿嶄綔緋葷粺鐨勭瀛﹀銆備絾鏄紝鎴戜篃瑕佸憡璇変綘錛氳繖騫朵笉鏄牴鍥伴毦鐨勩傚疄闄呬笂宓屽叆寮忔搷浣滅郴緇熻姣旀闈㈡搷浣滅郴緇熸洿瀹規槗緙栧啓錛屾墍闇鐨勬ā鍧楀拰鍔熻兘鏇翠負灝忓閥銆佹洿鏄撲簬瀹炵幇銆備竴鏃︽槑紜簡瑕佸疄鐜頒簡鍔熻兘錛屽茍鏈変竴瀹氱殑瀹炵幇鎶鑳斤紝浣犲皢浼氬彂鐜幫紝寮鍙戜竴涓搷浣滅郴緇熷茍涓嶆瘮寮鍙戝祵鍏ュ紡杞歡鑹伴毦澶氬皯銆?/p>
宓屽叆寮忔搷浣滅郴緇熷緢灝忥紝鍥犱負瀹冨彲浠ョ己灝戝緢澶氭闈㈡搷浣滅郴緇熺殑鍔熻兘銆備緥濡傦紝宓屽叆寮忔搷浠緋葷粺寰堝皯鏈夌‖鐩樻垨鍥懼艦鐣岄潰錛屽洜姝わ紝宓屽叆寮忔搷浣滅郴緇熷彲浠ヤ笅闇瑕佹枃浠剁郴緇熷拰鍥懼艦鐢ㄦ埛鎺ュ彛銆傝屼笖錛屼竴鑸潵璇達紝鏄崟鐢ㄦ埛緋葷粺錛屾墍浠ュ鐢ㄦ埛鎿嶄綔緋葷粺鐨勫畨鍏ㄧ壒鎬т篃鍙互鐪佸幓浜嗐備笂闈㈡墍璇寸殑鍚勭鎬ц兘錛岄兘鍙互浣滀負宓屽叆寮忔搷浣滅郴緇熺殑涓閮ㄥ垎錛屼絾涓嶆槸蹇呴』鐨勩?/p>
鎴戜滑灝嗚璁ㄨ鐨勮繖涓簲鐢ㄧ▼搴忎笉姣斿叾浠栧ぇ閮ㄥ垎tb緙栫▼涔︾睄涓壘鍒扮殑“Hello錛學orld”渚嬪瓙鏇村鏉傘傚畠鏄浜庡祵鍏ュ紡杞歡寮鍙戠殑涓涓疄璇侊紝鍥犳榪欎釜渚嬪瓙鏄嚭鐜板湪涔︾殑緇撳熬鑰屼笉鏄紑濮嬨傛垜浠笉寰椾笉閫愭笎鍦板緩绔嬫垜浠殑閬撹礬閫氬悜澶ч儴鍒嗕功綾嶇敋鑷蟲槸楂樼駭璇█緙栬瘧鍣ㄨ涓烘槸鐞嗘墍褰撶劧鐨勮綆楀鉤鍙般?/p>
涓鏃︿綘鑳藉啓“Hello, World”紼嬪簭錛屼綘鐨勫祵鍏ュ紡騫沖彴灝卞紑濮嬬潃涓婂幓寰堝儚浠諱綍鍏朵粬緙栫▼鐜銆備絾鏄紝宓屽叆寮忚蔣浠跺紑鍙戣繃紼嬩腑鏈鍥伴毦鐨勯儴鍒?#8212;—浣胯嚜宸辯啛鎮夌‖浠訛紝涓哄畠寤虹珛涓涓蔣浠跺紑鍙戠殑榪囩▼錛岃繛鎺ュ埌鍏蜂綋鐨勭‖浠惰澶?#8212;—榪樺湪鍚庨潰鍛€傛渶鍚庯紝浣犺兘澶熸妸浣犵殑鍔涢噺闆嗕腑浜庣畻娉曞拰鐢ㄦ埛鐣岄潰錛岃繖鏄敱浣犺寮鍙戠殑浜у搧鏉ョ‘瀹氱殑銆傚緢澶氭儏鍐典笅錛岃繖浜涚▼搴忕殑楂樼駭鏂歸潰鍙互鍦ㄥ叾浠栫殑璁$畻鏈哄鉤鍙頒笂寮鍙戯紝鍜屾垜浠竴鐩村湪璁ㄨ鐨勪綆綰х殑宓屽叆寮忚蔣浠跺紑鍙戝悓鏃惰繘琛岋紝騫朵笖鍙鎶婇珮綰ч儴鍒嗗鍏ュ祵鍏ュ紡緋葷粺涓嬈★紝涓よ呭氨閮藉畬鎴愪簡銆?/p>
鍥?9-1 鍖呭惈浜嗕竴涓?#8220;Hello, World!”搴旂敤紼嬪簭鐨勯珮綰х殑紺烘剰鍥俱傝繖涓簲鐢ㄧ▼搴忓寘鎷笁涓澶囬┍鍔ㄧ▼搴忥紝ADEOS 鎿嶄綔緋葷粺鍜屼袱涓狝DEOS 浠誨姟銆傜涓涓換鍔′互姣忕10Hz 鐨勯熷害鍒囨崲Arcom 鏉夸笂鐨勭孩鑹叉寚紺虹伅銆傜浜屼釜姣忛殧10 縐掗挓鍚戜富鏈烘垨鏄繛鎺ュ埌浣嶅瓙涓插彛涓婄殑鍝戠粓绔彂閫佸瓧絎︿覆“Hello錛學Orld錛?#8221;銆傝繖涓や釜浠誨姟涔嬪錛屽浘涓繕鏈変笁涓澶囩殑椹卞姩紼嬪簭銆傝繖浜涢┍鍔ㄧ▼搴忓垎鍒帶鍒剁潃Arcom 鏉垮瓙鐨勬寚紺虹伅銆佹椂閽熶互鍙婁覆琛岀鍙c傝櫧鐒墮氬父鎶婅澶囬┍鍔ㄧ敾鍦ㄦ搷浣滅郴緇熺殑涓嬮潰錛屼絾鏄垜鎶婂畠浠笁涓拰鎿嶄綔緋葷粺鏀懼湪鍚屼竴涓駭鍒紝鏄負浜嗙潃閲嶈鏄庡畠浠簨瀹炰笂渚濊禆浜嶢DEOS 姣擜DEOS 渚濊禆浜庡畠浠洿澶氥傚疄闄呬笂錛孉DEOS 宓屽叆寮忔搷浣滅郴緇熺敋鑷充笉鐭ラ亾錛堟垨鑰呰涓嬪叧蹇冿級榪欎簺璁懼椹卞姩鏄惁瀛樺湪浜庣郴緇熶箣涓傝繖鏄祵鍏ュ紡鎿嶄綔緋葷粺涓澶囬┍鍔ㄧ▼搴忓拰鍏朵粬紜歡涓撶敤杞歡鐨勫叡鎬с?/p>
紼嬪簭 main()鐨勫疄鐜板涓嬫墍紺恒傝繖孌典唬鐮佺畝鍗曞湴鍒涢犲巶涓や釜浠誨姟錛?strong>tb鍚姩浜嗘搷浣滅郴緇熺殑鏃ョ▼琛ㄣ傚湪榪欐牱涓涓珮鐨勭駭鍒笂錛屼唬鐮佺殑鍚箟鏄笉璦鑰屽柣鐨勩備簨瀹炰笂銆佹垜浠凡緇忓湪涓婁竴绔犱腑璁ㄨ浜嗙被浼肩殑浠g爜銆?/p>
#include "adeos.h"
void flashRed(void);
void helloWorld(void);
/*
* Create the two tasks.
*/
Task taskA(flashRed, 150, 512);
Task taskB(helloWorld, 200, 512);
/****************************************************
*
* Function : main()
*
* Description : This function is responsible for starting the ADEOS scheduler
only.
*
* Notes :
*
* Returns : This function will never return!
*
****************************************************/
void
main(void)
{
os.start();
// This point will never be reached.
} /* main() */
涓鏃︿綘浣跨敤浜嗚嚜鍔ㄤ紭鍖栵紝榪欓噷鏈変竴浜涘叧浜庣敤鎵嬪伐鐨勫姙娉曡繘涓姝ュ噺灝戜唬鐮佸ぇ灝忕殑鎶宸с?/p>
閬垮厤浣跨敤鏍囧噯搴撲緥紼?br />涓轟簡鍑忓皯浣犵殑紼嬪簭鐨勫ぇ灝忥紝浣犳墍鑳藉仛鐨勬渶濂界殑涓浠朵簨鎯呭氨鏄伩鍏嶄嬌鐢ㄥぇ鐨勬爣鍑嗗簱渚嬬▼銆傚緢澶氭渶澶х殑搴撲緥紼嬩唬浠鋒槀璐碉紝鍙槸鍥犱負瀹冧滑璁炬硶澶勭悊鎵鏈夊彲鑳界殑鎯呭喌銆備綘鑷繁鏈夊彲鑳界敤鏇村皯鐨勪唬鐮佸疄鐜頒竴涓瓙鍔熻兘銆傛瘮濡傦紝鏍囧噯C 鐨勫簱涓殑spintf渚嬬▼鏄嚭浜嗗悕鐨勫ぇ銆傝繖涓簽澶т唬鐮佷腑鏈夌浉褰撲竴閮ㄥ垎鏄綅浜庡畠鎵渚濊禆鐨勬誕鐐規暟澶勭悊渚嬬▼銆備絾鏄鏋滀綘涓嶉渶瑕佹牸寮忓寲鏄劇ず嫻偣鏁板?%f 鎴栬?d)錛岄偅涔堜綘鍙互鍐欎綘鑷繁鐨剆printf 鐨勬暣鏁頒笓鐢ㄧ増鏈紝騫朵笖鍙互鑺傜渷鍑犲崈瀛楄妭鐨勪唬鐮佺┖闂淬傚疄闄呬笂錛屼竴浜涙爣鍑咰 鐨勫簱(榪欒鎴戞兂璧稢ygnus 鐨刵ewlib)閲屾伆濂藉寘鍚簡榪欐牱涓涓嚱鏁幫紝鍙綔sprintf銆?/p>
鏈湴瀛楅暱
姣忎竴涓鐞嗗櫒閮芥湁涓涓湰鍦板瓧闀匡紝騫朵笖ANSI C 鍜孋++鏍囧噯瑙勫畾鏁版嵁綾誨瀷int蹇呴』鎬繪槸瀵瑰簲鍒伴偅涓瓧闀褲傚鐞嗘洿灝忔垨鑰呮洿澶х殑鏁版嵁綾誨瀷鏈夋椂闇瑕佷嬌鐢ㄩ檮鍔犵殑鏈哄櫒璇█鎸囦護銆傚湪浣犵殑紼嬪簭涓氳繃灝藉彲鑳界殑涓鑷翠嬌鐢╥nt 綾誨瀷錛屼綘涔熻鑳藉浠庝綘鐨勭▼搴忎腑鍓婂噺瀹濊吹鐨勫嚑鐧懼瓧鑺傘?/p>
goto 璇彞
灝卞儚瀵瑰緟鍏ㄥ眬鍙橀噺涓鏍鳳紝濂界殑杞歡宸ョ▼瀹炶返瑙勫畾鍙嶅浣跨敤榪欓」鎶鏈備絾鏄嵄鎬ョ殑鏃跺欙紝goto 璇彞鍙互鐢ㄦ潵鍘婚櫎澶嶆潅鐨勬帶鍒剁粨鏋勬垨鑰呭叡浜竴鍧楃粡甯擱噸澶嶇殑浠g爜銆?br />闄や簡榪欎簺鎶鏈互澶栵紝鍦ㄥ墠涓閮ㄥ垎浠嬬粛鐨勫嚑縐嶆柟娉曞彲鑳戒篃浼氭湁甯姪錛岀壒鍒槸鏌ヨ琛ㄣ佹墜宸ョ紪鍐欐眹緙栥佸瘎瀛樺櫒鍙樻渶浠ュ強鍏ㄥ眬鍙橀噺銆傚湪榪欎簺鎶鏈箣涓紝鍒╃敤鎵嬪伐緙栧啓姹囩紪閫氬父鍙互寰楀埌浠g爜鏈澶у箙搴︾殑鍑忓皯閲忋?br />
铏界劧浣胯蔣浠舵紜殑宸ヤ綔濂藉儚搴旇鏄竴涓伐紼嬪悎涔庨昏緫鐨勬渶鍚庝竴涓楠わ紝浣嗘槸鍦ㄥ祵鍏ュ紡鐨勭郴緇熺殑寮鍙戜腑錛屾儏鍐靛茍涓嶆繪槸榪欐牱鐨勩傚嚭浜庡浣庝環緋誨垪浜у搧鐨勯渶瑕侊紝紜歡鐨勮璁¤呴渶瑕佹彁渚涘垰濂借凍澶熺殑瀛樺偍鍣ㄥ拰瀹屾垚宸ヤ綔鐨勫鐞嗚兘鍔涖傚綋鐒訛紝鍦ㄥ伐紼嬬殑杞歡寮鍙戦樁孌碉紝浣跨▼搴忔紜殑宸ヤ綔鏄緢閲嶈鐨勩備負姝わ紝閫氬父闇瑕佷竴涓垨鑰呮洿澶氱殑寮鍙戠數璺澘錛屾湁鐨勬湁闄勫姞鐨勫瓨璐櫒錛屾湁鐨勬湁鏇村揩鐨勫鐞嗗櫒錛屾湁鐨勪袱鑰呴兘鏈夈傝繖浜涚數璺澘灝辨槸鐢ㄦ潵浣胯蔣浠舵紜伐浣滅殑銆傝屽伐紼嬬殑鏈鍚庨樁孌靛垯鍙樻垚浜嗗浠g爜榪涜浼樺寲銆傛渶鍚庝竴姝ョ殑鐩爣鏄嬌寰楀伐浣滅▼搴忓湪涓涓粔浠風殑紜歡騫沖彴涓婅繍琛屻?/p>
鎻愰珮浠g爜鐨勬晥鐜?br />鎵鏈夌幇浠g殑 C 鍜孋++緙栬瘧鍣ㄩ兘鎻愪緵浜嗕竴瀹氱▼搴︿笂鐨勪唬鐮佷紭鍖栥傜劧鑰岋紝澶ч儴鍒嗙敱緙栬瘧鍣ㄦ墽琛岀殑浼樺寲鎶鏈粎娑夊強鎵ц閫熷害鍜屼唬鐮佸ぇ灝忕殑涓涓鉤琛°備綘鐨勭▼搴忚兘澶熷彉寰楁洿蹇垨鑰呮洿灝忥紝浣嗘槸涓嶅彲鑳藉張鍙樺揩鍙堝彉灝忋備簨瀹炰笂錛屽湪鍏朵腑涓涓柟闈㈢殑鎻愰珮灝變細瀵瑰彟涓鏂歸潰浜х敓璐熼潰鐨勫獎鍝嶃傚摢涓鏂歸潰鐨勬彁楂樺浜庣▼搴忔洿鍔犵殑閲嶈鏄敱紼嬪簭鍛樻潵鍐沖畾銆傜煡閬撹繖涓鐐瑰悗錛屾棤璁轟粈涔堟椂鍊欓亣鍒伴熷害涓庡ぇ灝忕殑鐭涚浘錛岀紪璇戝櫒鐨勪紭鍖栭樁孌靛氨浼氫綔鍑哄悎閫傜殑閫夋嫨銆?/p>
鍥犱負浣犱笉鍙兘璁╃紪璇戝櫒涓轟綘鍚屾椂鍋氫袱縐嶇被鍨嬬殑浼樺寲錛屾垜寤鴻浣犺瀹冨敖鍏舵墍鑳界殑鍑忓皯紼嬪簭鐨勫ぇ灝忋傛墽琛岀殑閫熷害閫氬父鍙浜庢煇浜涙湁鏃墮棿闄愬埗鎴栬呮槸棰戠箒鎵ц鐨勪唬鐮佹鏄噸瑕佺殑銆傝屼笖浣犲彲浠ラ氳繃鎵嬪伐鐨勫姙娉曞仛寰堝浜嬩互鎻愰珮榪欎簺浠g爜孌電殑鏁堢巼銆傜劧鑰岋紝鎵嬪伐鏀瑰彉浠g爜澶у皬鏄竴浠跺緢闅劇殑浜嬫儏錛岃屼笖緙栬瘧鍣ㄥ浜庝竴涓洿鏈夊埄鐨勪綅緗紝浣垮緱瀹冨彲浠ュ湪浣犳墍鏈夌殑杞歡妯″潡涔嬮棿榪涜榪欑鏀瑰彉銆?/p>
鐩村埌浣犵殑紼嬪簭宸ヤ綔璧鋒潵錛屼綘鍙兘宸茬粡鐭ラ亾鎴栬呮槸闈炲父鐨勬竻妤氾紝鍝竴涓瓙紼嬪簭鎴栬呮ā鍧楀浜庢暣浣撲唬鐮佹晥鐜囨槸鏈鍏抽敭鐨勩備腑鏂湇鍔′緥紼嬨侀珮浼樺厛綰х殑浠誨姟銆佹湁瀹炴椂闄愬埗鐨勮綆椼佽綆楀瘑闆嗗瀷鎴栬呴綣佽皟鐢ㄧ殑鍑芥暟閮芥槸鍊欓夊璞°傛湁涓涓彨浣減rofiler 鐨勫伐鍏鳳紝瀹冨寘鎷湪涓浜涜蔣浠跺紑鍙戝伐鍏風粍涓紝榪欎釜宸ュ叿鍙互鐢ㄦ潵鎶婁綘鐨勮綰塊泦涓埌閭d簺紼嬪簭鑺辮垂澶ч儴鍒嗘椂闂?鎴栬呭緢澶氭椂闂?鐨勪緥紼嬩笂鍘匯?br />涓鏃︿綘紜畾浜嗛渶瑕佹洿楂樹唬鐮佹晥鐜囩殑渚嬬▼錛屽彲浠ヨ繍鐢ㄤ笅闈㈢殑涓縐嶆垨鑰呭縐嶆妧鏈潵鍑忓皯瀹冧滑鐨勬墽琛屾椂闂淬?/p>
inline 鍑芥暟
鍦?c++涓紝鍏抽敭瀛梚nline 鍙互琚姞鍏ュ埌浠諱綍鍑芥暟鐨勫0鏄庛傝繖涓叧閿瓧璇鋒眰緙栬瘧鍣ㄧ敤鍑芥暟鍐呴儴鐨勪唬鐮佹浛鎹㈡墍鏈夊浜庢寚鍑虹殑鍑芥暟鐨勮皟鐢ㄣ傝繖鏍峰仛鍒犲幓浜嗗拰瀹為檯鍑芥暟璋冪敤鐩稿叧鐨勬椂闂村紑閿錛岃繖縐嶅仛娉曞湪inline 鍑芥暟棰戠箒璋冪敤騫朵笖鍙寘鍚嚑琛屼唬鐮佺殑鏃跺欐槸鏈鏈夋晥鐨勩?/p>
inline 鍑芥暟鎻愪緵浜嗕竴涓緢濂界殑渚嬪瓙錛屽畠璇存槑浜嗘湁鏃舵墽琛岀殑閫熷害鍜屼唬鐮佺殑澶皬鏄浣曞弽鍚戝叧鑱旂殑銆傞噸澶嶇殑鍔犲叆鍐呰仈浠g爜浼氬鍔犱綘鐨勭▼搴忕殑澶у皬錛屽鍔犵殑澶у皬鍜屽嚱鏁拌皟鐢ㄧ殑嬈℃暟鎴愭姣斻傝屼笖錛屽緢鏄庢樉錛屽鏋滃嚱鏁拌秺澶э紝紼嬪簭澶у皬澧炲姞寰楄秺鏄庢樉銆備紭鍖栧悗鐨勭▼搴忚繍琛岀殑鏇村揩浜嗭紝浣嗘槸鐜板湪闇瑕佹洿澶氱殑ROM銆?/p>
鏌ヨ琛?br />switch 璇彞鏄竴涓櫘閫氱殑緙栫▼鎶鏈紝浣跨敤鏃墮渶瑕佹敞鎰忋傛瘡涓涓敱tb鏈哄櫒璇█瀹炵幇鐨勬祴璇曞拰璺寵漿浠呬粎鏄負浜嗗喅瀹氫笅涓姝ヨ鍋氫粈涔堝伐浣滐紝灝辨妸瀹濊吹鐨勫鐞嗗櫒鏃墮棿鑰楀敖浜嗐備負浜嗘彁楂橀熷害錛岃娉曟妸鍏蜂綋鐨勬儏鍐墊寜鐓у畠浠彂鐢熺殑鐩稿棰戠巼鎺掑簭銆傛崲鍙ヨ瘽璇達紝鎶婃渶鍙兘鍙戠敓鐨勬儏鍐墊斁鍦ㄧ涓錛屾渶涓嶅彲鑳界殑鎯呭喌鏀懼湪鏈鍚庛傝繖鏍蜂細鍑忓皯騫沖潎鐨勬墽琛屾椂闂達紝浣嗘槸鍦ㄦ渶宸儏鍐典笅鏍規湰娌℃湁鏀瑰杽銆?/p>
濡傛灉姣忎竴涓儏鍐典笅閮芥湁璁稿鐨勫伐浣滆鍋氾紝閭d箞涔熻鎶婃暣涓猻witch 璇彞鐢ㄤ竴涓寚鍚戝嚱鏁版寚閽堢殑琛ㄦ浛鎹㈠惈鏇村姞鏈夋晥銆傛瘮濡傦紝涓嬮潰鐨勭▼搴忔鏄竴涓緟鏀瑰杽鐨勫欓夊璞★細
enum NodeType {NodeA, NodeB, NodeC}
switch(getNodeType())
{
case NodeA:
...
case NodeB:
...
case NodeC:
...
}
涓轟簡鎻愰珮閫熷害錛屾垜浠鐢ㄤ笅闈㈢殑浠g爜鏇挎崲榪欎釜switch 璇彞銆傝繖孌典唬鐮佺殑絎竴閮ㄥ垎鏄噯澶囧伐浣滐細涓涓嚱鏁版寚閽堟暟緇勭殑鍒涘緩銆傜浜岄儴鍒嗘槸鐢ㄦ洿鏈夋晥鐨勪竴琛岃鍙ユ浛鎹witch 璇彞銆?/p>
int processNodeA(void);
int processNodeB(void);
int processNodeC(void);
/*
* Establishment of a table of pointers to functions.
*/
int (* nodeFunctions[])() = { processNodeA, processNodeB, processNodeC };
...
/*
* The entire switch statement is replaced by the next line.
*/
status = nodeFunctions[getNodeType()]();
鎵嬪伐緙栧啓姹囩紪
涓浜涜蔣浠舵ā鍧楁渶濂芥槸鐢ㄦ眹緙栬璦鏉ュ啓銆傝繖浣垮緱紼嬪簭鍛樻湁鏈轟細鎶婄▼搴忓敖鍙兘鍙樺緱鏈夋晥鐜囥傚敖綆″ぇ閮ㄥ垎鐨凜/C++緙栬瘧鍣ㄤ駭鐢熺殑鏈哄櫒浠g爜姣斾竴涓竴鑸按騫崇殑紼嬪簭鍛樼紪鍐欑殑鏈哄櫒浠g爜瑕佸ソ鐨勫錛屼絾鏄浜庝竴涓粰瀹氱殑鍑芥暟錛屼竴涓ソ鐨勭▼搴忓憳浠嶇劧鍙兘鍋氬緱姣斾竴鑸按騫崇殑緙栬瘧鍣ㄨ濂姐傛瘮濡傦紝鍦ㄦ垜鑱屼笟鐢熸動鐨勬棭鏈燂紝鎴戠敤C 瀹炵幇浜嗕竴涓暟瀛楁護娉㈠櫒錛屾妸瀹冧綔涓篢I TMS320C30 鏁板瓧淇″彿澶勭悊鍣ㄧ殑杈撳嚭鐩爣銆傚綋鏃舵垜浠湁鐨?a style="color: #000000" >tb緙栬瘧鍣ㄤ篃璁告槸涓嶇煡閬擄紝涔熻鏄笉鑳藉埄鐢ㄤ竴涓壒孌婄殑鎸囦護錛岃鎸囦護鍑嗙‘鍦版墽琛屼簡鎴戦渶瑕佺殑閭d釜鏁板鎿嶄綔銆傛垜鐢ㄥ姛鑳界浉鍚岀殑鍐呰仈姹囩紪鎸囦護鎵嬪伐鍦版浛鎹簡涓孌礐 璇█鐨勫驚鐜紝榪欐牱鎴戝氨鑳藉鎶婃暣涓綆楁椂闂撮檷浣庝簡鍗佸垎涔嬩竴浠ヤ笂銆?/p>
瀵勫瓨鍣ㄥ彉閲?br />鍦ㄥ0鏄庡眬閮ㄥ彉閲忕殑鏃跺欏彲浠ヤ嬌鐢?register 鍏抽敭瀛椼傝繖灝變嬌寰楃紪璇戝櫒鎶婂彉閲忔斁鍏ヤ竴涓鐢ㄩ夌殑瀵勫瓨鍣紝鑰屼笉鏄爢鏍堥噷銆傚悎閫傚湴浣跨敤榪欑鏂圭彁錛屽畠浼氫負緙栬瘧鍣ㄦ彁渚涘叧浜庢渶緇忓父璁塊棶鍙橀噺鐨勬彁紺猴紝浼氱◢寰彁楂樺嚱鏁扮殑鎵ц閫熷害銆傚嚱鏁拌皟鐢ㄥ緱瓚婃槸棰戠箒錛岃繖鏍風殑鏀瑰彉灝辮秺鏄彲鑳芥彁楂樹唬鐮佺殑閫熷害銆?/p>
鍏ㄥ眬鍙橀噺
浣跨敤鍏ㄥ眬鍙橀噺姣斿悜鍑芥暟浼犻掑弬鏁版洿鍔犳湁鏁堢巼銆傝繖鏍峰仛鍘婚櫎浜嗗嚱鏁拌皟鐢ㄥ墠鍙傛暟鍏ユ爤鍜屽嚱鏁板畬鎴愬悗鍙傛暟鍑烘爤鐨勯渶瑕併傚疄闄呬笂錛屼換浣曞瓙紼嬪簭鏈鏈夋晥鐜囩殑瀹炵幇鏄牴鏈病鏈夊弬鏁般傜劧鑰岋紝鍐沖畾浣跨敤鍏ㄥ眬鍙橀噺瀵圭▼搴忎篃鍙兘鏈変竴浜涜礋浣滅敤銆傝蔣浠跺伐紼嬩漢澹氬父涓嶉紦鍔變嬌鐢ㄥ叏灞鍙橀噺錛屽姫鍔涗績榪涙ā鍧楀寲鍜岄噸鍏ョ洰鏍囷紝榪欎簺涔熸槸閲嶈鐨勮冭檻銆?/p>
杞
涓柇鏈嶅姟渚嬬▼緇忓父鐢ㄦ潵鎻愰珮紼嬪簭鐨勬晥鐜囥傜劧鑰岋紝涔熸湁灝戞暟渚嬪瓙鐢變簬榪囧害鍜屼腑鏂叧鑱旇岄犳垚瀹為檯涓婃晥鐜囦綆涓嬨傚湪榪欎簺鎯呭喌涓紝涓柇闂寸殑騫沖潎鏃墮棿鍜屼腑鏂殑絳夊緟鏃墮棿鍏鋒湁鐩稿悓閲忕駭銆傝繖縐嶆儏鍐典笅錛屽埄鐢ㄨ疆璇笌紜歡璁懼閫氫俊鍙兘浼氭洿濂姐傚綋鐒訛紝榪欎篃浼氫嬌杞歡鐨勬ā鍧楁洿灝戙?/p>
瀹氱偣榪愮畻
闄ら潪浣犵殑鐩爣騫沖彴鍖呭惈涓涓誕鐐硅繍綆楃殑鍗忓鐞嗗櫒錛屽惁鍒欎綘浼氳垂寰堝ぇ鐨勫姴鍘繪搷綰典綘紼嬪簭涓殑嫻偣鏁版嵁銆傜紪璇戝櫒鎻愪緵鐨勬誕鐐瑰簱鍖呭惈浜嗕竴緇勬ā浠挎誕鐐硅繍綆楀崗澶勭悊鍣ㄦ寚浠ょ粍鐨勫瓙紼嬪簭銆傚緢澶氳繖縐嶅嚱鏁拌鑺辮垂姣斿畠浠殑鏁存暟榪愮畻鍑芥暟鏇撮暱鐨勬墽琛屾椂闂達紝騫朵笖涔熷彲鑳芥槸涓嶅彲閲嶅叆鐨勩?/p>
濡傛灉浣犲彧鏄埄鐢ㄦ誕鐐規暟榪涜灝戦噺鐨勮繍綆楋紝閭d箞鍙兘鍙埄鐢ㄥ畾鐐硅繍綆楁潵瀹炵幇瀹冩洿濂姐傝櫧鐒跺彧鏄槑鐧藉浣曞仛鍒拌繖涓鐐瑰氨澶熷洶闅劇殑浜嗭紝浣嗘槸鐞嗚涓婄敤瀹氱偣榪愮畻瀹炵幇浠諱綍嫻偣璁$畻閮芥槸鍙兘鐨勩?閭e氨鏄墍璋撶殑嫻偣杞歡搴撱?浣犳渶澶х殑鏈夊埄鏉′歡鏄紝浣犲彲鑳戒笉蹇呭彧鏄負浜嗗疄鐜頒竴涓垨鑰呬袱涓綆楄屽疄鐜版暣涓狪EEE 754 鏍囧噯銆傚鏋滅湡鐨勯渶瑕侀偅縐嶇被鍨嬬殑瀹屾暣鍔熻兘錛屽埆紱誨紑緙栬瘧鍣ㄧ殑嫻偣搴擄紝鍘誨鎵懼叾浠栧姞閫熶綘紼嬪簭鐨勬柟娉曞惂銆?/p>
涓嶈鏄疌銆丆++瀵逛簬鍐呭瓨瀵歸綈鐨勯棶棰樺湪鍘熺悊涓婃槸涓鑷寸殑錛屽榻愮殑鍘熷洜鍜岃〃鐜幫紝綆鍗曟葷粨涓涓嬶紝浠ヤ究鏈嬪弸浠叡浜?/p>
涓銆佸唴瀛樺榻愮殑鍘熷洜
澶ч儴鍒嗙殑鍙傝冭祫鏂欓兘鏄鏄鐨勶細
1銆佸鉤鍙板師鍥?縐繪鍘熷洜)錛氫笉鏄墍鏈夌殑紜歡騫沖彴閮借兘璁塊棶浠繪剰鍦板潃涓婄殑浠繪剰鏁版嵁鐨勶紱鏌愪簺紜歡騫沖彴鍙兘鍦ㄦ煇浜涘湴鍧澶勫彇鏌愪簺鐗瑰畾綾誨瀷鐨勬暟鎹紝鍚﹀垯鎶涘嚭紜歡寮傚父銆?br />2銆佹ц兘鍘熷洜錛氭暟鎹粨鏋?灝ゅ叾鏄爤)搴旇灝藉彲鑳藉湴鍦ㄨ嚜鐒惰竟鐣屼笂瀵歸綈銆傚師鍥犲湪浜庯紝涓轟簡璁塊棶鏈榻愮殑鍐呭瓨錛屽鐞嗗櫒闇瑕佷綔涓ゆ鍐呭瓨璁塊棶錛涜屽榻愮殑鍐呭瓨璁塊棶浠呴渶瑕佷竴嬈¤闂?/p>
涔熸湁鐨勬湅鍙嬭錛屽唴瀛樺榻愬嚭浜庡璇誨彇鐨勬晥鐜囧拰鏁版嵁鐨勫畨鍏ㄧ殑鑰冭檻錛屾垜瑙夊緱涔熸湁涓瀹氱殑閬撶悊銆?/p>
浜屻佸榻愯鍒?br /> 姣忎釜鐗瑰畾騫沖彴涓婄殑緙栬瘧鍣ㄩ兘鏈夎嚜宸辯殑榛樿“瀵歸綈緋繪暟”(涔熷彨瀵歸綈妯℃暟)銆傛瘮濡?2浣峸indows騫沖彴涓嬶紝VC榛樿鏄寜鐓?bytes瀵歸綈鐨?VC->Project->settings->c/c++->Code Generation涓殑truct member alignment 鍊奸粯璁ゆ槸8)錛岀▼搴忓憳鍙互閫氳繃棰勭紪璇戝懡浠?pragma pack(n)錛宯=1,2,4,8,16鏉ユ敼鍙樿繖涓緋繪暟錛屽叾涓殑n灝辨槸浣犺鎸囧畾鐨?#8220;瀵歸綈緋繪暟”銆?/p>
鍦ㄥ祵鍏ュ紡鐜涓嬶紝瀵歸綈寰寰涓庢暟鎹被鍨嬫湁鍏籌紝鐗瑰埆鏄疌緙栬瘧鍣ㄥ緙虹渷鐨勭粨鏋勬垚鍛樿嚜鐒跺灞婃潯浠朵負“N瀛楄妭瀵?榻?#8221;錛孨鍗寵鎴愬憳鏁版嵁綾誨瀷鐨勯暱搴︺傚int鍨嬫垚鍛樼殑鑷劧瀵圭晫鏉′歡涓?瀛楄妭瀵歸綈錛岃宒ouble綾誨瀷鐨勭粨鏋勬垚鍛樼殑鑷劧瀵圭晫鏉′歡涓?瀛楄妭瀵歸綈銆傝嫢璇ユ垚鍛樼殑璧峰 鍋忕Щ涓嶄綅浜庤鎴愬憳鐨?#8220;榛樿鑷劧瀵圭晫鏉′歡”涓婏紝鍒欏湪鍓嶄竴涓妭闈㈠悗闈㈡坊鍔犻傚綋涓暟鐨勭┖瀛楄妭銆侰緙栬瘧鍣ㄧ己鐪佺殑緇撴瀯鏁翠綋鐨勮嚜鐒跺鐣屾潯浠朵負錛氳緇撴瀯鎵鏈夋垚鍛樹腑瑕佹眰鐨?鏈澶ц嚜鐒跺鐣屾潯浠躲傝嫢緇撴瀯浣撳悇鎴愬憳闀垮害涔嬪拰涓嶄負“緇撴瀯鏁翠綋鑷劧瀵圭晫鏉′歡鐨勬暣鏁板嶏紝鍒欏湪鏈鍚庝竴涓垚鍛樺悗濉厖絀哄瓧鑺傘?/p>
閭d箞鍙互寰楀埌濡備笅鐨勫皬緇?
綾誨瀷 瀵歸綈鏂瑰紡錛堝彉閲忓瓨鏀劇殑璧峰鍦板潃鐩稿浜庣粨鏋勭殑璧峰鍦板潃鐨勫亸縐婚噺錛?br />Char 鍋忕Щ閲忓繀欏諱負sizeof(char)鍗?鐨勫嶆暟
Short 鍋忕Щ閲忓繀欏諱負sizeof(short)鍗?鐨勫嶆暟
int 鍋忕Щ閲忓繀欏諱負sizeof(int)鍗?鐨勫嶆暟
float 鍋忕Щ閲忓繀欏諱負sizeof(float)鍗?鐨勫嶆暟
double 鍋忕Щ閲忓繀欏諱負sizeof(double)鍗?鐨勫嶆暟
鍚勬垚鍛樺彉閲忓湪瀛樻斁鐨勬椂鍊欐牴鎹湪緇撴瀯涓嚭鐜扮殑欏哄簭渚濇鐢寵絀洪棿錛屽悓鏃舵寜鐓т笂闈㈢殑瀵歸綈鏂瑰紡璋冩暣浣嶇疆錛岀┖緙虹殑瀛楄妭緙栬瘧鍣ㄤ細鑷姩濉厖銆傚悓鏃朵負浜嗙‘淇濈粨鏋勭殑澶у皬涓虹粨 鏋勭殑瀛楄妭杈圭晫鏁幫紙鍗寵緇撴瀯涓崰鐢ㄦ渶澶х┖闂寸殑綾誨瀷鎵鍗犵敤鐨勫瓧鑺傛暟錛夌殑鍊嶆暟錛屾墍浠ュ湪涓烘渶鍚庝竴涓垚鍛樺彉閲忕敵璇風┖闂村悗錛岃繕浼氭牴鎹渶瑕佽嚜鍔ㄥ~鍏呯┖緙虹殑瀛楄妭,涔熷氨鏄?璇達細緇撴瀯浣撶殑鎬誨ぇ灝忎負緇撴瀯浣撴渶瀹藉熀鏈被鍨嬫垚鍛樺ぇ灝忕殑鏁存暟鍊嶏紝濡傛湁闇瑕佺紪璇戝櫒浼氬湪鏈鏈竴涓垚鍛樹箣鍚庡姞涓婂~鍏呭瓧鑺傘傚浜巆har鏁扮粍錛屽瓧鑺傚搴︿粛鐒惰涓轟負1銆?/p>
瀵逛簬涓嬭堪鐨勪竴涓粨鏋勪綋錛屽叾瀵歸綈鏂瑰紡涓猴細
struct Node1{
double m1;
char m2錛?br /> int m3;
};
瀵逛簬絎竴涓彉閲弇1錛宻izeof(double)=8涓瓧鑺傦紱鎺ヤ笅鏉ヤ負絎簩涓垚鍛榤2鍒嗛厤絀洪棿錛岃繖鏃朵笅涓涓彲浠ュ垎閰嶇殑鍦板潃瀵逛簬緇撴瀯鐨勮搗濮嬪湴鍧鐨勫亸縐婚噺涓?錛屾槸sizeof(char)鐨勫嶆暟錛屾墍浠ユ妸m2瀛樻斁鍦ㄥ亸縐婚噺涓?鐨勫湴鏂規弧瓚沖榻愭柟寮忥紝璇ユ垚鍛樺彉閲忓崰鐢?sizeof(char)=1涓瓧鑺傦紱鎺ヤ笅鏉ヤ負絎笁涓垚鍛榤3鍒嗛厤絀洪棿錛岃繖鏃朵笅涓涓彲浠ュ垎閰嶇殑鍦板潃瀵逛簬緇撴瀯鐨勮搗濮嬪湴鍧鐨勫亸縐婚噺涓?錛屼笉鏄痵izeof (int)=4鐨勫嶆暟錛屼負浜嗘弧瓚沖榻愭柟寮忓鍋忕Щ閲忕殑綰︽潫闂錛岃嚜鍔ㄥ~鍏?涓瓧鑺傦紙榪欎笁涓瓧鑺傛病鏈夋斁浠涔堜笢瑗匡級錛岃繖鏃朵笅涓涓彲浠ュ垎閰嶇殑鍦板潃瀵逛簬緇撴瀯鐨勮搗濮嬪湴鍧鐨勫亸縐婚噺涓?2錛屽垰濂芥槸sizeof(int), 鐢變簬8+4+4 = 16鎭板ソ鏄粨鏋勪綋涓渶澶х┖闂寸被鍨媎ouble(8)鐨勫嶆暟錛屾墍浠izeof(Node1) =16.
typedef struct{
char a;
int b;
char c;
}Node2;
鎴愬憳a鍗犱竴涓瓧鑺傦紝鎵浠鏀懼湪浜嗙1浣嶇殑浣嶇疆錛涚敱浜庣浜屼釜鍙橀噺b鍗?涓瓧鑺傦紝涓轟繚璇佽搗濮嬩綅緗槸4(sizeof(b))鐨勫嶆暟錛屾墍浠ラ渶瑕佸湪a鍚庨潰濉厖3涓?瀛楄妭錛屼篃灝辨槸b鏀懼湪浜嗕粠絎?浣嶅埌絎?浣嶇殑浣嶇疆錛岀劧鍚庡氨鏄痗鏀懼湪浜?鐨勪綅緗紝姝ゆ椂4+4+1=9銆傛帴涓嬫潵鑰冭檻瀛楄妭杈圭晫鏁幫紝9騫朵笉鏄渶澶х┖闂寸被鍨媔nt(4) 鐨勫嶆暟錛屽簲璇ュ彇澶т簬9涓旀槸4鐨勭殑鏈灝忔暣鏁?2錛屾墍浠izeof(Node2) = 12.
typedef struct{
char a;
char b;
int c;
}Node3;
鏄庢樉鍦幫細sizeof(Node3) = 8
瀵逛簬緇撴瀯浣揂涓寘鍚粨鏋勪綋B鐨勬儏鍐碉紝灝嗙粨鏋勪綋A涓殑緇撴瀯浣撴垚鍛楤涓殑鏈瀹界殑鏁版嵁綾誨瀷浣滀負璇ョ粨鏋勪綋鎴愬憳B鐨勬暟鎹搴︼紝鍚屾椂緇撴瀯浣撴垚鍛楤蹇呴』婊¤凍涓婅堪瀵歸綈鐨勮瀹氥?/p>
瑕佹敞鎰忓湪VC涓湁涓涓榻愮郴鏁扮殑姒傚康錛岃嫢璁劇疆浜嗗榻愮郴鏁幫紝閭d箞涓婅堪鎻忚堪鐨勫榻愭柟寮忥紝鍒欎笉閫傚悎銆?/p>
渚嬪錛?/p>
1瀛楄妭瀵歸綈(#pragma pack(1))
杈撳嚭緇撴灉錛歴izeof(struct test_t) = 8 [涓や釜緙栬瘧鍣ㄨ緭鍑轟竴鑷碷
鍒嗘瀽榪囩▼錛?br />鎴愬憳鏁版嵁瀵歸綈
#pragma pack(1)
struct test_t {
int a;
char b;
short c;
char d;
};
#pragma pack()
鎴愬憳鎬誨ぇ灝?8錛?/p>
2瀛楄妭瀵歸綈(#pragma pack(2))
杈撳嚭緇撴灉錛歴izeof(struct test_t) = 10 [涓や釜緙栬瘧鍣ㄨ緭鍑轟竴鑷碷
鍒嗘瀽榪囩▼錛?br />鎴愬憳鏁版嵁瀵歸綈
#pragma pack(2)
struct test_t {
int a;
char b;
short c;
char d;
};
#pragma pack()
鎴愬憳鎬誨ぇ灝?9錛?/p>
4瀛楄妭瀵歸綈(#pragma pack(4))
杈撳嚭緇撴灉錛歴izeof(struct test_t) = 12 [涓や釜緙栬瘧鍣ㄨ緭鍑轟竴鑷碷
鍒嗘瀽榪囩▼錛?br />1) 鎴愬憳鏁版嵁瀵歸綈
#pragma pack(4)
struct test_t { //鎸夊嚑瀵歸綈錛?鍋忕Щ閲忎負鍚庤竟絎竴涓彇妯′負闆剁殑銆?br />int a;
char b;
short c;
char d;
};
#pragma pack()
鎴愬憳鎬誨ぇ灝?9錛?/p>
8瀛楄妭瀵歸綈(#pragma pack(8))
杈撳嚭緇撴灉錛歴izeof(struct test_t) = 12 [涓や釜緙栬瘧鍣ㄨ緭鍑轟竴鑷碷
鍒嗘瀽榪囩▼錛?br />鎴愬憳鏁版嵁瀵歸綈
#pragma pack(8)
struct test_t {
int a;
char b;
short c;
char d;
};
#pragma pack()
鎴愬憳鎬誨ぇ灝?9錛?/p>
16瀛楄妭瀵歸綈(#pragma pack(16))
杈撳嚭緇撴灉錛歴izeof(struct test_t) = 12 [涓や釜緙栬瘧鍣ㄨ緭鍑轟竴鑷碷
鍒嗘瀽榪囩▼錛?br />1) 鎴愬憳鏁版嵁瀵歸綈
#pragma pack(16)
struct test_t {
int a;
char b;
short c;
char d;
};
#pragma pack()
鎴愬憳鎬誨ぇ灝?9錛?/p>
鑷充簬8瀛楄妭瀵歸綈鍜?6瀛楄妭瀵歸綈錛屾垜瑙夊緱榪欎袱涓緥瀛愬彇寰椾笉濂斤紝娌℃湁澶ぇ鐨勫弬鑰冩剰涔夈?/p>
(x666f)
鐞嗘兂涓婏細濡備綍瀹㈡埛浼佸浘浣跨敤鏌愪釜鎺ュ彛緙烘病鏈夎幏寰椾粬鎵棰勬湡鐨勮涓猴紝榪欎釜浠g爜涓嶈閫氳繃緙栬瘧錛涘鏋滀唬鐮侀氳繃浜嗙紪璇戯紝浠栫殑琛屼負灝辮鏄鎴鋒墍鎯寵鐨勩?/p>
1. 瀵煎叆澶栬綾誨瀷錛坵rapper types錛?/p>
2. 璁﹖ypes瀹規槗琚紜嬌鐢紝涓嶅鏄撹璇敤銆傚敖閲忛浣犵殑types琛屼負涓庡唴緗畉ypes涓鑷淬?/p>
3. 璁捐class鐘瑰璁捐type
鏂皌ype鐨勫璞″簲璇ュ浣曡鍒涘緩鍜岄攢姣侊紵錛堣嚜宸辮璁peratornew錛宱peratornew[],operator delete鍜宱perator delete[])
瀵硅薄鐨勫垵濮嬪寲鍜屽璞$殑澶嶅埗璇ユ湁浠涔堟牱鐨勫樊鍒?瀵瑰簲浜庝笉鍚岀殑鍑芥暟璋冪敤
鏂皌ype鐨勫璞″鏋滆passed by value 錛屾剰鍛崇潃浠涔?/p>
浠涔堟槸鏂皌ype鐨?#8220;鍚堟硶鍊?#8221;錛燂紙錛燂紵錛?/p>
浣犵殑鏂皌ype闇瑕侀厤鍚堟煇涓戶鎵垮浘緋誨悧錛?/p>
浣犵殑蹇僼ype闇瑕佷粈涔堟牱鐨勮漿鎹?/p>
浠涔堟牱鐨勬搷浣滅鍚堝嚱鏁板姝ゆ柊type鑰岃█鏄悎鐞嗙殑
浠涔堟牱鐨勬爣鍑嗗嚱鏁板簲璇ラ┏鍥?/p>
璋佽鍙栫敤鏂皌ype鐨勬垚鍛?/p>
浠涔堟槸鏂皌ype鐨勬湭澹版槑鎺ュ彛
浣犵殑鏂皌ype鏈夊涔堜竴鑸寲
浣犵湡鐨勯渶瑕佷竴涓柊type鍚?/p>
涓銆佸畞浠ass-by-reference-to-const 鏇挎崲 pass-by-value
1.tbw鏁堢巼楂橈紝娌℃湁浠諱綍鏋勯犲嚱鏁版垨鏋愭瀯鍑芥暟琚皟鐢紝鍥犱負娌℃湁浠諱綍鏂板璞¤鍒涘緩銆?/p>
2. by refrenece鏂瑰紡浼犻掑弬鏁拌繕鍙互閬垮厤瀵硅薄slicing 闂
浜屻佸繀欏昏繑鍥炲璞℃椂錛屽埆濡勬兂榪斿洖鍏秗eference
鎵鏈夌敤涓妔tatic瀵硅薄鐨勮璁★紝浼氶犳垚澶氱嚎紼嬪畨鍏ㄦх殑鎬鐤戙?/p>
涓夈佸皢鎴愬憳鍙橀噺澹版槑涓簆rivate錛?/strong>
1. 鍙互瀹炵幇鍑?#8220;涓嶅噯璁塊棶”銆?#8220;鍙璁塊棶”銆?#8220;璇誨啓璁塊棶”銆?#8220;鎯熷啓璁塊棶”
2. 灝佽錛氬畠浣挎垜浠兘澶熸敼鍙樹簨鐗╄屽彧褰卞搷鏈夐檺瀹㈡埛銆?/p>
灝嗘垚鍛樺彉閲忛殣钘忓湪鍑芥暟鎺ュ彛鐨勮儗鍚庯紝鍙互涓?#8220;鎵鏈夊彲鑳界殑瀹炵幇”鎻愪緵寮規с傚錛?strong>tb鍙橀噺琚鎴栬鍐欐椂閫氱煡鍏朵粬瀵硅薄銆佸彲浠ラ獙璇乧lass鐨勭害鏉熸潯浠朵互鍙婂嚱鏁扮殑鍓嶆彁鍜屼簨鍚庤漿甯栵紱浠ュ強鍦ㄥ綰跨▼鐜鎵ц鍚屾鎺у埗銆傘傘傘傜瓑銆?/p>
鍥涖佸畞浠on-member銆乶on-friend鏇挎崲member鍑芥暟
- namespace WebBrowserStuff{
- class WebBrowser{...};
- void clearBrowser(WebBrowser& wb);
- }
浜斻佽嫢鎵鏈夊弬鏁扮殕闇瑕佺被鍨嬭漿鎹紝璇蜂負姝ら噰鐢╪on-member鍑芥暟
- class Rational {
- ...
- }
- const Rational operator*(const Rational& lhs,const Rational& rhs)
- {
- return Rational( lhs.numerator()* rhs.numerator()
- ,lhs.denominator()*rhs.denominator() );
- }
- Rational oneFourth錛?錛?錛夛紱
- Rational result錛?nbsp;
- result = oneFourth * 2;
- result = 2*oneFourth;
鍏佽冭檻鍐欏嚭涓涓笉鎶涘紓甯哥殑swap鍑芥暟
涓嶅垢鐨勬槸錛屽鏋滄寜鐓ц繖涓爣鍑嗘潵璇達紝宓屽叆寮忕郴緇熷彲鑳芥槸紼嬪簭鍛樺伐浣滀腑紕板埌鐨勬渶闅劇殑璁$畻鏈哄鉤鍙頒簡銆傜敋鑷沖湪鏌愪簺宓屽叆寮忕郴緇熶腑錛屾牴鏈棤娉曞疄鐜?#8220;Hello錛學orld!”紼嬪簭銆傚嵆浣垮湪閭d簺鍙互瀹炵幇榪欎釜紼嬪簭鐨勫祵鍏ュ紡緋葷粺閲岄潰錛屾枃鏈瓧絎︿覆鐨勮緭鍑轟篃鏇村儚鏄洰鏍囩殑涓閮ㄥ垎鑰屼笉鏄紑濮嬬殑涓閮ㄥ垎銆?/p>
浣犵湅錛?#8220;Hello錛學orld!”紺轟緥闅愬惈鐨勫亣璁撅紝灝辨槸鏈変竴涓彲浠ユ墦鍗板瓧絎︿覆鐨勮緭鍑鴻澶囥傞氬父浣跨敤鐨勬槸鐢ㄦ埛鏄劇ず鍣ㄤ笂鐨勪竴涓獥鍙f潵瀹屾垚榪欎釜鍔熻兘銆備絾鏄ぇ澶氭暟鐨勫祵鍏ュ紡緋葷粺騫舵病鏈変竴涓樉紺哄櫒鎴栬呯被浼肩殑杈撳嚭璁懼銆傚嵆浣挎槸瀵歸偅浜涙湁鏄劇ず鍣ㄧ殑緋葷粺錛岄氬父涔熼渶瑕佺敤涓灝忔宓屽叆寮忕▼搴忥紝閫氳繃璋冪敤鏄劇ず椹卞姩紼嬪簭鏉ュ疄鐜拌繖涓姛鑳姐傝繖瀵逛竴涓祵鍏ュ紡緙栫▼鑰呮潵璇寸粷瀵規槸涓涓浉褰撳叿鏈夋寫鎴樻х殑寮绔?/p>
鐪嬭搗鏉ユ垜浠繕鏄渶濂戒互涓涓皬鐨勶紝瀹規槗瀹炵幇騫朵笖楂樺害鍙Щ妞嶇殑鑱斾漢寮忕▼搴忔潵寮濮嬶紝榪欐牱鐨?strong>tb紼嬪簭涔熶笉澶細鏈夌紪紼嬮敊璇傚綊鏍瑰埌搴曪紝鎴戣繖鏈功緇х畫閫夌敤“Hello錛學orld!”銆傝繖涓緥瀛愮殑鍘熷洜鏄紝瀹炵幇榪欎釜紼嬪簭瀹炲湪澶畝鍗曚簡銆傝繖璧風爜鍦ㄨ鑰呯殑紼嬪簭絎竴嬈″氨榪愯涓嶈搗鏉ョ殑鏃跺欙紝浼氬幓鎺変竴涓彲鑳界殑鍘熷洜錛屽嵆錛氶敊璇笉鏄洜涓轟唬鐮侀噷鐨勭己闄鳳細鐩稿弽錛岄棶棰樺嚭鍦ㄥ紑鍙戝伐鍏鋒垨鑰呭垱寤哄彲鎵ц紼嬪簭鐨勮繃紼嬮噷闈€?/p>
宓屼漢寮忕▼搴忓憳鍦ㄥ緢澶х▼搴︿笂蹇呴』瑕佷緷闈犺嚜宸辯殑鍔涢噺鏉ュ伐浣溿傚湪寮濮嬩竴涓柊欏圭洰鐨勬椂鍊欙紝闄や簡浠栨墍鐔熸倝鐨勭紪紼嬭璦鐨勮娉曪紝浠栧繀欏婚鍏堝亣瀹氫粈涔堜笢瑗塊兘娌℃湁榪愯漿璧鋒潵錛岀敋鑷寵繛鏍囧噯搴撻兘娌℃湁錛屽氨鏄被浼紁rintf()鍜宻canf()鐨勯偅浜涚▼搴忓憳甯稿父渚濊禆鐨勮緟鍔╁嚱鏁般傚疄闄呬笂錛屽簱渚嬬▼甯稿父浣滀負緙栫▼璇█鐨勫熀鏈娉曞嚭鐜般傚彲鏄繖閮ㄥ垎鏍囧噯寰堥毦鏀寔鎵鏈夊彲鑳界殑璁$畻騫沖彴錛屽茍涓斿父甯歌宓屽叆寮忕郴緇熺紪璇戝櫒鐨勫埗閫犲晢浠墍蹇界暐銆?/p>
鎵浠ュ湪榪欎竴绔犻噷浣犲疄闄呬笂灝嗘壘涓嶅埌涓涓湡姝g殑”Hello錛學orld!”紼嬪簭錛岀浉鍙嶏紝鎴戜滑鍋囧畾鍦ㄧ涓涓緥瀛愪腑鍙彲浠ヤ嬌鐢ㄦ渶鍩烘湰鐨凜 璇█璇硶銆傞殢鐫鏈功鐨勮繘涓姝ユ繁浜猴紝鎴戜滑浼氶愭鍚戞垜浠殑鎸囦護緋葷粺閲屾坊鍔燙++鐨勮娉曘佹爣鍑嗗簱渚嬬▼鍜屼竴涓瓑鏁堢殑瀛楃杈撳嚭璁懼銆傜劧鍚庯紝鍦ㄧ涔濈珷“緇煎悎鎵瀛︾殑鐭ヨ瘑”閲岄潰銆傛垜浠墠鏈緇堝疄鐜頒竴涓?#8220;Hello錛學orld!”紼嬪簭銆傚埌閭f椂鍊欎綘灝嗛『鍒╁湴璧頒笂鎴愪負涓涓祵鍏ュ紡緋葷粺緙栫▼涓撳鐨勯亾璺?/p>