锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鏂囦歡鐨勬墦寮錛坒open鍑芥暟錛?br />
fopen鍑芥暟鐢ㄦ潵鎵撳紑涓涓枃浠訛紝鍏惰皟鐢ㄧ殑涓鑸艦寮忎負錛氭枃浠舵寚閽堝悕=fopen錛堟枃浠跺悕錛屼嬌鐢ㄦ枃浠舵柟寮忥級錛?鍏朵腑錛?鏂囦歡鎸囬拡鍚?蹇呴』鏄璇存槑涓篎ILE 綾誨瀷鐨勬寚閽堝彉閲忥紱"鏂囦歡鍚?鏄鎵撳紑鏂囦歡鐨勬枃浠跺悕錛?浣跨敤鏂囦歡鏂瑰紡"鏄寚鏂囦歡鐨勭被鍨嬪拰鎿嶄綔瑕佹眰銆?"鏂囦歡鍚?鏄瓧絎︿覆甯擱噺鎴栧瓧絎︿覆鏁扮粍銆?br />
鐩稿叧鍑芥暟 :open,fclose
琛ㄥご鏂囦歡 :#include<stdio.h>
瀹氫箟鍑芥暟 :FILE * fopen錛坈onst char * path,const char * mode錛夛紱
鍑芥暟璇存槑
鍙傛暟path瀛楃涓插寘鍚鎵撳紑鐨勬枃浠惰礬寰勫強鏂囦歡鍚嶏紝鍙傛暟mode瀛楃涓插垯浠h〃鐫嫻佸艦鎬併?br />
mode鏈変笅鍒楀嚑縐嶅艦鎬佸瓧絎︿覆錛?br />
r 鎵撳紑鍙鏂囦歡錛岃鏂囦歡蹇呴』瀛樺湪銆?br />
r+ 鎵撳紑鍙鍐欑殑鏂囦歡錛岃鏂囦歡蹇呴』瀛樺湪銆?br />
w 鎵撳紑鍙啓鏂囦歡錛岃嫢鏂囦歡瀛樺湪鍒欐枃浠墮暱搴︽竻涓?,鍗寵鏂囦歡鍐呭浼氭秷澶便傝嫢鏂囦歡涓嶅瓨鍦ㄥ垯寤虹珛璇ユ枃浠躲?br />
w+ 鎵撳紑鍙鍐欐枃浠訛紝鑻ユ枃浠跺瓨鍦ㄥ垯鏂囦歡闀垮害娓呬負闆訛紝鍗寵鏂囦歡鍐呭浼氭秷澶便傝嫢鏂囦歡涓嶅瓨鍦ㄥ垯寤虹珛璇ユ枃浠躲?br />
a 浠ラ檮鍔犵殑鏂瑰紡鎵撳紑鍙啓鏂囦歡銆傝嫢鏂囦歡涓嶅瓨鍦紝鍒欎細寤虹珛璇ユ枃浠訛紝濡傛灉鏂囦歡瀛樺湪錛屽啓鍏ョ殑鏁版嵁浼氳鍔犲埌鏂囦歡灝撅紝鍗蟲枃浠跺師鍏堢殑鍐呭浼氳淇濈暀銆?br />
a+ 浠ラ檮鍔犳柟寮忔墦寮鍙鍐欑殑鏂囦歡銆傝嫢鏂囦歡涓嶅瓨鍦紝鍒欎細寤虹珛璇ユ枃浠訛紝濡傛灉鏂囦歡瀛樺湪錛屽啓鍏ョ殑鏁版嵁浼氳鍔犲埌鏂囦歡灝懼悗錛屽嵆鏂囦歡鍘熷厛鐨勫唴瀹逛細琚繚鐣欍?br />
涓婅堪鐨勫艦鎬佸瓧絎︿覆閮藉彲浠ュ啀鍔犱竴涓猙瀛楃錛屽rb銆亀+b鎴朼b+絳夌粍鍚堬紝鍔犲叆b 瀛楃鐢ㄦ潵鍛婅瘔鍑芥暟搴撴墦寮鐨勬枃浠朵負浜岃繘鍒舵枃浠訛紝鑰岄潪綰枃瀛楁枃浠躲備笉榪囧湪POSIX緋葷粺錛屽寘鍚獿inux閮戒細蹇界暐璇ュ瓧絎︺傜敱fopen錛堬級鎵寤虹珛鐨勬柊鏂囦歡浼氬叿鏈塖_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH錛?666錛夋潈闄愶紝姝ゆ枃浠舵潈闄愪篃浼氬弬鑰僽mask 鍊箋?br />
榪斿洖鍊?br />
鏂囦歡欏哄埄鎵撳紑鍚庯紝鎸囧悜璇ユ祦鐨勬枃浠舵寚閽堝氨浼氳榪斿洖銆傝嫢鏋滄枃浠舵墦寮澶辮觸鍒欒繑鍥濶ULL,騫舵妸閿欒浠g爜瀛樺湪errno 涓?br />
闄勫姞璇存槑
涓鑸岃█錛屽紑鏂囦歡鍚庝細浣滀竴浜涙枃浠惰鍙栨垨鍐欏叆鐨勫姩浣滐紝鑻ュ紑鏂囦歡澶辮觸錛屾帴涓嬫潵鐨勮鍐欏姩浣滀篃鏃犳硶欏哄埄榪涜錛屾墍浠ュ湪fopen錛堬級鍚庤浣滈敊璇垽鏂強澶勭悊銆?br />
鑼冧緥
#include<stdio.h>
main錛堬級
{
FILE * fp;
fp=fopen錛?noexist","a+"錛夛紱
if錛坒p= =NULL錛?return;
fclose錛坒p錛夛紱
}
]]>
涓銆佺▼搴忕粨鏋勭殑浼樺寲
1銆佽〃杈懼紡
瀵逛簬涓涓〃杈懼紡涓悇縐嶈繍綆楁墽琛岀殑浼樺厛欏哄簭涓嶅お鏄庣‘鎴栧鏄撴販娣嗙殑鍦版柟錛屽簲褰撻噰鐢ㄥ渾鎷彿鏄庣‘鎸囧畾瀹冧滑鐨勪紭鍏堥『搴忋備竴涓〃杈懼紡閫氬父涓嶈兘鍐欏緱澶鏉傦紝濡傛灉琛ㄨ揪寮忓お澶嶆潅錛屾椂闂翠箙浜嗕互鍚庯紝鑷繁涔熶笉瀹規槗鐪嬪緱鎳傦紝涓嶅埄浜庝互鍚庣殑緇存姢銆?br />
2銆佺▼搴忕殑涔﹀啓緇撴瀯
铏界劧涔﹀啓鏍煎紡騫朵笉浼氬獎鍝嶇敓鎴愮殑浠g爜璐ㄩ噺錛屼絾鏄湪瀹為檯緙栧啓紼嬪簭鏃惰繕鏄簲璇ュ皧寰竴瀹氱殑涔﹀啓瑙勫垯錛屼竴涓功鍐欐竻鏅般佹槑浜嗙殑紼嬪簭錛屾湁鍒╀簬浠ュ悗鐨勭淮鎶ゃ傚湪涔﹀啓紼嬪簭鏃訛紝鐗瑰埆鏄浜嶹hile銆乫or銆乨o…while銆乮f…elst銆乻witch…case絳夎鍙ユ垨榪欎簺璇彞宓屽緇勫悎鏃訛紝搴旈噰鐢?緙╂牸"鐨勪功鍐欏艦寮忥紝
3銆佸噺灝戝垽鏂鍙?br />
鑳藉浣跨敤鏉′歡緙栬瘧錛坕fdef錛夌殑鍦版柟灝變嬌鐢ㄦ潯浠剁紪璇戣屼笉浣跨敤if璇彞錛屾湁鍒╀簬鍑忓皯緙栬瘧鐢熸垚鐨勪唬鐮佺殑闀垮害錛岃兘澶熶笉鐢ㄥ垽鏂鍙ュ垯灝戠敤鍒ゆ柇鐢ㄨ鍙ャ?br />
4銆佹爣璇嗙
紼嬪簭涓嬌鐢ㄧ殑鐢ㄦ埛鏍囪瘑絎﹂櫎瑕侀伒寰爣璇嗙鐨勫懡鍚嶈鍒欎互澶栵紝涓鑸笉瑕佺敤浠f暟絎﹀彿錛堝a銆乥銆亁1銆亂1錛変綔涓哄彉閲忓悕錛屽簲閫夊彇鍏鋒湁鐩稿叧鍚箟鐨勮嫳鏂囧崟璇嶏紙鎴栫緝鍐欙級鎴栨眽璇嫾闊充綔涓烘爣璇嗙錛屼互澧炲姞紼嬪簭鐨勫彲璇繪э紝濡傦細count銆乶umber1銆乺ed銆亀ork絳夈?br />
5銆佸畾涔夊父鏁?br />
鍦ㄧ▼搴忓寲璁捐榪囩▼涓紝瀵逛簬緇忓父浣跨敤鐨勪竴浜涘父鏁幫紝濡傛灉灝嗗畠鐩存帴鍐欏埌紼嬪簭涓幓錛屼竴鏃﹀父鏁扮殑鏁板煎彂鐢熷彉鍖栵紝灝卞繀欏婚愪釜鎵懼嚭紼嬪簭涓墍鏈夌殑甯告暟錛屽茍閫愪竴榪涜淇敼錛岃繖鏍峰繀鐒朵細闄嶄綆紼嬪簭鐨勫彲緇存姢鎬с傚洜姝わ紝搴斿敖閲忓綋閲囩敤棰勫鐞嗗懡浠ゆ柟寮忔潵瀹氫箟甯告暟錛岃屼笖榪樺彲浠ラ伩鍏嶈緭鍏ラ敊璇?br />
浜屻佷唬鐮佺殑浼樺寲
1銆佷嬌鐢ㄨ嚜鍔犮佽嚜鍑忔寚浠?br />
閫氬父浣跨敤鑷姞銆佽嚜鍑忔寚浠ゅ拰澶嶅悎璧嬪艱〃杈懼紡錛堝a-=1鍙奱+=1絳夛級閮借兘澶熺敓鎴愰珮璐ㄩ噺鐨勭▼搴忎唬鐮侊紝緙栬瘧鍣ㄩ氬父閮借兘澶熺敓鎴恑nc鍜宒ec涔嬬被鐨勬寚浠わ紝鑰屼嬌鐢╝=a+1鎴朼=a-1涔嬬被鐨勬寚浠わ紝鏈夊緢澶欳緙栬瘧鍣ㄩ兘浼氱敓鎴愪簩鍒頒笁涓瓧鑺傜殑鎸囦護銆傚湪AVR鍗曠墖閫傜敤鐨処CCAVR銆丟CCAVR銆両AR絳塁緙栬瘧鍣ㄤ互涓婂嚑縐嶄功鍐欐柟寮忕敓鎴愮殑浠g爜鏄竴鏍風殑錛屼篃鑳藉鐢熸垚楂樿川閲忕殑inc鍜宒ec涔嬬被鐨勭殑浠g爜銆?br />
2銆佹煡琛?br />
鍦ㄧ▼搴忎腑涓鑸笉榪涜闈炲父澶嶆潅鐨勮繍綆楋紝濡傛誕鐐規暟鐨勪箻闄ゅ強寮鏂圭瓑錛屼互鍙婁竴浜涘鏉傜殑鏁板妯″瀷鐨勬彃琛ヨ繍綆楋紝瀵硅繖浜涘嵆娑堣楁椂闂村張娑堣垂璧勬簮鐨勮繍綆楋紝搴斿敖閲忎嬌鐢ㄦ煡琛ㄧ殑鏂瑰紡錛屽茍涓斿皢鏁版嵁琛ㄧ疆浜庣▼搴忓瓨鍌ㄥ尯銆傚鏋滅洿鎺ョ敓鎴愭墍闇鐨勮〃姣旇緝鍥伴毦錛屼篃灝介噺鍦ㄥ惎鍔ㄦ椂鍏堣綆楋紝鐒跺悗鍦ㄦ暟鎹瓨鍌ㄥ櫒涓敓鎴愭墍闇鐨勮〃錛屽悗浠ュ湪紼嬪簭榪愯鐩存帴鏌ヨ〃灝卞彲浠ヤ簡錛屽噺灝戜簡紼嬪簭鎵ц榪囩▼涓噸澶嶈綆楃殑宸ヤ綔閲忋?br />
3銆佷嬌鐢ㄥ敖閲忓皬鐨勬暟鎹被鍨?br />
鑳藉浣跨敤瀛楃鍨嬶紙char錛夊畾涔夌殑鍙橀噺錛屽氨涓嶈浣跨敤鏁村瀷錛坕nt錛夊彉閲忔潵瀹氫箟錛涜兘澶熶嬌鐢ㄦ暣鍨嬪彉閲忓畾涔夌殑鍙橀噺灝變笉瑕佺敤闀挎暣鍨嬶紙long int錛夛紝鑳戒笉浣跨敤嫻偣鍨嬶紙float錛夊彉閲忓氨涓嶈浣跨敤嫻偣鍨嬪彉閲忋傚綋鐒訛紝鍦ㄥ畾涔夊彉閲忓悗涓嶈瓚呰繃鍙橀噺鐨勪綔鐢ㄨ寖鍥達紝濡傛灉瓚呰繃鍙橀噺鐨勮寖鍥磋祴鍊鹼紝C緙栬瘧鍣ㄥ茍涓嶆姤閿欙紝浣嗙▼搴忚繍琛岀粨鏋滃嵈閿欎簡錛岃屼笖榪欐牱鐨勯敊璇緢闅懼彂鐜般傚湪ICCAVR涓紝鍙互鍦∣ptions涓瀹氫嬌鐢╬rintf鍙傛暟錛屽敖閲忎嬌鐢ㄥ熀鏈瀷鍙傛暟錛?c銆?d銆?x銆?X銆?u鍜?s鏍煎紡璇存槑絎︼級錛屽皯鐢ㄩ暱鏁村瀷鍙傛暟錛?ld銆?lu銆?lx鍜?lX鏍煎紡璇存槑絎︼級錛岃嚦浜庢誕鐐瑰瀷鐨勫弬鏁幫紙%f錛夊垯灝介噺涓嶈浣跨敤錛屽叾瀹僀緙栬瘧鍣ㄤ篃涓鏍楓傚湪鍏跺畠鏉′歡涓嶅彉鐨勬儏鍐典笅錛屼嬌鐢?f鍙傛暟錛屼細浣跨敓鎴愮殑浠g爜鐨勬暟閲忓鍔犲緢澶氾紝鎵ц閫熷害闄嶄綆銆?br />
4銆侀夋嫨鍚堥傜殑綆楁硶鍜屾暟鎹粨鏋?br />
搴旇鐔熸倝綆楁硶璇█錛岀煡閬撳悇縐嶇畻娉曠殑浼樼己鐐癸紝鍏蜂綋璧勬枡璇峰弬瑙佺浉搴旂殑鍙傝冭祫鏂欙紝鏈夊緢澶氳綆楁満涔︾睄涓婇兘鏈変粙緇嶃傚皢姣旇緝鎱㈢殑欏哄簭鏌ユ壘娉曠敤杈冨揩鐨勪簩鍒嗘煡鎵炬垨涔卞簭鏌ユ壘娉曚唬鏇匡紝鎻掑叆鎺掑簭鎴栧啋娉℃帓搴忔硶鐢ㄥ揩閫熸帓搴忋佸悎騫舵帓搴忔垨鏍規帓搴忎唬鏇匡紝閮藉彲浠ュぇ澶ф彁楂樼▼搴忔墽琛岀殑鏁堢巼閫夋嫨涓縐嶅悎閫傜殑鏁版嵁緇撴瀯涔熷緢閲嶈錛屾瘮濡備綘鍦ㄤ竴鍫嗛殢鏈哄瓨鏀劇殑鏁頒腑浣跨敤浜嗗ぇ閲忕殑鎻掑叆鍜屽垹闄ゆ寚浠わ紝閭d嬌鐢ㄩ摼琛ㄨ蹇緱澶氥傛暟緇勪笌鎸囬拡璇彞鍏鋒湁鍗佸垎瀵嗙爜鐨勫叧緋伙紝涓鑸潵璇達紝鎸囬拡姣旇緝鐏墊椿綆媧侊紝鑰屾暟緇勫垯姣旇緝鐩磋錛屽鏄撶悊瑙c傚浜庡ぇ閮ㄥ垎鐨勭紪璇戝櫒錛屼嬌鐢ㄦ寚閽堟瘮浣跨敤鏁扮粍鐢熸垚鐨勪唬鐮佹洿鐭紝鎵ц鏁堢巼鏇撮珮銆備絾鏄湪Keil涓垯鐩稿弽錛屼嬌鐢ㄦ暟緇勬瘮浣跨敤鐨勬寚閽堢敓鎴愮殑浠g爜鏇寸煭銆?img src ="http://m.shnenglu.com/idc/aggbug/176283.html" width = "1" height = "1" />
]]>
void swap1錛坕nt x,int y錛?/p>
{
int temp;
temp=x;
x=y;
y=temp;
}
void swap2錛坕nt *x,int *y錛?/p>
{
int *temp;
temp=x;
x=y;
y=temp;
}
void swap3錛坕nt *x,int *y錛?/p>
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
void swap4錛坕nt a[],int b[]錛?/p>
{
int temp;
temp=a[0];
a[0]=b[0];
b[0]=temp;
}
void swap5錛坕nt a[],int b[]錛?/p>
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
int main錛堬級
{
int x,y;
x=4;
y=3;
swap1錛坸,y錛夛紱
printf錛?swap1: x:%d,y:%d\n",x,y錛夛紱//褰㈠弬浼犲鹼紝涓嶈兘浜ゆ崲錛屽疄闄呬紶榪囧幓鏄嫹璐濈殑涓浠斤紝娌℃敼鍙樹富鍑芥暟涓瓁,y
swap2錛?amp;x,&y錛夛紱
printf錛?swap2: x:%d,y:%d\n",x,y錛夛紱//涓嶈兘浜ゆ崲錛屽嚱鏁頒腑鍙槸鍦板潃浜ゆ崲浜嗕笅錛屽湴鍧鎸囧悜鐨勫唴瀹規病鏈変氦鎹?/p>
swap3錛?amp;x,&y錛夛紱
printf錛?swap3: x:%d,y:%d\n",x,y錛夛紱//鑳戒氦鎹紝鍦板潃鎸囧悜鐨勫唴瀹硅繘琛屼簡浜ゆ崲
swap4錛?amp;x,&y錛夛紱
printf錛?swap4: x:%d,y:%d\n",x,y錛夛紱//鑳戒氦鎹紝鍦板潃鎸囧悜鐨勫唴瀹硅繘琛屼氦鎹?/p>
swap5錛?amp;x,&y錛夛紱
printf錛?swap5: x:%d,y:%d\n",x,y錛夛紱//鑳戒氦鎹紝鍦板潃鎸囧悜鐨勫唴瀹硅繘琛屼氦鎹?/p>
return 0;
}
swap1: x:4,y:3
swap2: x:4,y:3
swap3: x:3,y:4
swap4: x:4,y:3
swap5: x:3,y:4
銆銆鍦ㄤ嬌鐢?Makefile 涔嬪墠錛屽彧闇瀵瑰畠榪涜涓浜涚畝鍗曠殑璁劇疆鍗沖彲錛涜屼笖涓緇忚緗紝鍗充嬌浠ュ悗瀵規簮紼嬪簭鏂囦歡鏈夋墍澧炲噺涓鑸篃涓嶅啀闇瑕佹敼鍔?Makefile.鍥犳錛屽嵆渚挎槸涓涓病鏈夊涔犺繃 Makefile 涔﹀啓瑙勫垯鐨勪漢錛屼篃鍙互涓鴻嚜宸辯殑 C/C++ 紼嬪簭蹇熷緩绔嬩竴涓彲宸ヤ綔鐨?Makefile.
銆銆榪欎釜 Makefile 鍙互鍦?GNU Make 鍜?GCC 緙栬瘧鍣ㄤ笅姝e父宸ヤ綔銆備絾鏄笉鑳戒繚璇佸浜庡叾瀹冪増鏈殑 Make 鍜岀紪璇戝櫒涔熻兘姝e父宸ヤ綔銆?/p>
銆銆濡傛灉浣犲彂鐜頒簡鏈枃涓殑閿欒錛屾垨鑰呭鏈枃鏈変粈涔堟劅鎯蟲垨寤鴻錛屽彲閫氳繃 whyglinux AT hotmail DOT com 閭鍜屼綔鑰呰仈緋匯?/p>
銆銆姝?Makefile 鐨勪嬌鐢ㄦ柟娉曞涓嬶細[list=1][*]紼嬪簭鐩綍鐨勭粍緇囧敖閲忓皢鑷繁鐨勬簮紼嬪簭闆嗕腑鍦ㄤ竴涓洰褰曚腑錛屽茍涓旀妸 Makefile 鍜屾簮紼嬪簭鏀懼湪涓璧鳳紝榪欐牱鐢ㄨ搗鏉ユ瘮杈冩柟渚褲傚綋鐒訛紝涔熷彲浠ュ皢婧愮▼搴忓垎綾誨瓨鏀懼湪涓嶅悓鐨勭洰褰曚腑銆?/p>
銆銆鍦ㄧ▼搴忕洰褰曚腑鍒涘緩涓涓悕涓?Makefile 鐨勬枃鏈枃浠訛紝灝嗗悗闈㈠垪鍑虹殑 Makefile 鐨勫唴瀹瑰鍒跺埌榪欎釜鏂囦歡涓傦紙娉ㄦ剰錛氬湪澶嶅埗鐨勮繃紼嬩腑錛孧akfile 涓悇鍛戒護鍓嶉潰鐨?Tab 瀛楃鏈夊彲鑳借杞崲鎴愯嫢騫蹭釜絀烘牸銆傝繖縐嶆儏鍐典笅闇瑕佹妸 Makefile 鍛戒護鍓嶉潰鐨勮繖浜涚┖鏍兼浛鎹負涓涓?Tab.錛?/p>
銆銆灝嗗綋鍓嶅伐浣滅洰褰曞垏鎹㈠埌 Makefile 鎵鍦ㄧ殑鐩綍銆傜洰鍓嶏紝榪欎釜 Makefile 鍙敮鎸佸湪褰撳墠鐩綍涓殑璋冪敤錛屼笉鏀寔褰撳墠鐩綍鍜?Makefile 鎵鍦ㄧ殑璺緞涓嶆槸鍚屼竴鐩綍鐨勬儏鍐點?/p>
銆銆[*]鎸囧畾鍙墽琛屾枃浠剁▼搴忕紪璇戝拰榪炴帴鎴愬姛鍚庝駭鐢熺殑鍙墽琛屾枃浠跺湪 Makefile 涓殑 PROGRAM 鍙橀噺涓瀹氥傝繖涓欏逛笉鑳戒負絀恒備負鑷繁紼嬪簭鐨勫彲鎵ц鏂囦歡璧蜂竴涓湁鎰忎箟鐨勫悕瀛愬惂銆?/p>
銆銆[*]鎸囧畾婧愮▼搴忚緙栬瘧鐨勬簮紼嬪簭鐢卞叾鎵鍦ㄧ殑璺緞鍜屾枃浠剁殑鎵╁睍鍚嶄袱欏規潵紜畾銆傜敱浜庡ご鏂囦歡鏄氳繃鍖呭惈鏉ヤ嬌鐢ㄧ殑錛屾墍浠ュ湪榪欓噷璇寸殑婧愮▼搴忎笉搴斿寘鍚ご鏂囦歡銆?/p>
銆銆紼嬪簭鎵鍦ㄧ殑璺緞鍦?SRCDIRS 涓瀹氥傚鏋滄簮紼嬪簭鍒嗗竷鍦ㄤ笉鍚岀殑鐩綍涓紝閭d箞闇瑕佸湪 SRCDIRS 涓竴涓鎸囧畾錛屽茍涓旇礬寰勫悕涔嬮棿鐢ㄧ┖鏍煎垎闅斻?/p>
銆銆鍦?SRCEXTS 涓寚瀹氱▼搴忎腑浣跨敤鐨勬枃浠剁被鍨嬨侰/C++ 紼嬪簭鐨勬墿灞曞悕涓鑸湁姣旇緝鍥哄畾鐨勫嚑縐嶅艦寮忥細銆俢銆併侰銆併俢c銆併俢pp銆併侰PP銆併俢++銆併俢p銆佹垨鑰呫俢xx錛堝弬瑙?man gcc錛夈傛墿灞曞悕鍐沖畾浜嗙▼搴忔槸 C 榪樻槸 C++ 紼嬪簭錛氥俢 鏄?C 紼嬪簭錛屽叾瀹冩墿灞曞悕琛ㄧず C++ 紼嬪簭銆備竴鑸浐瀹氫嬌鐢ㄥ叾涓殑涓縐嶆墿灞曞悕鍗沖彲銆備絾鏄篃鏈夊彲鑳介渶瑕佷嬌鐢ㄥ縐嶆墿灞曞悕錛岃繖鍙互鍦?SOURCE_EXT 涓竴涓鎸囧畾錛屽悇涓墿灞曞悕涔嬮棿鐢ㄧ┖鏍煎垎闅斻?/p>
銆銆铏界劧騫朵笉甯哥敤錛屼絾鏄?C 紼嬪簭涔熷彲浠ヨ浣滀負 C++ 紼嬪簭緙栬瘧銆傝繖鍙互閫氳繃鍦?Makefile 涓緗?CC = $錛圕XX錛?鍜?CFLAGS = $錛圕XXFLAGS錛?涓ら」鍗沖彲瀹炵幇銆?/p>
銆銆榪欎釜 Makefile 鏀寔 C銆丆++ 浠ュ強 C/C++ 娣峰悎涓夌緙栬瘧鏂瑰紡錛歔list][*]濡傛灉鍙寚瀹?.c 鎵╁睍鍚嶏紝閭d箞榪欐槸涓涓?C 紼嬪簭錛岀敤 $錛圕C錛?琛ㄧず鐨勭紪璇戝懡浠よ繘琛岀紪璇戝拰榪炴帴銆?/p>
銆銆[*]濡傛灉鎸囧畾鐨勬槸闄?.c 涔嬪鐨勫叾瀹冩墿灞曞悕錛堝 .cc銆併俢pp銆併俢xx 絳夛級錛岄偅涔堣繖鏄竴涓?C++ 紼嬪簭錛岀敤 $錛圕XX錛?榪涜緙栬瘧鍜岃繛鎺ャ?/p>
銆銆[*]濡傛灉鏃㈡寚瀹氫簡 .c錛屽張鎸囧畾浜嗗叾瀹?C++ 鎵╁睍鍚嶏紝閭d箞榪欐槸 C/C++ 娣峰悎紼嬪簭錛屽皢鐢?$錛圕C錛?緙栬瘧鍏朵腑鐨?C 紼嬪簭錛岀敤 $錛圕XX錛?緙栬瘧鍏朵腑鐨?C++ 紼嬪簭錛屾渶鍚庡啀鐢?$錛圕XX錛?榪炴帴紼嬪簭銆?/p>
銆銆[/list]榪欎簺宸ヤ綔閮芥槸 make 鏍規嵁鍦?Makefile 涓彁渚涚殑紼嬪簭鏂囦歡綾誨瀷錛堟墿灞曞悕錛夎嚜鍔ㄥ垽鏂繘琛岀殑錛屼笉闇瑕佺敤鎴峰共棰勩?/p>
銆銆[*]鎸囧畾緙栬瘧閫夐」緙栬瘧閫夐」鐢變笁閮ㄥ垎緇勬垚錛氶澶勭悊閫夐」銆佺紪璇戦夐」浠ュ強榪炴帴閫夐」錛屽垎鍒敱 CPPFLAGS銆丆FLAGS涓嶤XXFLAGS銆丩DFLAGS 鎸囧畾銆?/p>
銆銆CPPFLAGS 閫夐」鍙弬鑰?C 棰勫鐞嗗懡浠?cpp 鐨勮鏄庯紝浣嗘槸娉ㄦ剰涓嶈兘鍖呭惈 -M 浠ュ強鍜?-M 鏈夊叧鐨勯夐」銆傚鏋滄槸 C/C++ 娣峰悎緙栫▼錛屼篃鍙互鍦ㄨ繖閲岃緗?C/C++ 鐨勪竴浜涘叡鍚岀殑緙栬瘧閫夐」銆?/p>
銆銆CFLAGS 鍜?CXXFLAGS 涓や釜鍙橀噺閫氬父鐢ㄦ潵鎸囧畾緙栬瘧閫夐」銆傚墠鑰呬粎浠呯敤浜庢寚瀹?C 紼嬪簭鐨勭紪璇戦夐」錛屽悗鑰呬粎浠呯敤浜庢寚瀹?C++ 紼嬪簭鐨勭紪璇戦夐」銆傚叾瀹炰篃鍙互鍦ㄤ袱涓彉閲忎腑鎸囧畾涓浜涢澶勭悊閫夐」錛堝嵆涓浜涙湰鏉ュ簲璇ユ斁鍦?CPPFLAGS 涓殑閫夐」錛夛紝鍜?CPPFLAGS 騫舵病鏈夋槑紜殑鐣岄檺銆?/p>
銆銆榪炴帴閫夐」鍦?LDFLAGS 涓寚瀹氥傚鏋滃彧浣跨敤 C/C++ 鏍囧噯搴擄紝涓鑸病鏈夊繀瑕佽緗傚鏋滀嬌鐢ㄤ簡闈炴爣鍑嗗簱錛屽簲璇ュ湪榪欓噷鎸囧畾榪炴帴闇瑕佺殑閫夐」錛屽搴撴墍鍦ㄧ殑璺緞銆佸簱鍚嶄互鍙婂叾瀹冭仈鎺ラ夐」銆?/p>
銆銆鐜板湪鐨勫簱涓鑸兘鎻愪緵浜嗕竴涓浉搴旂殑 .pc 鏂囦歡鏉ヨ褰曚嬌鐢ㄥ簱鎵闇瑕佺殑棰勭紪璇戦夐」銆佺紪璇戦夐」鍜岃繛鎺ラ夐」絳変俊鎭紝閫氳繃 pkg-config 鍙互鍔ㄦ佹彁鍙栬繖浜涢夐」銆備笌鐢辯敤鎴鋒樉寮忔寚瀹氬悇涓夐」鐩告瘮錛屼嬌鐢?pkg-config 鏉ヨ闂簱鎻愪緵鐨勯夐」鏇存柟渚褲佹洿鍏烽氱敤鎬с傚湪鍚庨潰鍙互鐪嬪埌涓涓?GTK+ 紼嬪簭鐨勪緥瀛愶紝鍏剁紪璇戝拰榪炴帴閫夐」鐨勬寚瀹氬氨鏄敤 pkg-config 瀹炵幇鐨勩?/p>
銆銆[*]緙栬瘧鍜岃繛鎺ヤ笂闈㈢殑鍚勯」璁劇疆濂戒箣鍚庝繚瀛?Makefile 鏂囦歡銆傛墽琛?make 鍛戒護錛岀▼搴忓氨寮濮嬬紪璇戜簡銆?/p>
銆銆鍛戒護 make 浼氭牴鎹?Makefile 涓緗ソ鐨勮礬寰勫拰鏂囦歡綾誨瀷鎼滅儲婧愮▼搴忔枃浠訛紝鐒跺悗鏍規嵁鏂囦歡鐨勭被鍨嬭皟鐢ㄧ浉搴旂殑緙栬瘧鍛戒護銆佷嬌鐢ㄧ浉搴旂殑緙栬瘧閫夐」瀵圭▼搴忚繘琛岀紪璇戙?/p>
銆銆緙栬瘧鎴愬姛涔嬪悗紼嬪簭鐨勮繛鎺ヤ細鑷姩榪涜銆傚鏋滄病鏈夐敊璇殑璇濇渶緇堜細浜х敓紼嬪簭鐨勫彲鎵ц鏂囦歡銆?/p>
銆銆娉ㄦ剰錛氬湪瀵圭▼搴忕紪璇戜箣鍚庯紝浼氫駭鐢熷拰婧愮▼搴忔枃浠朵竴涓瀵瑰簲鐨?.d 鏂囦歡銆傝繖鏄〃紺轟緷璧栧叧緋葷殑鏂囦歡錛岄氳繃瀹冧滑 make 鍐沖畾鍦ㄦ簮紼嬪簭鏂囦歡鍙樺姩涔嬪悗瑕佽繘琛屽摢浜涙洿鏂般備負姣忎竴涓簮紼嬪簭鏂囦歡寤虹珛鐩稿簲鐨?.d 鏂囦歡榪欎篃鏄?GNU Make 鎺ㄨ崘鐨勬柟寮忋?/p>
銆銆[*]Makefile 鐩爣錛圱argets錛?/p>
銆銆涓嬮潰鏄叧浜庤繖涓?Makefile 鎻愪緵鐨勭洰鏍囦互鍙婂畠鎵瀹屾垚鐨勫姛鑳斤細[list][*]make緙栬瘧鍜岃繛鎺ョ▼搴忋傜浉褰撲簬 make all. [*]make objs浠呬粎緙栬瘧紼嬪簭浜х敓 .o 鐩爣鏂囦歡錛屼笉榪涜榪炴帴錛堜竴鑸緢灝戝崟鐙嬌鐢級銆?/p>
銆銆[*]make clean鍒犻櫎緙栬瘧浜х敓鐨勭洰鏍囨枃浠跺拰渚濊禆鏂囦歡銆?/p>
銆銆[*]make cleanall鍒犻櫎鐩爣鏂囦歡銆佷緷璧栨枃浠朵互鍙婂彲鎵ц鏂囦歡銆?/p>
銆銆[*]make rebuild閲嶆柊緙栬瘧鍜岃繛鎺ョ▼搴忋傜浉褰撲簬 make clean && make all. [/list][/list]鍏充簬榪欎釜 Makefile 鐨勫疄鐜板師鐞嗕笉鍑嗗璇︾粏瑙i噴浜嗐傚鏋滄湁鍏磋叮鐨勮瘽錛屽彲鍙傝冩枃鏈垪鍑虹殑“鍙傝冭祫鏂?#8221;銆?/p>
銆銆Makefile 鐨勫唴瀹瑰涓嬶細############################################################################### # # Generic Makefile for C/C++ Program # # Author錛?whyglinux 錛坵hyglinux AT hotmail DOT com錛?# Date錛?nbsp; 2006/03/04 # Description錛?# The makefile searches in <SRCDIRS> directories for the source files # with extensions specified in <SOURCE_EXT>錛?then compiles the sources # and finally produces the <PROGRAM>錛?the executable file錛?by linking # the objectives. # Usage錛?# $ make compile and link the program. # $ make objs compile only 錛坣o linking. Rarely used錛夈?# $ make clean clean the objectives and dependencies. # $ make cleanall clean the objectives錛?dependencies and executable. # $ make rebuild rebuild the program. The same as make clean && make all. #============================================================================== ## Customizing Section錛?adjust the following if necessary. ##============================================================================= # The executable file name. # It must be specified. # PROGRAM 錛? a.out # the executable name PROGRAM 錛? # The directories in which source files reside. # At least one path should be specified. # SRCDIRS 錛? . # current directory SRCDIRS 錛? # The source file types 錛坔eaders excluded錛夈?# At least one type should be specified. # The valid suffixes are among of .c錛?.C錛?.cc錛?.cpp錛?.CPP錛?.c++錛?.cp錛?or .cxx. # SRCEXTS 錛? .c # C program # SRCEXTS 錛? .cpp # C++ program # SRCEXTS 錛? .c .cpp # C/C++ program SRCEXTS 錛? # The flags used by the cpp 錛坢an cpp for more錛夈?# CPPFLAGS 錛? -Wall -Werror # show all warnings and take them as errors CPPFLAGS 錛? # The compiling flags used only for C. # If it is a C++ program錛?no need to set these flags. # If it is a C and C++ merging program錛?set these flags for the C parts. CFLAGS 錛? CFLAGS += # The compiling flags used only for C++. # If it is a C program錛?no need to set these flags. # If it is a C and C++ merging program錛?set these flags for the C++ parts. CXXFLAGS 錛? CXXFLAGS += # The library and the link options 錛?C and C++ common錛夈?LDFLAGS 錛? LDFLAGS += ## Implict Section錛?change the following only when necessary. ##============================================================================= # The C program compiler. Uncomment it to specify yours explicitly. #CC = gcc # The C++ program compiler. Uncomment it to specify yours explicitly. #CXX = g++ # Uncomment the 2 lines to compile C programs as C++ ones. #CC = $錛圕XX錛?#CFLAGS = $錛圕XXFLAGS錛?# The command used to delete file. #RM = rm -f ## Stable Section錛?usually no need to be changed. But you can add more. ##============================================================================= SHELL = /bin/sh SOURCES = $錛坒oreach d錛?錛圫RCDIRS錛夛紝$錛坵ildcard $錛坅ddprefix $錛坉錛?*錛?錛圫RCEXTS錛夛級錛夛級 OBJS = $錛坒oreach x錛?錛圫RCEXTS錛夛紝 \ $錛坧atsubst %$錛坸錛夛紝%.o錛?錛坒ilter %$錛坸錛夛紝$錛圫OURCES錛夛級錛夛級 DEPS = $錛坧atsubst %.o錛?.d錛?錛圤BJS錛夛級 .PHONY 錛?all objs clean cleanall rebuild all 錛?$錛圥ROGRAM錛?# Rules for creating the dependency files 錛堛俤錛夈?#—— %.d 錛?%.c @$錛圕C錛?-MM -MD $錛圕FLAGS錛?$< %.d 錛?%.C @$錛圕C錛?-MM -MD $錛圕XXFLAGS錛?$< %.d 錛?%.cc @$錛圕C錛?-MM -MD $錛圕XXFLAGS錛?$< %.d 錛?%.cpp @$錛圕C錛?-MM -MD $錛圕XXFLAGS錛?$< %.d 錛?%.CPP @$錛圕C錛?-MM -MD $錛圕XXFLAGS錛?$< %.d 錛?%.c++ @$錛圕C錛?-MM -MD $錛圕XXFLAGS錛?$< %.d 錛?%.cp @$錛圕C錛?-MM -MD $錛圕XXFLAGS錛?$< %.d 錛?%.cxx @$錛圕C錛?-MM -MD $錛圕XXFLAGS錛?$< # Rules for producing the objects. #—— objs 錛?$錛圤BJS錛?%.o 錛?%.c $錛圕C錛?-c $錛圕PPFLAGS錛?$錛圕FLAGS錛?$< %.o 錛?%.C $錛圕XX錛?-c $錛圕PPFLAGS錛?$錛圕XXFLAGS錛?$< %.o 錛?%.cc $錛圕XX錛?-c $錛圕PPFLAGS錛?$錛圕XXFLAGS錛?$< %.o 錛?%.cpp $錛圕XX錛?-c $錛圕PPFLAGS錛?$錛圕XXFLAGS錛?$< %.o 錛?%.CPP $錛圕XX錛?-c $錛圕PPFLAGS錛?$錛圕XXFLAGS錛?$< %.o 錛?%.c++ $錛圕XX -c $錛圕PPFLAGS錛?$錛圕XXFLAGS錛?$< %.o 錛?%.cp $錛圕XX錛?-c $錛圕PPFLAGS錛?$錛圕XXFLAGS錛?$< %.o 錛?%.cxx $錛圕XX錛?-c $錛圕PPFLAGS錛?$錛圕XXFLAGS錛?$< # Rules for producing the executable. #—— $錛圥ROGRAM錛?錛?$錛圤BJS錛?ifeq 錛?錛坰trip $錛圫RCEXTS錛夛級錛?.c錛?nbsp; # C file $錛圕C錛?-o $錛圥ROGRAM錛?$錛圤BJS錛?$錛圠DFLAGS錛?else # C++ file $錛圕XX錛?-o $錛圥ROGRAM錛?$錛圤BJS錛?$錛圠DFLAGS錛?endif -include $錛圖EPS錛?rebuild錛?clean all clean 錛?@$錛圧M錛?*.o *.d cleanall錛?clean @$錛圧M錛?$錛圥ROGRAM錛?$錛圥ROGRAM錛夈俥xe ### End of the Makefile ## Suggestions are welcome ## All rights reserved ### ###############################################################################
銆銆涓嬮潰鎻愪緵涓や釜渚嬪瓙鏉ュ叿浣撹鏄庝笂闈?Makefile 鐨勭敤娉曘?/p>
銆銆[color=darkred]渚嬩竴銆Hello World 紼嬪簭[/color]
銆銆榪欎釜紼嬪簭鐨勫姛鑳芥槸杈撳嚭 Hello錛?world錛?榪欐牱涓琛屾枃瀛椼傜敱 hello.h銆乭ello.c銆乵ain.cxx 涓変釜鏂囦歡緇勬垚銆傚墠涓や釜鏂囦歡鏄?C 紼嬪簭錛屽悗涓涓槸 C++ 紼嬪簭錛屽洜姝よ繖鏄竴涓?C 鍜?C++ 娣風紪紼嬪簭銆?/p>
銆銆/* File name錛?hello.h * C header file */ #ifndef HELLO_H #define HELLO_H #ifdef __cplusplus extern "C" { #endif void print_hello錛堬級錛?#ifdef __cplusplus } #endif #endif
銆銆/* File name錛?hello.c * C source file. */ #include "hello.h" #include <stdio.h> void print_hello錛堬級 { puts錛?"Hello錛?world錛? 錛夛紱 }
銆銆/* File name錛?main.cxx * C++ source file. */ #include "hello.h" int main錛堬級 { print_hello錛堬級錛?nbsp; return 0錛?}
銆銆寤虹珛涓涓柊鐨勭洰褰曪紝鐒跺悗鎶婅繖涓変釜鏂囦歡鎷瘋礉鍒扮洰褰曚腑錛屼篃鎶?Makefile 鏂囦歡鎷瘋礉鍒扮洰褰曚腑銆備箣鍚庯紝瀵?Makefile 鐨勭浉鍏抽」鐩繘琛屽涓嬭緗細PROGRAM 錛? hello # 璁劇疆榪愯紼嬪簭鍚?SRCDIRS 錛? . # 婧愮▼搴忎綅浜庡綋鍓嶇洰褰曚笅 SRCEXTS 錛? .c .cxx # 婧愮▼搴忔枃浠舵湁 .c 鍜?.cxx 涓ょ綾誨瀷 CFLAGS 錛? -g # 涓?C 鐩爣紼嬪簭鍖呭惈 GDB 鍙敤鐨勮皟璇曚俊鎭?CXXFLAGS 錛? -g # 涓?C++ 鐩爣紼嬪簭鍖呭惈 GDB 鍙敤鐨勮皟璇曚俊鎭?/p>
銆銆鐢變簬榪欎釜綆鍗曠殑紼嬪簭鍙嬌鐢ㄤ簡 C 鏍囧噯搴撶殑鍑芥暟錛坧uts錛夛紝鎵浠ュ浜?CFLAGS 鍜?CXXFLAGS 娌℃湁榪囧鐨勮姹傦紝LDFLAGS 鍜?CPPFLAGS 閫夐」涔熸棤闇璁劇疆銆?/p>
銆銆緇忚繃涓婇潰鐨勮緗箣鍚庯紝鎵ц make 鍛戒護灝卞彲浠ョ紪璇戠▼搴忎簡銆傚鏋滄病鏈夐敊璇嚭鐜扮殑璇濓紝銆?hello 灝卞彲浠ヨ繍琛岀▼搴忎簡銆?/p>
銆銆濡傛灉淇敼浜嗘簮紼嬪簭鐨勮瘽錛屽彲浠ョ湅鍒板彧鏈夊拰淇敼鏈夊叧鐨勬簮鏂囦歡琚紪璇戙備篃鍙互鍐嶄負紼嬪簭娣誨姞鏂扮殑婧愭枃浠訛紝鍙瀹冧滑鐨勬墿灞曞悕鏄凡緇忓湪 Makefile 涓緗繃鐨勶紝閭d箞灝辨病鏈夊繀瑕佷慨鏀廣Makefile.
銆銆[color=darkred]渚嬩簩銆GTK+ 鐗?Hello World 紼嬪簭[/color]
銆銆榪欎釜 GTK+ 2.0 鐗堢殑 Hello World 紼嬪簭鍙互浠庝笅闈㈢殑緗戝潃涓婂緱鍒幫細http://www.gtk.org/tutorial/c58.html#SEC-HELLOWORLD.褰撶劧錛岃緙栬瘧 GTK+ 紼嬪簭錛岃繕闇瑕佷綘鐨勭郴緇熶笂宸茬粡瀹夎濂戒簡 GTK+.
銆銆璺熺涓涓緥瀛愪竴鏍鳳紝鍗曠嫭鍒涘緩涓涓柊鐨勭洰褰曪紝鎶婁笂闈㈢綉欏典腑鎻愪緵鐨勭▼搴忎繚瀛樹負 main.c 鏂囦歡銆傚 Makefile 鍋氬涓嬭緗細PROGRAM 錛? hello # 璁劇疆榪愯紼嬪簭鍚?SRCDIRS 錛? . # 婧愮▼搴忎綅浜庡綋鍓嶇洰褰曚笅 SRCEXTS 錛? .c # 婧愮▼搴忔枃浠跺彧鏈?.c 涓縐嶇被鍨?CFLAGS 錛? `pkg-config ——cflags gtk+-2.0` # CFLAGS LDFLAGS 錛? `pkg-config ——libs gtk+-2.0` # LDFLAGS
銆銆榪欐槸涓涓?C 紼嬪簭錛屾墍浠?CXXFLAGS 娌℃湁蹇呰璁劇疆——鍗充嬌琚緗簡涔熶笉浼氳浣跨敤銆?/p>
銆銆緙栬瘧鍜岃繛鎺?GTK+ 搴撴墍闇瑕佺殑 CFLAGS 鍜?LDFLAGS 鐢?pkg-config 紼嬪簭鑷姩浜х敓銆?/p>
銆銆鐜板湪灝卞彲浠ヨ繍琛?make 鍛戒護緙栬瘧銆併?hello 鎵ц榪欎釜 GTK+ 紼嬪簭浜嗐?/p>
class <媧劇敓綾誨悕>:<緇ф壙鏂瑰紡1><鍩虹被鍚?>,<緇ф壙鏂瑰紡2><鍩虹被鍚?>,…
{
<媧劇敓綾葷被浣?gt;
};
鍏朵腑錛?lt;緇ф壙鏂瑰紡1>,<緇ф壙鏂瑰紡2>,…鏄笁縐嶇戶鎵挎柟寮忥細public銆乸rivate銆乸rotected涔嬩竴銆備緥濡傦細
class A
{
…
};
class B
{
…
};
class C : public A, public B
{
…
};
鍏朵腑錛屾淳鐢熺被C鍏鋒湁涓や釜鍩虹被錛堢被A鍜岀被B錛夛紝鍥犳錛岀被C鏄緇ф壙鐨勩傛寜鐓х戶鎵跨殑瑙勫畾錛屾淳鐢熺被C鐨勬垚鍛樺寘鍚簡鍩虹被A, B涓垚鍛樹互鍙婅綾繪湰韜殑鎴愬憳銆?/p>
澶氱戶鎵跨殑鏋勯犲嚱鏁?/p>
鍦ㄥ緇ф壙鐨勬儏鍐典笅錛屾淳鐢熺被鐨勬瀯閫犲嚱鏁版牸寮忓涓嬶細
<媧劇敓綾誨悕>錛?lt;鎬誨弬鏁拌〃>錛夛細<鍩虹被鍚?>錛?lt;鍙傛暟琛?>錛夛紝<鍩虹被鍚?>錛?lt;鍙傛暟琛?>錛夛紝…
<瀛愬璞″悕>錛?lt;鍙傛暟琛╪+1>錛夛紝…
{
<媧劇敓綾繪瀯閫犲嚱鏁頒綋>
}
鍏朵腑錛?lt;鎬誨弬鏁拌〃>涓悇涓弬鏁板寘鍚簡鍏跺悗鐨勫悇涓垎鍙傛暟琛ㄣ?/p>
澶氱戶鎵夸笅媧劇敓綾葷殑鏋勯犲嚱鏁頒笌鍗曠戶鎵夸笅媧劇敓綾繪瀯閫犲嚱鏁扮浉浼鹼紝瀹冨繀欏誨悓鏃惰礋璐h媧劇敓綾繪墍鏈夊熀綾繪瀯閫犲嚱鏁扮殑璋冪敤銆傚悓鏃訛紝媧劇敓綾葷殑鍙傛暟涓暟蹇呴』鍖呭惈瀹屾垚鎵鏈夊熀綾誨垵濮嬪寲鎵闇鐨勫弬鏁頒釜鏁般?/p>
媧劇敓綾繪瀯閫犲嚱鏁版墽琛岄『搴忔槸鍏堟墽琛屾墍灞炲熀綾葷殑鏋勯犲嚱鏁幫紝鍐嶆墽琛屾淳鐢熺被鏈韓鏋勯犲嚱鏁幫紝澶勪簬鍚屼竴灞傛鐨勫悇鍩虹被鏋勯犲嚱鏁扮殑鎵ц欏哄簭鍙栧喅浜庡畾涔夋淳鐢熺被鏃舵墍鎸囧畾鐨勫悇鍩虹被欏哄簭錛屼笌媧劇敓綾繪瀯閫犲嚱鏁頒腑鎵瀹氫箟鐨勬垚鍛樺垵濮嬪寲鍒楄〃鐨勫悇欏歸『搴忔棤鍏熾備篃灝辨槸璇達紝鎵ц鍩虹被鏋勯犲嚱鏁扮殑欏哄簭鍙栧喅浜庡畾涔夋淳鐢熺被鏃跺熀綾葷殑欏哄簭銆傚彲瑙侊紝媧劇敓綾繪瀯閫犲嚱鏁扮殑鎴愬憳鍒濆鍖栧垪琛ㄤ腑鍚勯」欏哄簭鍙互浠繪剰鍦版帓鍒椼?/p>
涓嬮潰閫氳繃涓涓緥瀛愭潵璇存槑媧劇敓綾繪瀯閫犲嚱鏁扮殑鏋勬垚鍙婂叾鎵ц欏哄簭銆?/p>
#include <iostream.h>
class B1
{
public:
B1錛坕nt i錛?/p>
{
b1 = i;
cout銆?鏋勯犲嚱鏁?B1."銆奿銆?endl;
}
void print錛堬級
{
cout銆?B1.print錛堬級"銆奲1銆奺ndl;
}
private:
int b1;
};
class B2
{
public:
B2錛坕nt i錛?/p>
{
b2 = i;
cout銆?鏋勯犲嚱鏁?B2."銆奿銆?endl;
}
void print錛堬級
{
cout銆?B2.print錛堬級"銆奲2銆奺ndl;
}
private:
int b2;
};
class B3
{
public:
B3錛坕nt i錛?/p>
{
b3 = i;
cout銆?鏋勯犲嚱鏁?B3."銆奿銆奺ndl;
}
int getb3錛堬級
{
return b3;
}
private:
int b3;
};
class A : public B2, public B1
{
public:
A錛坕nt i, int j, int k, int l錛夛細B1錛坕錛夛紝 B2錛坖錛夛紝 bb錛坘錛?/p>
{
a = l;
cout銆?鏋勯犲嚱鏁?A."銆奱銆奺ndl;
}
void print錛堬級
{
B1::print錛堬級錛?/p>
B2::print錛堬級錛?/p>
cout銆?A.print錛堬級"銆奱銆?,"銆奲b.getb3錛堬級銆奺ndl;
}
private:
int a;
B3 bb;
};
void main錛堬級
{
A aa錛?, 2, 3, 4錛夛紱
aa.print錛堬級錛?/p>
}
鏋勯犲嚱鏁?B2.2
鏋勯犲嚱鏁?B1.1
鏋勯犲嚱鏁?B3.3
鏋勯犲嚱鏁?A.4
B1.print錛堬級銆?
B2.print錛堬級2
A.print錛堬級4, 3
鍦ㄨ紼嬪簭涓紝浣滅敤鍩熻繍綆楃錛氾細鐢ㄤ簬瑙e喅浣滅敤鍩熷啿紿佺殑闂銆傚湪媧劇敓綾籄涓殑print錛堬級鍑芥暟鐨勫畾涔変腑錛屼嬌鐢ㄤ簡B1::print;鍜孊2::print錛堬級錛涜鍙ュ垎鍒寚鏄庤皟鐢ㄥ摢涓涓被涓殑print錛堬級鍑芥暟錛岃繖縐嶇敤娉曞簲璇ュ浼氥?/p>
浜屼箟鎬ч棶棰?/p>
涓鑸鏉ワ紝鍦ㄦ淳鐢熺被涓鍩虹被鎴愬憳鐨勮闂簲璇ユ槸鍞竴鐨勶紝浣嗘槸錛岀敱浜庡緇ф壙鎯呭喌涓嬶紝鍙兘閫犳垚瀵瑰熀綾諱腑鏌愭垚鍛樼殑璁塊棶鍑虹幇浜嗕笉鍞竴鐨勬儏鍐碉紝鍒欑О涓哄鍩虹被鎴愬憳璁塊棶鐨勪簩涔夋ч棶棰樸?/p>
瀹為檯涓婏紝鍦ㄤ笂渚嬪凡緇忓嚭鐜拌繃榪欎竴闂錛屽洖蹇嗕竴涓嬩笂渚嬩腑錛屾淳鐢熺被A鐨勪袱鍩虹被B1鍜孊2涓兘鏈変竴涓垚鍛樺嚱鏁皃rint錛堬級銆傚鏋滃湪媧劇敓綾諱腑璁塊棶 print錛堬級鍑芥暟錛屽埌搴曟槸鍝竴涓熀綾葷殑鍛紵浜庢槸鍑虹幇浜嗕簩涔夋с備絾鏄湪涓婁緥涓В鍐充簡榪欎釜闂錛屽叾鍔炴硶鏄氳繃浣滅敤鍩熻繍綆楃錛氾細榪涜浜嗛檺瀹氥傚鏋滀笉鍔犱互闄愬畾錛屽垯浼氬嚭鐜頒簩涔夋ч棶棰樸?/p>
涓嬮潰鍐嶄婦涓涓畝鍗曠殑渚嬪瓙錛屽浜屼箟鎬ч棶棰樿繘琛屾繁鍏ヨ璁恒備緥濡傦細
class A
{
public:
void f錛堬級錛?/p>
};
class B
{
public:
void f錛堬級錛?/p>
void g錛堬級錛?/p>
};
class C : public A, public B
{
public:
void g錛堬級錛?/p>
void h錛堬級錛?/p>
};
濡傛灉瀹氫箟涓涓被C鐨勫璞1:
C c1;
鍒欏鍑芥暟f錛堬級鐨勮闂?/p>
c1.f錛堬級錛?/p>
渚垮叿鏈変簩涔夋э細鏄闂被A涓殑f錛堬級錛岃繕鏄闂被B涓殑f錛堬級鍛紵
瑙e喅鐨勬柟娉曞彲鐢ㄥ墠闈㈢敤榪囩殑鎴愬憳鍚嶉檺瀹氭硶鏉ユ秷闄や簩涔夋э紝渚嬪錛?/p>
c1.A::f錛堬級錛?/p>
鎴栬?/p>
c1.B::f錛堬級錛?/p>
浣嗘槸錛屾渶濂界殑瑙e喅鍔炴硶鏄湪綾籆涓畾涔変竴涓悓鍚嶆垚鍛榝錛堬級錛岀被C涓殑f錛堬級鍐嶆牴鎹渶瑕佹潵鍐沖畾璋冪敤A::f錛堬級錛岃繕鏄疊::f錛堬級錛岃繕鏄袱鑰呯殕鏈夛紝榪欐牱錛宑1.f錛堬級灝嗚皟鐢–::f錛堬級銆?/p>
鍚屾牱鍦幫紝綾籆涓垚鍛樺嚱鏁拌皟鐢╢錛堬級涔熶細鍑虹幇浜屼箟鎬ч棶棰樸備緥濡傦細
viod C::h錛堬級
{
f錛堬級錛?/p>
}
榪欓噷鏈変簩涔夋ч棶棰橈紝璇ュ嚱鏁板簲淇敼涓猴細
void C::h錛堬級
{
A::f錛堬級錛?/p>
}
鎴栬?/p>
void C::h錛堬級
{
B::f錛堬級錛?/p>
}
鎴栬?/p>
void C::f錛堬級
{
A::f錛堬級錛?/p>
B::f錛堬級錛?/p>
}
鍙﹀錛屽湪鍓嶄緥涓紝綾籅涓湁涓涓垚鍛樺嚱鏁癵錛堬級錛岀被C涓篃鏈変竴涓垚鍛樺嚱鏁癵錛堬級銆傝繖鏃訛紝
c1.g錛堬級錛?/p>
涓嶅瓨鍦ㄤ簩涔夋э紝瀹冩槸鎸嘋::g錛堬級錛岃屼笉鏄寚B::g錛堬級銆傚洜涓鴻繖涓や釜g錛堬級鍑芥暟錛屼竴涓嚭鐜板湪鍩虹被B錛屼竴涓嚭鐜板湪媧劇敓綾籆錛岃瀹氭淳鐢熺被鐨勬垚鍛樺皢鏀厤鍩虹被涓殑鍚屽悕鎴愬憳銆傚洜姝わ紝涓婁緥涓被C涓殑g錛堬級鏀厤綾籅涓殑g錛堬級錛屼笉瀛樺湪浜屼箟鎬э紝鍙夋嫨鏀厤鑰呯殑閭d釜鍚嶅瓧銆?/p>
褰撲竴涓淳鐢熺被浠庡涓熀綾繪淳鐢熺被錛岃岃繖浜涘熀綾誨張鏈変竴涓叡鍚岀殑鍩虹被錛屽垯瀵硅鍩虹被涓鏄庣殑鎴愬憳榪涜璁塊棶鏃訛紝涔熷彲鑳戒細鍑虹幇浜屼箟鎬с備緥濡傦細
class A
{
public:
int a;
};
class B1 : public A
{
private:
int b1;
};
class B2 : public A
{
private:
int b2;
};
class C : public B1, public B2
{
public:
int f錛堬級錛?/p>
private:
int c;
};
宸茬煡錛欳 c1;
涓嬮潰鐨勪袱涓闂兘鏈変簩涔夋э細
c1.a;
c1.A::a;
鑰屼笅闈㈢殑涓や釜璁塊棶鏄紜殑錛?/p>
c1.B1::a;
c1.B2::a;
綾籆鐨勬垚鍛樺嚱鏁癴錛堬級鐢ㄥ涓嬪畾涔夊彲浠ユ秷闄や簩涔夋э細
int C::f錛堬級
{
retrun B1::a + B2::a;
}
鐢變簬浜屼箟鎬х殑鍘熷洜錛屼竴涓被涓嶅彲浠ヤ粠鍚屼竴涓被涓洿鎺ョ戶鎵夸竴嬈′互涓婏紝渚嬪錛?/p>
class A : public B, public B
{
…
}
榪欐槸閿欒鐨勩?/p>
浣嶆緇撴瀯涔熸槸涓縐嶇粨鏋勪綋綾誨瀷錛屽彧涓嶈繃鍏朵腑鍚湁浠ヤ綅涓哄崟浣嶅畾涔夊瓨鍌ㄩ暱搴︾殑鏁存暟綾誨瀷浣嶆鎴愬憳銆傞噰鐢ㄤ綅孌電粨鏋勬棦鑺傜渷瀛樺偍絀洪棿錛屽張鍙柟渚挎搷浣溿?/p>
浣嶆緇撴瀯涓綅孌電殑瀹氫箟鏍煎紡涓猴細
unsigned <鎴愬憳鍚?gt;:<浜岃繘鍒朵綅鏁?gt;
渚嬪錛?/p>
struct bytedata
{unsigned a:2; /*浣嶆a錛屽崰2浣?/
unsigned:6; /*鏃犲悕浣嶆錛屽崰6浣嶏紝浣嗕笉鑳借闂?/
unsigned:0; /*鏃犲悕浣嶆錛屽崰0浣嶏紝琛ㄤ笅涓浣嶆浠庝笅涓瀛楄竟鐣屽紑濮?/
unsigned b:10; /*浣嶆b錛屽崰10浣?/
int i; /*鎴愬憳i錛屼粠涓嬩竴瀛楄竟鐣屽紑濮?/
}data;
浣嶆鏁版嵁鐨勫紩鐢細
鍚岀粨鏋勪綋鎴愬憳涓殑鏁版嵁寮曠敤涓鏍鳳紝浣嗗簲娉ㄦ剰浣嶆鐨勬渶澶у彇鍊艱寖鍥翠笉瑕佽秴鍑轟簩榪涘埗浣嶆暟瀹氱殑鑼冨洿錛屽惁鍒欒秴鍑洪儴鍒嗕細涓㈠純銆?/p>
渚嬪錛歞ata.a=2; 浣?nbsp; data.a=10;灝辮秴鍑鴻寖鍥達紙a鍗?浣嶏紝鏈澶?錛?/p>
鍏充簬浣嶆鏁版嵁錛屾敞鎰忎互涓嬪嚑鐐癸細
錛?錛変竴涓綅孌靛繀欏誨瓨鍌ㄥ湪鍚屼竴瀛樺偍鍗曞厓錛堝嵆瀛楋級涔嬩腑錛屼笉鑳借法涓や釜鍗曞厓銆傚鏋滃叾鍗曞厓絀洪棿涓嶅錛屽垯鍓╀綑絀洪棿涓嶇敤錛屼粠涓嬩竴涓崟鍏冭搗瀛樻斁璇ヤ綅孌點?/p>
錛?錛夊彲浠ラ氳繃瀹氫箟闀垮害涓?鐨勪綅孌電殑鏂瑰紡浣夸笅涓浣嶆浠庝笅涓瀛樺偍鍗曞厓寮濮嬨?/p>
錛?錛夊彲浠ュ畾涔夋棤鍚嶄綅孌點?/p>
錛?錛変綅孌電殑闀垮害涓嶈兘澶т簬瀛樺偍鍗曞厓鐨勯暱搴︺?/p>
錛?錛変綅孌墊棤鍦板潃錛屼笉鑳藉浣嶆榪涜鍙栧湴鍧榪愮畻銆?/p>
錛?錛変綅孌靛彲浠ヤ互%d錛?o錛?x鏍煎紡杈撳嚭銆?/p>
錛?錛変綅孌佃嫢鍑虹幇鍦ㄨ〃杈懼紡涓紝灝嗚緋葷粺鑷姩杞崲鎴愭暣鏁般?/p>
-------------------------------------------------------
C璇█涓敤緇撴瀯瀹炵幇浣嶆錛嶏紞涓漢蹇冭錛佸煎緱涓鐪嬪摝錛丆璇█涓殑緇撴瀯鏄湁瀹炵幇浣嶆鐨勮兘鍔涚殑錛屽櫌錛佷綘闂畠鍒板簳鏄粈涔堝艦寮忔槸鍚э紵榪欎釜闂鍛嗕細緇欎綘絳旀銆傝鎴戜滑鍏堢湅鐪嬩綅孌電殑浣滅敤錛氫綅孌墊槸鍦ㄥ瓧孌電殑澹版槑鍚庨潰鍔犱竴涓啋鍙蜂互鍙婁竴涓〃紺哄瓧孌典綅闀跨殑鏁存暟鏉ュ疄鐜扮殑銆傝繖縐嶇敤娉曞張琚氨鍙綔“娣卞叆閫昏緫鍏冧歡鐨勭紪紼?#8221;錛屽鏋滀綘瀵圭郴緇熺紪紼嬫劅鍏磋叮錛岄偅涔堣繖綃囨枃绔犱綘灝變笉搴旇閿欒繃錛?/p>
鎴戞妸浣跨敤浣嶆鐨勫嚑涓悊鐢卞憡璇夊ぇ瀹訛細1銆佸畠鑳芥妸闀垮害涓哄鏁扮殑鏁版嵁鍖呰鍦ㄤ竴璧鳳紝浠庤岃妭鐪佸瓨鍌ㄧ殑絀洪棿錛?銆佸畠鍙互寰堟柟渚垮湴璁塊棶涓涓暣鍨嬪肩殑閮ㄥ垎鍐呭銆?/p>
棣栧厛鎴戣鎻愰啋澶у娉ㄦ剰鍑犵偣錛?銆佷綅孌墊垚鍛樺彧鏈変笁縐嶇被鍨嬶細int ,unsigned int 鍜宻igned int榪欎笁縐嶏紙褰撶劧浜嗭紝int鍨嬩綅孌墊槸涓嶆槸鍙互鍙栬礋鏁頒笉鏄垜璇翠簡綆楃殑錛屽洜涓鴻繖鏄拰浣犵殑緙栬瘧鍣ㄦ潵鍐沖畾鐨勩備綅孌碉紝浣嶆錛屽畠鏄敤鏉ヨ〃紺哄瓧孌典綅闀匡紙bit錛夌殑錛屽畠鍙湁鏁村瀷鍊鹼紝涓嶄細鏈?.2榪欑float綾誨瀷鐨勶紝濡傛灉浣犺鏈夛紝閭d綘灝辯瓑浜庢壙璁や簡鏈?.2涓漢榪欎釜姒傚康錛屽綋鐒朵篃娌℃湁char榪欎釜綾誨瀷鐨勶級錛?銆佹垚鍛樺悕鍚庨潰鐨勪竴涓啋鍙峰拰涓涓暣鏁幫紝榪欎釜鏁存暟鎸囧畾璇ヤ綅孌電殑浣嶉暱錛坆it錛夛紱3銆佽澶氱紪璇戝櫒鎶婁綅孌墊垚鍛樼殑瀛楅暱闄愬埗鍦ㄤ竴涓猧nt鐨勯暱搴﹁寖鍥翠箣鍐咃紱4銆佷綅孌墊垚鍛樺湪鍐呭瓨鐨勫疄鐜版槸浠庡乏鍒板彸榪樻槸浠庡彸鍒板乏鏄敱緙栬瘧鍣ㄦ潵鍐沖畾鐨勶紝浣嗕簩鑰呯殕瀵廣?/p>
涓嬮潰鎴戜滑灝辨潵鐪嬬湅錛屽畠鍒板簳鏄粈涔堜笢瑗匡紙鎴戝厛鍋囧畾澶у鐨勬満鍣ㄥ瓧闀夸負32浣嶏級錛?/p>
Struct WORD
{
unsigned int chara: 6:
unsigned int font : 7;
unsigned int maxsize : 19;
};
Struct WORD chone;
榪欎竴孌墊槸浠庢垜緙栧啓鐨勪竴涓枃瀛楁牸寮忓寲杞歡鎽樹笅鏉ョ殑錛屽畠鏈澶氬彲浠ュ綰?4錛堟棦鎴戣鐨剈nsigned int chara :6; 瀹冩誨叡鏄?浣嶏級涓笉鍚岀殑瀛楃鍊鹼紝鍙互澶勭悊128錛堟棦unsigned int font : 7 ;鏃?鐨?嬈℃柟錛夌涓嶅悓鐨勫瓧浣擄紝鍜?鐨?9嬈℃柟鐨勫崟浣嶉暱搴︾殑瀛椼傚ぇ瀹墮兘鍙互鐪嬪埌maxsize鏄?9浣嶏紝瀹冩槸鏃犳硶琚竴涓猻hort int 綾誨瀷鐨勫兼墍瀹圭撼鐨勶紝鎴戜滑鍙堝彲浠ョ湅鍒板叾浣欑殑鎴愬憳鐨勯暱搴︽瘮char榪樺皬錛岃繖灝辮鎴戜滑鎯寵搗璁╀粬浠叡浜?2浣嶆満鍣ㄥ瓧闀匡紝榪欏氨閬垮厤鐢ㄤ竴涓?2浣嶇殑鏁存暟鏉ヨ〃紺簃axsize鐨勪綅孌點傛庝箞鏍鳳紵榪樿娉ㄦ剰鐨勬槸鍒氭墠鐨勯偅涓孌典唬鐮佸湪16浣嶅瓧闀跨殑鏈哄櫒涓婃槸鏃犳硶瀹炵幇鐨勶紝涓轟粈涔堬紵鎻愰啋浣犱竴涓嬶紝鐪嬬湅涓婇潰鎻愰啋鐨勭3鐐癸紝浣犱細鏄庣櫧鐨勶紒
浣犳槸涓嶆槸鍙戠幇榪欎釜涓滆タ娌℃湁鐢ㄥ晩錛熷鏋滀綘鐐瑰ご浜嗭紝閭d綘灝遍敊浜嗭紒榪欎箞浼熷ぇ鐨勫垱閫犳庝箞浼氭病鏈夌敤鍛紙浣犲緋葷粺緙栫▼涓嶆劅鍏磋叮錛岀浉淇′綘浼氭敼鍙樿繖涔堜竴涓鐐圭殑錛夛紵紓佺洏鎺у埗鍣ㄥぇ瀹跺簲璇ョ煡閬撳惂錛熻蔣椹變笌瀹冪殑閫氫俊鎴戜滑鏉ョ湅鐪嬫槸鎬庝箞瀹炵幇鐨勪笅闈㈡槸涓涓鐩樻帶鍒跺櫒鐨勫瘎瀛樺櫒錛?/p>
│←5→│←5→│←9→│←8→│←1→│←1→∣←1→∣←1→∣←1→∣
涓婇潰浣嶆浠庡乏鍒板彸渚濇浠h〃鐨勫惈涔変負錛?浣嶇殑鍛戒護錛?浣嶇殑鎵囧尯錛?浣嶇殑紓侀亾錛?浣嶇殑閿欒浠g爜錛?浣嶇殑HEAD LOADED,1浣嶇殑鍐欎繚鎶わ紝1浣嶇殑DISK SPINNING錛?浣嶇殑閿欒鍒ゆ柇絎︼紝榪樻湁1浣嶇殑READY浣嶃傚畠瑕佹庝箞鏉ュ疄鐜板憿錛熶綘鍏堣嚜宸卞啓鍐欑湅錛?/p>
struct DISK_FORMAT
{
unsigned int command : 5;
unsigned sector : 5;
unsigned track : 9 ;
unsigned err_code : 8;
unsigned ishead_loaded : 1;
unsigned iswrit_protect : 1;
unsigned isdisk_spinning : 1;
unsigned iserr_ocur : 1;
undigned isready :1 ;
};
娉細浠g爜涓櫎浜嗙涓琛屼嬌鐢ㄤ簡unsigned int 鏉ュ0鏄庝綅孌靛悗灝辯渷鍘諱簡int 錛岃繖鏄彲琛岀殑錛岃瑙丄NCI C鏍囧噯銆?/p>
濡傛灉鎴戜滑瑕佸044c18bfH鐨勫湴鍧榪涜璁塊棶鐨勮瘽錛岄偅灝辮繖鏍鳳細
#define DISK 錛堬紙struct DISK_FORMAT *錛?x044c18bf錛?/p>
DISK->sector=fst_sector;
DISK->track=fst_track;
DISK->command=WRITE;
褰撶劧閭d簺閮芥槸瑕佸畯瀹氫箟鐨勫摝錛?/p>
鎴戜滑鐢ㄤ綅孌墊潵瀹炵幇榪欎竴鐩殑鏄緢鏂逛究鐨勶紝鍏跺疄榪欎篃鍙互鐢ㄧЩ浣嶆垨灞忚斀鏉ュ疄鐜幫紝浣犲皾璇曡繃灝辯煡閬撳摢涓洿鏂逛究浜嗭紒
1.鍥炶皟鍑芥暟
浠ヤ笅妗堜緥瑙f瀽xml鏂囦歡涓殑elment錛宎ttribute鍜宼ext銆俥xpat浣跨敤鍥炶皟鏂瑰紡榪斿洖xml鏁版嵁錛岃В鏋愬櫒瑙f瀽鍒頒竴涓猠lement鍙婂叾鍐呴儴灞炴у悗錛屽皢璋冪敤浜嬪厛璁劇疆濂界殑鍑芥暟錛屽悓鏍鳳紝褰揺lement緇撴潫鍜宼ext緇撴潫鍚庯紝涔熶細鍒嗗埆璋冪敤瀵瑰簲鐨勫嚱鏁般?/span>
2.濡備綍澶勭悊鏁版嵁涔嬮棿鐨勫寘鍚叧緋?/span>
鍏稿瀷鐨勬柟寮忔槸瀹氫箟涓変釜鍑芥暟鍒嗗埆澶勭悊elment寮濮嬶紙鍚睘鎬э級銆乪lement緇撴潫鍜屾枃鏈唴瀹廣傚洖璋冨嚱鏁扮殑絎竴涓弬鏁版槸鑷畾涔夌殑錛岄氬父鐢ㄤ簬瀛樺偍 XML鏂囨。鐨勪笂涓嬫枃淇℃伅錛岀敤XML_SetUserData鍙互璁劇疆榪欎釜鍙傛暟錛屼笅渚嬩腑浼犻掍竴涓暣鏁版寚閽堬紝浠ヤ究鍦ㄦ瘡嬈″洖璋冩椂鑳界煡閬撹鍏冪礌鏄鍑犲眰鍏冪礌銆?/span>
璇ュ弬鏁頒篃鍙互鏄竴涓爤瀵硅薄鐨勫湴鍧錛屽紑濮嬩竴涓厓绱犳椂錛屽皢鏂板厓绱犲搴旂殑鏁版嵁鍘嬪叆鍫嗘爤錛屽鐞嗕笅涓綰у厓绱犳椂錛屾柊鍏冪礌鏄爤欏跺厓绱犲湪瀛愬厓绱狅紝鐒跺悗澶勭悊瀹屼簡緇х畫鎶婅鍏冪礌鍘嬪叆鍫嗘爤錛岀戶緇笅涓綰ф柊鐨勫瓙鍏冪礌銆傚綋鍏冪礌緇撴潫鍚庯紝闇瑕佸嚭鏍堬紝浠ヤ究瑙f瀽涓嬩釜鍏勫紵鍏冪礌紼嬫椂鑳藉彇鍒扮埗鑺傜偣銆?/span>
濂藉暒錛屽熀鏈簲鐢ㄨ繕鏄緢綆鍗曠殑錛屽疄闄呬笂Expat鐨凙PI鍑芥暟涓嶅銆?/span>
3.濡備綍澶勭悊灞炴?/span>
灞炴ч氳繃ElementHandler鍥炶皟鍑芥暟浼犲叆錛岃繖閲屾湁涓涓猚har** atts灝辨槸灞炴э紝榪欐槸涓涓瓧絎︽寚閽堟暟緇勶紝濡傛灉鏈塏涓睘鎬э紝鏁扮粍澶у皬灝辨槸2*N+1錛屾渶鍚庝竴涓礌緇勫厓绱犱負絀烘寚閽堬紝濂囨暟鎸囬拡瀵瑰簲灞炴у悕縐幫紝鍋舵暟鎸囬拡瀵瑰簲灞炴у鹼紙瀛楃涓叉牸寮忥級銆傚彲浠ュ湪涓涓驚鐜腑澶勭悊澶氫釜灞炴э紝褰撻亣鍒扮┖鎸囬拡鏃訛紝琛ㄧず娌℃湁鏇村灞炴т簡銆?/span>
濂藉暒錛屽厛鐪媠ample鍚э細
#include銆<stdio.h>
#include銆"expat.h"
#pragma銆warning錛坉isable:4996錛?/span>
#define銆XML_FMT_INT_MOD銆"l"
static銆void銆XMLCALL銆startElement錛坴oid銆*userData,銆const銆char銆*name,銆const銆char銆**atts錛?/span>
{
int銆i;
int銆*depthPtr銆=銆錛坕nt銆*錛塽serData;
for銆錛坕銆=銆0;銆i銆<銆*depthPtr;銆i++錛?/span>
printf錛?銆"錛夛紱
printf錛坣ame錛夛紱
*depthPtr銆+=銆1;
for錛坕=0;atts[i]!=0;i+=2錛?/span>
{
printf錛?銆%s=%s",atts[i],atts[i+1]錛夛紱
}
printf錛?\n"錛夛紱
}
static銆void銆XMLCALL銆endElement錛坴oid銆*userData,銆const銆char銆*name錛?/span>
{
int銆*depthPtr銆=銆錛坕nt銆*錛塽serData;
*depthPtr銆-=銆1;
}
int銆main錛坕nt銆argc,銆char銆*argv[]錛?/span>
{
char銆buf[BUFSIZ];銆銆XML_Parser銆parser銆=銆XML_ParserCreate錛圢ULL錛夛紱
int銆done;銆銆int銆depth銆=銆0;
XML_SetUserData錛坧arser,銆&depth錛夛紱
XML_SetElementHandler錛坧arser,銆startElement,銆endElement錛夛紱
FILE*銆pFile=銆argc<2銆?stdin銆:銆fopen錛坅rgv[1],"rb"錛夛紱
do
{銆銆銆銆int銆len銆=銆錛坕nt錛塮read錛坆uf,銆1,銆sizeof錛坆uf錛夛紝銆pFile錛夛紱
done銆=銆len銆<銆sizeof錛坆uf錛夛紱
if銆錛圶ML_Parse錛坧arser,銆buf,銆len,銆done錛夈==銆XML_STATUS_ERROR錛?/span>
{
fprintf錛坰tderr,"%s銆at銆line銆%"銆XML_FMT_INT_MOD銆"u\n",
XML_ErrorString錛圶ML_GetErrorCode錛坧arser錛夛級錛?/span>
XML_GetCurrentLineNumber錛坧arser錛夛級錛?/span>
return銆1;
}
}
while銆錛堬紒done錛夛紱
XML_ParserFree錛坧arser錛夛紱
fclose錛坧File錛夛紱
return銆0;
}
4.鍏朵粬ElementHanlder
expat榪樺彲浠ヨ緗瓹Data錛孋omment鐨刪andler錛屽彟澶栦竴浜涘嚱鏁版湰浜鴻繕娌′嬌鐢ㄨ繃錛屾秹鍙婂埌鏇村鐨剎ml鏍囧噯鐨勭煡璇嗭紝濡傛灉闇瑕侊紝鍙互鍙傝冨畼鏂圭殑鎵嬪唽銆?/span>
JSON 鐨勫叏縐頒負錛欽avaScript Object Notation錛岄【鍚嶆濅箟錛孞SON 鏄敤浜庢爣璁?Javascript 瀵硅薄鐨勶紝JSON 瀹樻柟鐨勮В閲婁負錛欽SON 鏄竴縐嶈交閲忕駭鐨勬暟鎹紶杈撴牸寮忋?/p>
鏈枃騫朵笉璇︾粏浠嬬粛 JSON 鏈韓鐨勭粏鑺傦紝鏃ㄥ湪璁ㄨ濡備綍浣跨敤 C++ 璇█鏉ュ鐞?JSON銆傚叧浜?JSON 鏇村叿浣撶殑淇℃伅錛屽彲鍙傝 JSON 瀹樼綉錛歨ttp://www.json.org銆?/p>
浜屻佹湰鏂囬夋嫨澶勭悊 JSON鐨?/strong> C++ 搴?/strong>
鏈枃閫夋嫨涓涓涓夋柟搴?jsoncpp 鏉ヨВ鏋?JSON銆俲soncpp 鏄瘮杈冨嚭鍚嶇殑 C++ JSON 瑙f瀽搴撱傚湪 JSON 瀹樼綉涔熸槸棣栨帹鐨勩?/p>
涓嬭澆鍦板潃涓猴細http://sourceforge.net/projects/jsoncpp銆傛湰鏂囦嬌鐢ㄧ殑 jsoncpp 鐗堟湰涓猴細0.5.0銆?/p>
涓夈?/strong>jsoncpp 鍦?/strong> Windows 涓嬬殑緙栬瘧
瑕佷嬌鐢ㄧ涓夋柟婧愮爜搴擄紝絎竴姝ュ皯涓嶄簡鐨勫氨鏄紪璇戯紝灝嗘簮鐮佹枃浠剁紪璇戞垚鎴戜滑鏂逛究浣跨敤鐨勫姩鎬侀摼鎺ュ簱銆侀潤鎬侀摼鎺ュ簱鎴栬呴潤鎬佸鍏ュ簱[1]銆?/p>
jsconcpp 榪涜 JSON 瑙f瀽鐨勬簮鐮佹枃浠跺垎甯冨湪 include/json銆乻rc/lib_json 涓嬨傚叾瀹?jsoncpp 婧愮爜騫朵笉澶氾紝涓轟簡鏂逛究浜у搧綆$悊錛屾澶勬病蹇呰灝嗗叾緙栬瘧涓哄姩鎬侀摼鎺ュ簱鎴栬呴潤鎬佸鍏ュ簱錛屾墍浠ユ垜浠夋嫨浣跨敤闈欐侀摼鎺ュ簱[2]銆?/p>
jsoncpp 宸茬粡澶勭悊鐨勫緢瀹屽杽浜嗭紝鎵鏈夌紪璇戦夐」閮藉凡緇忛厤緗ソ錛屾墦寮makefiles/vs71/jsoncpp.sln 渚垮彲浠ュ紑濮嬬紪璇戯紙榛樿鏄嬌鐢?VS2003 緙栬瘧鍣ㄧ殑錛屾墦寮鏃剁洿鎺ユ寜鐓?VS2005 鎻愮ず杞崲鍗沖彲錛夈?/p>
鍥涖?/strong>jsoncpp 浣跨敤璇﹁В
jsoncpp 涓昏鍖呭惈涓夌綾誨瀷鐨?class錛歏alue銆丷eader銆乄riter銆俲soncpp 涓墍鏈夊璞°佺被鍚嶉兘鍦?namespace Json 涓紝鍖呭惈 json.h 鍗沖彲銆?/p>
Json::Value 鍙兘澶勭悊 ANSI 綾誨瀷鐨勫瓧絎︿覆錛屽鏋?C++ 紼嬪簭鏄敤 Unicode 緙栫爜鐨勶紝鏈濂藉姞涓涓?Adapt 綾繪潵閫傞厤銆?/p>
1銆?/strong>Value
Json::Value 鏄痡soncpp 涓渶鍩烘湰銆佹渶閲嶈鐨勭被錛岀敤浜庤〃紺哄悇縐嶇被鍨嬬殑瀵硅薄錛宩soncpp 鏀寔鐨勫璞$被鍨嬪彲瑙?Json::ValueType 鏋氫婦鍊箋?/p>
鍙涓嬫槸鐢?Json::Value 綾伙細
Json::Value json_temp; // 涓存椂瀵硅薄錛屼緵濡備笅浠g爜浣跨敤
json_temp["name"] = Json::Value("huchao");
json_temp["age"] = Json::Value(26);
Json::Value root; // 琛ㄧず鏁翠釜 json 瀵硅薄
root["key_string"] = Json::Value("value_string"); // 鏂板緩涓涓?Key錛堝悕涓猴細key_string錛夛紝璧嬩簣瀛楃涓插鹼細"value_string"銆?/p>
root["key_number"] = Json::Value(12345); // 鏂板緩涓涓?Key錛堝悕涓猴細key_number錛夛紝璧嬩簣鏁板鹼細12345銆?/p>
root["key_boolean"] = Json::Value(false); // 鏂板緩涓涓?Key錛堝悕涓猴細key_boolean錛夛紝璧嬩簣bool鍊鹼細false銆?/p>
root["key_double"] = Json::Value(12.345); // 鏂板緩涓涓?Key錛堝悕涓猴細key_double錛夛紝璧嬩簣 double 鍊鹼細12.345銆?/p>
root["key_object"] = Json_temp; // 鏂板緩涓涓?Key錛堝悕涓猴細key_object錛夛紝璧嬩簣 json::Value 瀵硅薄鍊箋?/p>
root["key_array"].append("array_string"); // 鏂板緩涓涓?Key錛堝悕涓猴細key_array錛夛紝綾誨瀷涓烘暟緇勶紝瀵圭涓涓厓绱犺祴鍊間負瀛楃涓詫細"array_string"銆?/p>
root["key_array"].append(1234); // 涓烘暟緇?key_array 璧嬪鹼紝瀵圭浜屼釜鍏冪礌璧嬪間負錛?234銆?/p>
Json::ValueType type = root.type(); // 鑾峰緱 root 鐨勭被鍨嬶紝姝ゅ涓?objectValue 綾誨瀷銆?/p>
娉細璺烠++ 涓嶅悓錛孞avaScript 鏁扮粍鍙互涓轟換鎰忕被鍨嬬殑鍊鹼紝鎵浠?jsoncpp 涔熷彲浠ャ?/p>
濡備笂鍑犱釜鐢ㄦ硶宸茬粡鍙互婊¤凍緇濆ぇ閮ㄥ垎 json 搴旂敤浜嗭紝褰撶劧 jsoncpp 榪樻湁涓浜涘叾浠栧悓鑳斤紝姣斿璇磋緗敞閲娿佹瘮杈?json 澶у皬銆佷氦鎹?json 瀵硅薄絳夛紝閮藉緢瀹規槗浣跨敤錛屽ぇ瀹惰嚜宸卞皾璇曞惂銆?/p>
2銆?/strong>Writer
濡備笂璇翠簡 Json::Value 鐨勪嬌鐢ㄦ柟寮忥紝鐜板湪鍒頒簡璇ユ煡鐪嬪垰鎵嶈祴鍊煎唴瀹圭殑鏃跺欎簡錛屾煡鐪?json 鍐呭錛屼嬌鐢?Writer 綾誨嵆鍙?/p>
Jsoncpp 鐨?Json::Writer 綾繪槸涓涓函铏氱被錛屽茍涓嶈兘鐩存帴浣跨敤銆傚湪姝ゆ垜浠嬌鐢?Json::Writer 鐨勫瓙綾伙細Json::FastWriter銆丣son::StyledWriter銆丣son::StyledStreamWriter銆?/p>
欏懼悕鎬濅箟錛岀敤 Json::FastWriter 鏉ュ鐞?json 搴旇鏄渶蹇殑錛屼笅闈㈡垜浠潵璇曡瘯銆?/p>
Json::FastWriter fast_writer;
std::cout << fast_writer.write(root) << std::endl;
杈撳嚭緇撴灉涓猴細
{"key_array":["array_string",1234],"key_boolean":false,"key_double":12.3450,"key_number":12345,"key_object":{"age":26,"name":"huchao"},"key_string":"value_string"}
鍐嶆欏懼悕鎬濅箟錛岀敤 Json::StyledWriter 鏄牸寮忓寲鍚庣殑 json錛屼笅闈㈡垜浠潵鐪嬬湅 Json::StyledWriter 鏄庢牱鏍煎紡鍖栫殑銆?/p>
Json::StyledWriter styled_writer;
std::cout << styled_writer.write(root) << std::endl;
杈撳嚭緇撴灉涓猴細
{
"key_array" : [ "array_string", 1234 ],
"key_boolean" : false,
"key_double" : 12.3450,
"key_number" : 12345,
"key_object" : {
"age" : 26,
"name" : "huchao"
},
"key_string" : "value_string"
}
3銆?/strong>Reader
Json::Reader 鏄敤浜庤鍙栫殑錛岃鐨勭‘鍒囩偣錛屾槸鐢ㄤ簬灝嗗瓧絎︿覆杞崲涓?Json::Value 瀵硅薄鐨勶紝涓嬮潰鎴戜滑鏉ョ湅涓畝鍗曠殑渚嬪瓙銆?/p>
Json::Reader reader;
Json::Value json_object;
const char* json_document = "{\"age\" : 26,\"name\" : \"huchao\"}";
if (!reader.parse(json_document, json_object))
return 0;
std::cout << json_object["name"] << std::endl;
std::cout << json_object["age"] << std::endl;
杈撳嚭緇撴灉涓猴細
"huchao"
26
鍙錛屼笂榪頒唬鐮佸凡緇忚В鏋愬嚭浜?json 瀛楃涓層?/p>
銆銆鐜板湪鎴戜滑灝嗚璁篊/C++閲屾垜璁や負鍝竴鏈功閮芥病鏈夊畬鍏ㄨ娓呮錛屼篃鏄秹鍙婃蹇電粏鑺傛渶澶氾紝璇█涓渶闅劇殑鎶鏈箣涓鐨勫姩鎬佸唴瀛樼殑浼犻掋傚茍涓斿湪杞歡寮鍙戜腑寰堝涓撲笟浜哄憳騫朵笉鑳藉啓鍑虹浉鍏崇殑鍚堟牸鐨勪唬鐮併?/p>
銆銆涓銆佸紩鍏?/p>
銆銆鐪嬩笅闈㈢殑渚嬪瓙錛岃繖鏄垜浠湪緙栧啓搴撳嚱鏁版垨鑰呴」鐩唴鐨勫叡鍚屽嚱鏁扮粡甯稿笇鏈涚殑銆?/p>
銆銆void MyFunc錛坈har *pReturn錛?size_t size錛?/p>
銆銆{………
銆銆pReturn = 錛坈har *錛塵alloc錛坰izeof錛坈har錛?* num錛夛紱………
銆銆}鎴戜滑鍙互寰堟槑鏄懼湴鐪嬪嚭浠g爜浣滆呯殑鎰忓浘錛屼粬鎯沖湪鍑芥暟璋冪敤澶勫0鏄庝竴涓寚閽堛char *pMyReturn=NULL錛涚劧鍚庤皟鐢∕yFunc澶勭悊騫惰繑鍥炰竴孌甸暱搴︿負size鐨勪竴孌靛姩鎬佸唴瀛樸?/p>
銆銆閭d箞浣滆呰兘杈懼埌棰勬湡鐨勬晥鏋滃悧錛?/p>
銆銆閭d箞鎴戝彲浠ュ憡璇変綔鑰咃紝浠栫殑紼嬪簭鍦ㄧ紪璇戞湡寰堝垢榪愬湴閫氳繃浜嗭紝鍙槸鍦ㄨ繍琛屾湡浠栫殑紼嬪簭宕╂簝緇堟銆傚師鍥犱綍鍦紝鏄粬瑙︾姱浜嗙郴緇熶笉鍙鏡鐘殑鏉℃錛氶敊璇湴鎿嶄綔鍐呭瓨銆?/p>
銆銆浜屻佸唴瀛樻搷浣滃強闂鐩稿叧鐭ヨ瘑鐐?/p>
銆銆涓轟簡鑳藉交搴曡В鍐沖姩鎬佸唴瀛樹紶閫掔殑闂錛屾垜浠厛鍥為【涓涓嬪唴瀛樼鐞嗙殑鐭ヨ瘑瑕佺偣銆?/p>
銆銆錛?錛夊唴瀛樺垎閰嶆柟寮忔湁涓夌錛?/p>
銆銆浠庨潤鎬佸瓨鍌ㄥ尯鍩熷垎閰嶃傚唴瀛樺湪紼嬪簭緙栬瘧鐨勬椂鍊欏氨宸茬粡鍒嗛厤濂斤紝榪欏潡鍐呭瓨鍦ㄧ▼搴忕殑鏁翠釜榪愯鏈熼棿閮藉瓨鍦ㄣ備緥濡傚叏灞鍙橀噺錛宻tatic鍙橀噺銆?/p>
銆銆鍦ㄦ爤涓婂垱寤恒傚湪鎵ц鍑芥暟鏃訛紝鍑芥暟鍐呭眬閮ㄥ彉閲忕殑瀛樺偍鍗曞厓閮藉彲浠ュ湪鏍堜笂鍒涘緩錛屽嚱鏁版墽琛岀粨鏉熸椂榪欎簺瀛樺偍鍗曞厓鑷姩琚噴鏀俱傛爤鍐呭瓨鍒嗛厤榪愮畻鍐呯疆浜庡鐞嗗櫒鐨勬寚浠ら泦涓紝鏁堢巼寰堥珮錛屼絾鏄垎閰嶇殑鍐呭瓨瀹歸噺鏈夐檺銆?/p>
銆銆浠庡爢涓婂垎閰嶏紝浜︾О鍔ㄦ佸唴瀛樺垎閰嶃傜▼搴忓湪榪愯鐨勬椂鍊欑敤malloc鎴杗ew鐢寵浠繪剰澶氬皯鐨勫唴瀛橈紝紼嬪簭鍛樿嚜宸辮礋璐e湪浣曟椂鐢╢ree鎴杁elete閲婃斁鍐呭瓨銆傚姩鎬佸唴瀛樼殑鐢熷瓨鏈熺敱鎴戜滑鍐沖畾錛屼嬌鐢ㄩ潪甯哥伒媧匯?/p>
銆銆錛?錛夋寚閽堢殑鎿嶄綔嫻佺▼
銆銆鐢寵騫跺垵濮嬪寲鎴栬緗負絀猴細
銆銆int *pInt=NULL錛涘紑杈熺┖闂存垨鑰呬嬌鍏舵寚鍚戝璞★細
銆銆pInt=new Int錛?錛夛紱鎴栬卛nt i=3錛沺int=&i錛涚敤鎸囬拡錛堟洿紜垏鍦拌鏄搷浣滃唴瀛橈紝鍦ㄤ嬌鐢ㄤ箣鍓嶅姞if錛坧int錛?NULL錛夋垨鑰卆ssert錛坧Int錛?NULL錛夊悗鍐嶄嬌鐢紝浠ラ槻鍐呭瓨鐢寵澶辮觸鐨勬儏鍐典笅浣跨敤鎸囬拡錛夛細
銆銆if錛坧錛?NULL錛?{use pint}錛涢噴鏀句嬌鐢ㄥ畬鐨勫唴瀛?/p>
銆銆free錛坧Int錛夛紱緗寚閽堜負絀?/p>
銆銆pInt=NULL錛涳紙閬垮厤閲庢寚閽堢殑鍑虹幇錛?/p>
銆銆錛?錛夊湪鍑芥暟鐨勫弬鏁頒紶閫掍腑錛岀紪璇戝櫒鎬繪槸瑕佷負鍑芥暟鐨勬瘡涓弬鏁板埗浣滀復鏃跺壇鏈紝濡傛灉鍙傛暟涓簆鐨勮瘽錛岄偅涔堢紪璇戝櫒浼氫駭鐢焢鐨勫壇鏈琠p錛屼嬌_p=p錛?濡傛灉鍑芥暟浣撳唴鐨勭▼搴忎慨鏀逛簡_p鐨勫唴瀹癸紝灝卞鑷村弬鏁皃鐨勫唴瀹逛綔鐩稿簲鐨勪慨鏀廣傝繖灝辨槸鎸囬拡鍙互鐢ㄤ綔杈撳嚭鍙傛暟鐨勫師鍥犮?/p>
銆銆涓夈侀棶棰樺垎鏋?/p>
銆銆鏍規嵁涓婇潰鐨勮鍒欐垜浠彲浠ュ緢瀹規槗鍒嗘瀽渚嬪瓙涓け璐ョ殑鍘熷洜銆?/p>
銆銆void MyFunc錛坈har *pReturn錛?size_t size錛?/p>
銆銆{………
銆銆pReturn = 錛坈har *錛塵alloc錛坰izeof錛坈har錛?* num錛夛紱………
銆銆} void main錛坴oid錛墈 char *pMyReturn=NULL錛汳yFunc錛坧MyReturn錛?0錛夛紱}鍦∕yFunc錛坈har *pReturn錛?size_t size錛変腑_pMyReturn鐪熷疄鍦扮敵璇峰埌浜嗗唴瀛橈紝 pMyReturn鐢寵浜嗘柊鐨勫唴瀛橈紝鍙槸鎶奯pMyReturn 鎵鎸囩殑鍐呭瓨鍦板潃鏀瑰彉浜嗭紝浣嗘槸pMyReturn涓濇鏈彉銆傛墍浠ュ嚱鏁癕yFunc騫朵笉鑳借緭鍑轟換浣曚笢瑗褲備簨瀹炰笂錛屾瘡鎵ц涓嬈yFunc灝變細娉勯湶涓鍧楀唴瀛橈紝鍥犱負娌℃湁鐢╢ree閲婃斁鍐呭瓨銆?/p>
銆銆鍥涖侀棶棰樿В鍐蟲柟妗?/p>
銆銆鍑芥暟闂翠紶閫掑姩鎬佹暟鎹垜浠彲浠ユ湁涓夌瑙e喅鏂規硶銆?/p>
銆銆鏂規硶涓錛氬鏋滄垜浠槸鐢–++緙栫▼錛屾垜浠彲浠ュ緢鏂逛究鍦板埄鐢ㄥ紩鐢ㄨ繖涓妧鏈傛垜涔熸瀬鍔涙帹鑽愪綘鐢ㄥ紩鐢紝鍥犱負瀹冧細浣夸綘灝戠姱涓浜涢敊璇備互涓嬫槸涓涓緥瀛愩?/p>
銆銆void MyFunc錛坈har* &pReturn錛宻ize_t size錛墈 pReturn=錛坈har*錛塵alloc錛坰ize錛夛紱memset錛坧Return錛?x00錛宻ize錛夛紱if錛坰ize>=13錛?/p>
銆銆strcpy錛坧Return錛?Hello World錛?錛夛紱}
銆銆void main錛堬級{ char *pMyReturn=NULL錛汳yFunc錛坧MyReturn錛?5錛夛紱if錛坧MyReturn錛?NULL錛?/p>
銆銆{ char *pTemp=pMyReturn錛泈hile錛?pTemp錛?''\0''錛?/p>
銆銆cout<<*pTemp++錛沺Temp=NULL錛泂trcpy錛坧MyReturn錛?AAAAAAAA"錛夛紱free錛坧MyReturn錛夛紱pMyReturn=NULL錛泒鏂規硶浜岋細鍒╃敤浜岀駭鎸囬拡
銆銆void MyFunc 錛坈har ** pReturn錛?size_t size錛?/p>
銆銆{ * pReturn = 錛坈har *錛塵alloc錛坰ize錛夛紱} void main錛坴oid錛?/p>
銆銆{ char * pMyReturn = NULL錛汳yFunc 錛?amp;pMyReturn錛?100錛夛紱// 娉ㄦ剰鍙傛暟鏄?& pMyReturn if錛坧MyReturn錛?NULL錛墈 strcpy錛坧MyReturn錛?"hello"錛夛紱cout<< pMyReturn << endl錛沠ree錛坧MyReturn錛夛紱pMyReturn=NULL錛泒}涓轟粈涔堜簩綰ф寚閽堝氨鍙互浜嗐傚師鍥犻氳繃鍑芥暟浼犻掕鍒欏彲浠ュ緢瀹規槗鍦板垎鏋愬嚭鏉ャ傛垜浠皢& pMyReturn浼犻掍簡榪涘幓錛屽氨鏄皢鍙岄噸鎸囬拡鐨勫唴瀹逛紶閫掑埌浜嗗嚱鏁頒腑銆傚嚱鏁拌繃紼嬪埄鐢ㄦ敼鍙樻寚閽堢殑鍐呭錛岃繖鏍穚MyReturn寰堟槑鏄炬寚鍚戜簡寮杈熺殑鍐呭瓨 .
銆銆鏂規硶涓夛細鐢ㄥ嚱鏁拌繑鍥炲兼潵浼犻掑姩鎬佸唴瀛?/p>
銆銆char * MyFunc 錛坴oid錛?/p>
銆銆{ char *p =new char[20]錛沵emset錛坧錛?x00錛宻izeof錛坧錛夛級錛況eturn p錛泒 void main錛坴oid錛?/p>
銆銆{ char *str = NULL錛泂tr = MyFunc錛堬級錛沬f錛坰tr錛?NULL錛?/p>
銆銆{ strcpy錛坰tr錛?Hello錛宐aby"錛夛紱cout<< str << endl錛沠ree錛坰tr錛夛紱str=NULL錛泒璇鋒敞鎰忕殑鏄嚱鏁板啓鎴愯繖鏍風殑璇濓紝浣犳槸涓嶈兘榪斿洖浠涔堝姩鎬佸唴瀛樼殑錛屽洜涓簆鎸囧悜鐨勬槸瀛楃涓插父閲忋傚唴瀛樺湪浣嶄簬闈欐佸瓨鍌ㄥ尯涓婂垎閰嶏紝浣犳棤娉曟敼鍙樸傦紙浣犳兂瑕佸緱鍒板姩鎬佸唴瀛樻垜浠竴瀹氳鐪嬪埌malloc鎴栬卬ew錛夈?/p>
銆銆char * MyFunc 錛坴oid錛?/p>
銆銆{ char *p =“Hello World”
銆銆return p錛泒緇撴潫璇?/p>
銆銆鎿嶄綔鍐呭瓨鏄疌/C++涓涓毦鐐癸紝鎴戜滑浣滀負涓撲笟鐨勮蔣浠跺紑鍙戜漢鍛樸傚簲璇ユ繁鍏ョ悊瑙e茍鑳界伒媧誨湴鎺屾彙鎸囬拡鍜屽唴瀛樼殑鎿嶄綔銆?/p>