锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鑷粠Symbian OS鍦?/span>EKA2鎻愪緵浜嗗己澶х殑CTelephony錛岃繖涔嬪悗寰堝璺熺綉緇滅浉鍏崇殑鍙傛暟閮介氳繃榪欎釜鑾峰彇錛屽儚璇嗗埆鐩墠鎵嬫満鏄敞鍐岀殑鏄Щ鍔ㄨ繕鏄仈閫氱瓑淇℃伅緗戠粶涓婁紶鐨勬瘮杈冨鐨勪篃鏄氳繃璇ユ柟娉曪紝鐗瑰埆鏄暩澶╁厔鍦?/span>nokia璁哄潧鍒嗕韓浜嗕唬鐮佷箣鍚庯紝緗戠粶涓婂ぇ澶氶噰鐢ㄥ叾浠g爜錛屽綋鐒朵篃鍖呮嫭鎴戣繖鏍風殑鎳掍漢鍦ㄥ唴錛岃屼笖寰寰寰堝浜洪兘娌℃湁娉ㄦ剰鏈鍏抽敭鐨勫師鐞嗗嵆“鍥介檯縐誨姩鐢ㄦ埛璇嗗埆鐮侊紙IMSI錛?/span>International Mobile Subscriber Identification Number錛夋槸鍖哄埆縐誨姩鐢ㄦ埛鐨勬爣蹇楋紝鍌ㄥ瓨鍦?/span>SIM鍗′腑錛屽彲鐢ㄤ簬鍖哄埆縐誨姩鐢ㄦ埛鐨勬湁鏁堜俊鎭?/span>IMSI鐢?/span>MCC銆?/span>MNC銆?/span>MSIN緇勬垚錛屽叾涓?/span>MCC涓虹Щ鍔ㄥ浗瀹跺彿鐮侊紝鐢?/span>3浣嶆暟瀛楃粍鎴愶紝鍞竴鍦拌瘑鍒Щ鍔ㄥ鎴鋒墍灞炵殑鍥藉錛屾垜鍥戒負460錛?/span>MNC涓虹綉緇?/span>id錛岀敱2浣嶆暟瀛楃粍鎴愶紝鐢ㄤ簬璇嗗埆縐誨姩瀹㈡埛鎵褰掑睘鐨勭Щ鍔ㄧ綉緇滐紝涓浗縐誨姩涓?/span>00錛屼腑鍥借仈閫氫負01錛?/span>MSIN涓虹Щ鍔ㄥ鎴瘋瘑鍒爜錛岄噰鐢ㄧ瓑闀?/span>11浣嶆暟瀛楁瀯鎴?#8221;銆傚叿浣撹瑙?/span>http://wiki.forum.nokia.com/index.php/%E5%8C%BA%E5%88%86%E5%BD%93%E5%89%8D%E7%94%A8%E6%88%B7SIM%E5%8D%A1%E6%98%AF%E7%A7%BB%E5%8A%A8%E8%BF%98%E6%98%AF%E8%81%94%E9%80%9A
鏈榪戝湪浣跨敤璇ヤ唬鐮佹椂錛屽彂鐜板亣濡傚綋鎵嬫満澶勪簬紱葷嚎鐘舵佷笅錛屽垯涓嶈鏈夋棤鎻?/span>SIM鍗★紝浣跨敤鍟稿ぉ鍏勭殑鏂規硶錛屽氨璇嗗埆涓嶅嚭鏉ヤ簡錛岃繖涓簲璇ヨ窡CTelephony鐨勫疄鐜版湁鍏籌紝鏈漢璇曠潃閫氳繃鍏舵簮鐮佸幓浜嗚В浜嗭紝浣嗘槸璨屼技璺熻釜鍒板簳灞傛病鏈夊畬鍏ㄥ叕寮錛屾垨鑰呰涓漢鐪嬫簮鐮佽兘鍔涜繕澶急浜嗕簺銆傜敱浜庨噰鐢ㄥ暩澶╁厔鏂規硶瀹炵幇涓嶄簡浜嗭紝鎵浠ュ彧鑳戒粠涓婇潰鐨勭孩澶存枃浠訛紙鍗崇孩浣撳瓧錛夊鎵捐В鍐蟲柟娉曪紝铏界劧CTelephony::GetCurrentNetworkInfo鍦ㄧ綰挎ā寮忎笅澶辨晥錛屼絾鏄?/span>CTelephony::GetSubscriberId浠嶇劧鍙敤錛屼負姝ゆ垜浠氨鍙互閫氳繃鐩存帴鍒嗘瀽IMSI鏉ュ疄鐜板榪愯惀鍟嗙綉緇滅殑璇嗗埆錛岃嚦浜?/span>MNC鐨勪俊鎭紝澶у鍙互鏌ヨhttp://en.wikipedia.org/wiki/Mobile_network_code錛屽湪鍥藉唴鐨勬儏鍐靛涓嬫埅鍥撅細
鏃㈢劧鐭ラ亾浜嗗涓婁俊鎭紝鎴戜滑灝卞彲浠ョ畝鍗曠殑瀵?/span>IMSI鍙瘋繘琛屽垎鏋愪簡錛屽皬鍙鍟稿ぉ鍏勭殑浠g爜榪涜綆鍗曚慨鏀癸紝褰撶劧璇ヤ唬鐮佷篃鏄嬌鐢?/span>CTelephony錛屽彧鑳戒嬌鐢ㄥ湪EKA2騫沖彴涓婏紝EKA1鍙互閲囩敤RMobilePhone::GetSubscriberId鐨勬柟娉曟潵鑾峰彇IMSI錛屽湪榪欓噷涔熷氨涓嶅仛灞曞紑浜嗭紝鍏蜂綋浠g爜濡備笅錛?/span>
澶存枃浠?/span>
/*
* TelephonyAO.h
*
* Created on:
* Author: frank
*/
#ifndef TELEPHONYAO_H_
#define TELEPHONYAO_H_
#include <e32base.h>
#include <Etel3rdParty.h>
typedef enum
{
ENetWorkUnKnow,
ENetWorkCM,
ENetWorkUN,
ENetWorkTC,
ENetWorkTT,
}TNetWorkType;
class CTelephonyAO : public CActive
{
public:
static CTelephonyAO* NewL();
TNetWorkType GetNetWorkId();
public:
~CTelephonyAO();
protected:
void DoCancel();
void RunL();
private:
CTelephonyAO();
void ConstructL();
void GetNetWorkInfo();
private:
CActiveSchedulerWait* iActiveSchedulerWait;
CTelephony* pTelephony_;
CTelephony::TSubscriberIdV1 iSubscribId;
CTelephony::TSubscriberIdV1Pckg iSubscriberIdPckg;
};
#endif /* TELEPHONYAO_H_ */
瀹炵幇鏂囦歡
/*
* TelephonyAO.cpp
*
* Created on:
* Author: frank
*/
#include "TelephonyAO.h"
CTelephonyAO::CTelephonyAO() : CActive(EPriorityStandard), iSubscriberIdPckg(iSubscribId)
{
}
CTelephonyAO::~CTelephonyAO()
{
delete pTelephony_;
pTelephony_ = NULL;
delete iActiveSchedulerWait;
iActiveSchedulerWait = NULL;
}
void CTelephonyAO::ConstructL()
{
pTelephony_ = CTelephony::NewL();
iActiveSchedulerWait = new (ELeave)CActiveSchedulerWait;
CActiveScheduler::Add(this);
}
CTelephonyAO* CTelephonyAO::NewL()
{
CTelephonyAO* pSelf = new(ELeave) CTelephonyAO;
CleanupStack::PushL(pSelf);
pSelf->ConstructL();
CleanupStack::Pop();
return pSelf;
}
void CTelephonyAO::RunL()
{
if (iActiveSchedulerWait->IsStarted())
{
iActiveSchedulerWait->AsyncStop();
}
}
void CTelephonyAO::DoCancel()
{
pTelephony_->CancelAsync(CTelephony::EGetSubscriberIdCancel);
if (iActiveSchedulerWait->IsStarted())
{
iActiveSchedulerWait->AsyncStop();
}
}
void CTelephonyAO::GetNetWorkInfo()
{
Cancel();
pTelephony_->GetSubscriberId(iStatus, iSubscriberIdPckg);
SetActive();
iActiveSchedulerWait->Start();
}
TNetWorkType CTelephonyAO::GetNetWorkId()
{
GetNetWorkInfo();
TNetWorkType vNetWorkType = ENetWorkUnKnow;
if(iSubscribId.iSubscriberId.Length() < 15)
{
vNetWorkType = ENetWorkUnKnow;
}
else
{
TBuf<6> vHeader;
vHeader.Copy(iSubscribId.iSubscriberId.Left(5));
TBuf<3> vPtrTemp;
vPtrTemp.Copy(vHeader.Right(2));
TInt vNetWorkId = 0;
TLex vLex(vPtrTemp);
vLex.Val(vNetWorkId);
if((vNetWorkId == 1) ||(vNetWorkId == 6))
{
vNetWorkType = ENetWorkUN;
}
else if((vNetWorkId == 0) ||(vNetWorkId == 2))
{
vNetWorkType = ENetWorkCM;
}
else if((vNetWorkId == 3) ||(vNetWorkId == 5))
{
vNetWorkType = ENetWorkTC;
}
else if(vNetWorkId == 20)
{
vNetWorkType = ENetWorkTT;
}
else
{
vNetWorkType = ENetWorkUnKnow;
}
}
return vNetWorkType;
}
鑷充簬濡備綍璋冪敤錛屽氨鍙互閫氳繃濡備笅綆鍗曡幏鍙栦簡錛屼笉鐢ㄥ啀鑷繁鍘繪瘮杈冧簡銆?/span>
CTelephonyAO* pTelephony = CTelephonyAO::NewL();
CleanupStack::PushL(pTelephony);
TNetWorkType vNetWorkType = pTelephony->GetNetWorkId();
CleanupStack::PopAndDestroy(pTelephony);
濂戒簡錛屾殏鏃跺皬緇撳涓嬪惂錛屾劅璋㈠暩澶╁厔鍓嶄漢妞嶆爲銆?/span>
璋冪敤緋葷粺鐨勬祻瑙堝櫒鏉ュ疄鐜扮綉欏墊祻瑙堝彲浠ユ牴鎹郴緇熸祻瑙堝櫒鐨勭姸鎬佽屽喅瀹氳皟鐢ㄧ殑鏂規硶錛屼緥濡傚綋緋葷粺嫻忚鍣ㄦ鍦ㄤ嬌鐢ㄧ殑鏃跺欏彲浠ョ敤TApaTask::SendMessage ()鏂規硶錛涘綋緋葷粺嫻忚鍣ㄦ病鏈夎浣跨敤鐨勬椂鍊欏彲浠ョ敤RapaLsSession::StartDocument() 鏂規硶銆?/span>
涓嬮潰鏄疄鐜頒唬鐮侊細
TBool CinternetAppUi::ConnectL(const TDesC& addr)
{
const TInt KBrowserUid = 0x10008D39;
TUid id( TUid::Uid( KBrowserUid ) );
TApaTaskList taskList( CEikonEnv::Static()->WsSession() );
TApaTask task = taskList.FindApp( id );
// the system browser is in use
if ( task.Exists() )
{
HBufC8* param8 = HBufC8::NewLC( addr.Length() );
param8->Des().Append( addr );
task.SendMessage( TUid::Uid( 0 ), *param8 ); // Uid is not used
CleanupStack::PopAndDestroy();
}
// the system browser is not in use
else
{
RApaLsSession appArcSession;
User::LeaveIfError(appArcSession.Connect()); // connect to AppArc server
TThreadId id;
appArcSession.StartDocument( addr, TUid::Uid( KBrowserUid ), id );
appArcSession.Close();
}
return ETrue;
}
//鍏朵腑鍏ュ彛鍙傛暟addr鐨勬牸寮忔槸“
鍏朵腑閲囩敤浠ヤ笂鏂規硶涓嶄粎浠呭彲浠ョ敤浜庡紑鍚綉欏碉紝榪樺彲浠ョ敤浜庡惎鍔ㄥ畨瑁?/span>sis/sisx錛屽叿浣撶ず渚嬩唬鐮佸涓嬶細
RApaLsSession installSession;
TThreadId threadId;
TUid uid;
uid.iUid = 0x
installSession.Connect();
installSession.StartDocument(aFileName, uid, threadId);
installSession.Close();
璇ヤ唬鐮佽嚜宸辨病鏈変翰嫻嬭繃錛屼絾鏄粠鐞嗚涓婅搴旇鍙錛岃屼笖鏈夊ぇ鐗涜uid閮戒笉鐢ㄤ紶榪涘幓銆?/span>
鍙﹀鎾斁闊充箰鏂囦歡錛岀綉涓婁篃璇村彲浠ラ氳繃璇ユ柟娉曟潵瀹炵幇錛?/span>Uid鍒嗗埆濡備笅錛?/span>
0x
0x
RapaLsSession::StartDocument()鍔熻兘榪樻槸寰堝己澶х殑錛屽湪榪欓噷鍙仛鎽樺綍錛屼互鍚庢湁鏈轟細鍐嶄翰嫻嬶紝涓嶈繃鐢ㄥ叾鎵撳紑緗戦〉鐨勭‘鍙銆?br>
涓轟粈涔堣寮曞叆铏氭嫙緇ф壙錛?/span>
铏氭嫙緇ф壙鍦ㄤ竴鑸殑搴旂敤涓緢灝戠敤鍒幫紝鎵浠ヤ篃寰寰琚拷瑙嗭紝榪欎篃涓昏鏄洜涓哄湪C++涓紝澶氶噸緇ф壙鏄笉鎺ㄨ崘鐨勶紝涔熷茍涓嶅父鐢紝鑰屼竴鏃︾寮浜嗗閲嶇戶鎵匡紝铏氭嫙緇ф壙灝卞畬鍏ㄥけ鍘諱簡瀛樺湪鐨勫繀瑕侊紙鍥犱負榪欐牱鍙細闄嶄綆鏁堢巼鍜屽崰鐢ㄦ洿澶氱殑絀洪棿錛屽叧浜庤繖涓鐐癸紝鎴戣嚜宸辮繕娌℃湁澶娣卞埢鐨勭悊瑙o紝鏈夊叴瓚g殑鍙互鐪嬬綉緇滀笂鐧芥潹鐨勪綔鍝?/span>銆?/span>RTTI銆佽櫄鍑芥暟鍜岃櫄鍩?span lang=EN-US>綾葷殑寮閿鍒嗘瀽鍙婁嬌鐢ㄦ寚瀵?span lang=EN-US>銆?/span>錛岃瀹炶瘽鎴戠洰鍓嶈繕娌$湅寰楀緢鏄庣櫧錛岄珮浜哄彲浠ユ寚鐐逛笅鎴戯級銆?/span>
浠ヤ笅闈㈢殑涓涓緥瀛愪負渚嬶細
#include <iostream.h>
#include <memory.h>
class CA
{
int k; //濡傛灉鍩虹被娌℃湁鏁版嵁鎴愬憳錛屽垯鍦ㄨ繖閲屽閲嶇戶鎵跨紪璇戜笉浼氬嚭鐜頒簩涔夋?/span>
public:
void f() {cout << "CA::f" << endl;}
};
class CB : public CA
{
};
class CC : public CA
{
};
class CD : public CB, public CC
{
};
void main()
{
CD d;
d.f();
}
褰撶紪璇戜笂榪頒唬鐮佹椂錛屾垜浠細鏀跺埌濡備笅鐨勯敊璇彁紺猴細
error C2385: 'CD::f' is ambiguous
鍗崇紪璇戝櫒鏃犳硶紜畾浣犲湪d.f()涓璋冪敤鐨勫嚱鏁?/span>f鍒板簳鏄摢涓涓傝繖閲屽彲鑳戒細璁╀漢瑙夊緱鏈変簺濂囨紝鍛藉悕鍙畾涔変簡涓涓?/span>CA::f錛屾棦鐒跺ぇ瀹墮兘媧劇敓鑷?/span>CA錛岄偅鑷劧灝辨槸璋冪敤鐨?/span>CA::f錛屼負浠涔堣繕鏃犳硶紜畾鍛紵
榪欐槸鍥犱負緙栬瘧鍣ㄥ湪榪涜緙栬瘧鐨勬椂鍊欙紝闇瑕佺‘瀹氬瓙綾葷殑鍑芥暟瀹氫箟錛屽CA::f鏄‘瀹氱殑錛岄偅涔堝湪緙栬瘧CB銆?/span>CC鏃惰繕闇瑕佸湪緙栬瘧鍣ㄧ殑璇硶鏍戜腑鐢熸垚CB::f錛?/span>CC::f絳夋爣璇嗭紝閭d箞錛屽湪緙栬瘧CD鐨勬椂鍊欙紝鐢變簬CB銆?/span>CC閮芥湁涓涓嚱鏁?/span>f錛屾鏃訛紝緙栬瘧鍣ㄥ皢璇曞浘鐢熸垚榪欎袱涓?/span>CD::f鏍囪瘑錛屾樉鐒惰繖鏃跺氨瑕佹姤閿欎簡銆傦紙褰撴垜浠笉浣跨敤CD::f鐨勬椂鍊欙紝浠ヤ笂鏍囪瘑閮戒笉浼氱敓鎴愶紝鎵浠ワ紝濡傛灉鍘繪帀d.f()涓鍙ワ紝紼嬪簭灝嗛『鍒╅氳繃緙栬瘧錛?/span>
瑕佽В鍐寵繖涓棶棰橈紝鏈変袱涓柟娉曪細
1銆侀噸杞藉嚱鏁?/span>f()錛氭鏃剁敱浜庢垜浠槑紜畾涔変簡CD::f錛岀紪璇戝櫒媯鏌ュ埌CD::f()璋冪敤鏃跺氨鏃犻渶鍐嶅儚涓婇潰涓鏍峰幓閫愮駭鐢熸垚CD::f鏍囪瘑浜嗭紱
姝ゆ椂CD鐨勫厓绱犵粨鏋勫涓嬶細
|CB(CA)|
|CC(CA)|
鏁呮鏃剁殑sizeof(CD) = 8;錛?/span>CB銆?/span>CC鍚勬湁涓涓厓绱?/span>k錛?/span>
2銆佷嬌鐢ㄨ櫄鎷熺戶鎵匡細铏氭嫙緇ф壙鍙堢О浣滃叡浜戶鎵匡紝榪欑鍏變韓鍏跺疄涔熸槸緙栬瘧鏈熼棿瀹炵幇鐨勶紝褰撲嬌鐢ㄨ櫄鎷熺戶鎵挎椂錛屼笂闈㈢殑紼嬪簭灝嗗彉鎴愪笅闈㈢殑褰㈠紡錛?/span>
#include <iostream.h>
#include <memory.h>
class CA
{
int k;
public:
void f() {cout << "CA::f" << endl;}
};
class CB : virtual public CA //涔熸湁涓縐嶅啓娉曟槸class CB : public virtual CA
{ //瀹為檯涓婅繖涓ょ鏂規硶閮藉彲浠?/span>
};
class CC : virtual public CA
{
};
class CD : public CB, public CC
{
};
void main()
{
CD d;
d.f();
}
姝ゆ椂錛屽綋緙栬瘧鍣ㄧ‘瀹?/span>d.f()璋冪敤鐨勫叿浣撳惈涔夋椂錛屽皢鐢熸垚濡備笅鐨?/span>CD緇撴瀯錛?/span>
|CB|
|CC|
|CA|
鍚屾椂錛屽湪CB銆?/span>CC涓兘鍒嗗埆鍖呭惈浜嗕竴涓寚鍚?/span>CA鐨勮櫄鍩虹被鎸囬拡鍒楄〃vbptr錛?/span>virtual base table pointer錛夛紝鍏朵腑璁板綍鐨勬槸浠?/span>CB銆?/span>CC鐨勫厓绱犲埌CA鐨勫厓绱犱箣闂寸殑鍋忕Щ閲忋傛鏃訛紝涓嶄細鐢熸垚鍚勫瓙綾葷殑鍑芥暟f鏍囪瘑錛岄櫎闈炲瓙綾婚噸杞戒簡璇ュ嚱鏁幫紝浠庤岃揪鍒?#8220;鍏變韓”鐨勭洰鐨勶紙榪欓噷鐨勫叿浣撳唴瀛樺竷灞錛屽彲浠ュ弬鐪嬮捇鐭沖瀷緇ф壙鍐呭瓨甯冨眬錛屽湪鐧芥潹鐨勯偅綃囨枃绔犱腑涔熸湁錛夈?/span>
涔熸鍥犳錛屾鏃剁殑sizeof(CD) = 12錛堜袱涓?/span>vbptr + sizoef(int)錛?/span>;
鍙︽敞錛?/span>
濡傛灉CB錛?/span>CC涓悇瀹氫箟涓涓?/span>int鍨嬪彉閲忥紝鍒?/span>sizeof(CD)灝卞彉鎴?/span>20(涓や釜vbptr + 3涓?/span>sizoef(int)
濡傛灉CA涓坊鍔犱竴涓?/span>virtual void f1(){}錛?/span>sizeof(CD) = 16錛堜袱涓?/span>vbptr + sizoef(int)+vptr錛?/span>;
鍐嶆坊鍔?/span>virtual void f2(){}錛?/span>sizeof(CD) = 16涓嶅彉銆傚師鍥犲涓嬫墍紺猴細甯︽湁铏氬嚱鏁扮殑綾伙紝鍏跺唴瀛樺竷灞涓婂寘鍚竴涓寚鍚戣櫄鍑芥暟鍒楄〃鐨勬寚閽堬紙vptr錛夛紝榪欒窡鏈夊嚑涓櫄鍑芥暟鏃犲叧銆?/span>
浠ヤ笂鍐呭娑夊強鍒扮被瀵硅薄鍐呭瓨甯冨眬闂錛屾湰浜鴻繕闅句互鍋氳繃澶氬睍寮錛屽厛璐磋繖涔堝錛屾湰綃囨枃绔犲彧鏄冭檻瀵逛簬铏氭嫙緇ф壙榪涜鍏ラ棬錛岃嚦浜庢晥鐜囥佸簲鐢ㄧ瓑鏈綔灞曞紑銆傛湰鏂囧湪緗戜笂鏂囩珷鍩虹涓婁慨鏀逛簡涓嬭屽緱姝ょ瘒錛屽師鏂囪澆浜?/span>http://blog.csdn.net/billdavid/archive/2004/06/23/24317.aspx
鍙﹀鍏充簬铏氱戶鎵垮拰铏氬熀綾葷殑璁ㄨ錛屽崥瀹㈠洯鏈夌瘒鏂囩珷銆?/span>铏氱戶鎵夸笌铏氬熀綾葷殑鏈川銆嬶紝鎬葷粨寰楁洿涓鴻緇嗕竴鐐廣?/span>
濡備綍鍦?/span>C++涓皟鐢?/span>C鐨勪唬鐮?/span>
浠ュ墠鏇劇粡鎬葷粨榪囦竴綃?http://m.shnenglu.com/franksunny/archive/2007/11/29/37510.html)錛屽叧浜庡湪C涓浣曡皟鐢?/span>C++鐨勪唬鐮侊紝褰撴椂騫舵湭鍋氬畬鍏ㄧ殑灞曞紑錛屽彧鏄畝鍗曠殑鍋氫簡涓嬭皟璇曪紝鏈榪戠湅鍒頒竴涓鐩姹傚疄鐜?/span>C鍜?/span>C++涓唬鐮佺殑浜掔浉璋冪敤錛屽叾緇撴灉铏界劧閮芥槸閫氳繃extern “C”鏉ュ疄鐜?/span>錛屼絾鏄叿浣撹繕鏄湁浜涘樊鍒殑銆?/span>
鍏堝C涓皟鐢?/span>C++浠g爜浣滀釜綆鍗曞洖欏撅細
1銆?span style="FONT: 7pt 'Times New Roman'"> 瀵逛簬C++涓潪綾葷殑鎴愬憳鍑芥暟錛屽彲浠ョ畝鍗曠殑鍦?span style="COLOR: red">鍑芥暟澹版槑鍓嶉潰鍔?/span>extern “C”錛岄氬父鍑芥暟澹版槑浣嶄簬澶存枃浠朵腑錛屽綋鐒朵篃鍙互灝嗗0鏄庡拰鍑芥暟瀹氫箟涓璧鋒斁鍦?/span>cpp涓?/span>錛屽湪娌℃湁澹版槑鐨勬儏鍐典笅錛岀洿鎺ュ湪瀹氫箟鍓嶆坊鍔?/span>extern “C”涔熷彲
2銆?span style="FONT: 7pt 'Times New Roman'"> 瀵逛簬C++綾葷殑鎴愬憳鍑芥暟錛屽垯闇瑕佸彟澶栧仛涓涓?/span>cpp鏂囦歡錛屽皢闇瑕佽皟鐢ㄧ殑鍑芥暟榪涜鍖呰銆?/span>
浠ヤ笂涓ら」鐨勫疄渚嬪弬鐪嬪墠闈?/span>C涓浣曡皟鐢?/span>C++浠g爜鐨勬枃绔犮?/span>
瑕佸疄鐜?/span>C++涓皟鐢?/span>C鐨勪唬鐮侊紝鍏蜂綋鎿嶄綔錛?/span>
瀵逛簬C涓殑鍑芥暟浠g爜錛岃涔?span style="COLOR: red">灝?/span>C浠g爜鐨勫ご鏂囦歡榪涜淇敼錛屽湪鍏惰鍚叆C++浠g爜鏃跺湪澹版槑涓姞鍏?/span>extern “C”鎴栬?span style="COLOR: red">鍦?/span>C++浠g爜涓噸鏂板0鏄庝竴涓?/span>C鍑芥暟錛岄噸鏂板0鏄庢椂娣誨姞涓?/span>extern “C”澶?/span>銆?/span>
閫氳繃浠ヤ笂鐨勮鏄庯紝鎴戞槑鐧戒竴鐐癸紝閭e氨鏄?span style="COLOR: red">鍔?/span>extern “C”澶翠竴瀹氭槸鍔犲湪C++鐨勪唬鐮佹枃浠朵腑鎵嶈兘璧蜂綔鐢ㄧ殑銆?/span>
涓嬮潰鍒嗘瀽涓涓嬭繖涓幇璞$殑瀹炶川鍘熷洜錛?/span>
C緙栬瘧鍣ㄧ紪璇戝嚱鏁版椂涓嶅甫鍑芥暟鐨勭被鍨嬩俊鎭紝鍙寘鍚嚱鏁扮鍙峰悕瀛楋紝濡?/span>C緙栬瘧鍣ㄦ妸鍑芥暟int a(float x)緙栬瘧鎴愮被浼?/span>_a榪欐牱鐨勭鍙鳳紝C榪炴帴鍣ㄥ彧瑕佹壘鍒頒簡璋冪敤鍑芥暟鐨勭鍙鳳紝灝卞彲浠ヨ繛鎺ユ垚鍔燂紝瀹冨亣璁懼弬鏁扮被鍨嬩俊鎭槸姝g‘鐨勶紝榪欐槸C緙栬瘧榪炴帴鍣ㄧ殑緙虹偣銆傝?/span>C++緙栬瘧鍣ㄤ負浜嗗疄鐜板嚱鏁伴噸杞斤紝緙栬瘧鏃朵細甯︿笂鍑芥暟鐨勭被鍨嬩俊鎭紝濡備粬鎶婁笂闈㈢殑a鍑芥暟鍙兘緙栬瘧鎴?/span>_a_float榪欐牱鐨勭鍙蜂負浜嗗疄鐜伴噸杞斤紝娉ㄦ剰瀹冭繕鏄病鏈夊甫榪斿洖鍊煎緱淇℃伅錛岃繖涔熸槸涓轟粈涔?/span>C++涓嶆敮鎸侀噰鐢ㄥ嚱鏁拌繑鍥炲兼潵鍖哄埆鍑芥暟閲嶈澆鐨勫師鍥犱箣涓錛屽綋鐒訛紝鍑芥暟鐨勪嬌鐢ㄨ呭鍑芥暟榪斿洖鍊肩殑澶勭悊鏂瑰紡錛堝蹇界暐錛変篃鏄噸瑕佸師鍥犮?/span>
鍩轟簬浠ヤ笂錛?/span>C璋冪敤C++錛岄鍏堥渶瑕佺敤灝佽鍑芥暟鎶婂C++鐨勭被絳夌殑璋冪敤灝佽鎴?/span>C鍑芥暟浠ヤ究C璋冪敤錛屼簬鏄?/span>extern "C"鐨勪綔鐢ㄦ槸錛氳緙栬瘧鍣ㄧ煡閬撹繖浠朵簨錛岀劧鍚?span style="COLOR: red">浠?/span>C璇█鐨勬柟寮忕紪璇戝拰榪炴帴灝佽鍑芥暟錛?span style="COLOR: red">閫氬父鏄妸灝佽鍑芥暟鐢?/span>C++緙栬瘧鍣ㄦ寜C++鏂瑰紡緙栬瘧錛岀敤浜?/span>extern "C" 鍚庯紝緙栬瘧鍣ㄤ究渚?/span>C鐨勬柟寮忕紪璇戝皝瑁呮帴鍙o紝褰撶劧鎺ュ彛鍑芥暟閲岄潰鐨?/span>C++璇硶榪樻槸鎸?/span>C++鏂瑰紡緙栬瘧錛涘浜?/span>C璇█閮ㄥ垎--璋冪敤鑰咃紝榪樻槸鎸?/span>C璇█緙栬瘧錛涘垎鍒C++鎺ュ彛閮ㄥ垎鍜?/span>C閮ㄥ垎緙栬瘧鍚庯紝鍐嶈繛鎺ュ氨鍙互瀹炵幇C璋冪敤C++浜?/span>錛夈傜浉鍙?/span>,C++璋冪敤C鍑芥暟錛?/span>extern "C" 鐨勪綔鐢ㄦ槸錛氳C++榪炴帴鍣ㄦ壘璋冪敤鍑芥暟鐨勭鍙鋒椂閲囩敤C鐨勬柟寮?/span>錛屽嵆浣跨敤_a鑰屼笉鏄?/span>_a_float鏉ユ壘璋冪敤鍑芥暟銆?/span>
鍏蜂綋紺轟緥璇瘋http://m.shnenglu.com/Files/franksunny/CCallCpp.rar
娉細濡傛灉浣犵敤VC6.0緙栬瘧闄勪歡鏃墮亣鍒扮被浼?/span>“fatal error C1010: unexpected end of file while looking for precompiled header directive”鎶ラ敊鐨勮瘽錛岃灝?/span>bb.c鏂囦歡鍋氬涓嬪鐞嗗彸閿偣鍑婚」鐩伐紼嬩腑鐨勮鏂囦歡錛岄夋嫨setting錛屽湪c/c++鏍忥紝閫夋嫨PreCompiled headers錛岀劧鍚庤緗涓閫夐」錛岄夋嫨涓嶄嬌鐢ㄩ緙栬瘧澶淬?/span>
浠婂ぉ鎺ュ埌鐢佃瘽闈㈣瘯錛岃闂埌鍑犱釜闂錛屾睏棰滀箣浣欙紝灝忕粨涓涓?/span>
1銆?span style="FONT: 7pt 'Times New Roman'"> 澶氭佹槸濡備綍瀹炵幇緇戝畾鐨?/span>
澶氭佺殑緇戝畾鍙互鍒嗕負榪愯鏄鎬佸拰緙栬瘧鏃跺鎬?/span>
鈼?/span> 緙栬瘧鏃剁殑澶氭佹?/span>
緙栬瘧鏃剁殑澶氭佹ф槸閫氳繃閲嶈澆鏉ュ疄鐜扮殑銆傚浜庨潪铏氱殑鎴愬憳鏉ヨ錛岀郴緇熷湪緙栬瘧鏃訛紝鏍規嵁浼犻掔殑鍙傛暟銆佽繑鍥炵殑綾誨瀷絳変俊鎭喅瀹氬疄鐜頒綍縐嶆搷浣溿?/span>
鈼?/span> 榪愯鏃剁殑澶氭佹?/span>
榪愯鏃剁殑澶氭佹у氨鏄寚鐩村埌緋葷粺榪愯鏃訛紝鎵嶆牴鎹疄闄呮儏鍐靛喅瀹氬疄鐜頒綍縐嶆搷浣溿?/span>C#涓紝榪愯鏃剁殑澶氭佹ч氳繃铏氭垚鍛樺疄鐜般?/span>
緙栬瘧鏃剁殑澶氭佹т負鎴戜滑鎻愪緵浜嗚繍琛岄熷害蹇殑鐗圭偣錛岃岃繍琛屾椂鐨勫鎬佹у垯甯︽潵浜嗛珮搴︾伒媧誨拰鎶借薄鐨勭壒鐐廣?/span>
浠婂ぉ鎵嶆寮忓紕娓呮鍘熸潵铏氬嚱鏁版槸鍙互瀹炵幇榪愯鏃跺鎬佺殑錛屼互鍓嶅彧鐭ラ亾铏氬嚱鏁板彲浠ヤ嬌寰楀熀綾誨璞$殑鐨勬柟娉曡皟鐢ㄦ淳鐢熺被鐨勬柟娉曘?/span>
2銆?span style="FONT: 7pt 'Times New Roman'"> 鏋愭瀯鍑芥暟鏄櫄鍑芥暟鐨勪紭鐐規槸浠涔?/span>
鐢?/span>C++寮鍙戠殑鏃跺欙紝鐢ㄦ潵鍋氬熀綾葷殑綾葷殑鏋愭瀯鍑芥暟涓鑸兘鏄櫄鍑芥暟銆傚彲鏄紝涓轟粈涔堣榪欐牱鍋氬憿錛熶笅闈㈢敤涓涓皬渚嬪瓙鏉ヨ鏄庯細
鏈変笅闈㈢殑涓や釜綾伙細
class ClxBase
{
public:
ClxBase() {};
virtual ~ClxBase() {};
virtual void DoSomething() { cout << "Do something in class ClxBase!" << endl; };
};
class ClxDerived : public ClxBase
{
public:
ClxDerived() {};
~ClxDerived() { cout << "Output from the destructor of class ClxDerived!" << endl; };
void DoSomething() { cout << "Do something in class ClxDerived!" << endl; };
};
浠g爜
ClxBase *pTest = new ClxDerived;
pTest->DoSomething();
delete pTest;
杈撳嚭緇撴灉鏄細
Do something in class ClxDerived!
Output from the destructor of class ClxDerived!
榪欎釜寰堢畝鍗曪紝闈炲父濂界悊瑙c?/span>
浣嗘槸錛屽鏋滄妸綾?/span>ClxBase鏋愭瀯鍑芥暟鍓嶇殑virtual鍘繪帀錛岄偅杈撳嚭緇撴灉灝辨槸涓嬮潰鐨勬牱瀛愪簡錛?/span>
Do something in class ClxDerived!
涔熷氨鏄錛岀被ClxDerived鐨勬瀽鏋勫嚱鏁版牴鏈病鏈夎璋冪敤錛佷竴鑸儏鍐典笅綾葷殑鏋愭瀯鍑芥暟閲岄潰閮芥槸閲婃斁鍐呭瓨璧勬簮錛岃屾瀽鏋勫嚱鏁頒笉琚皟鐢ㄧ殑璇濆氨浼氶犳垚鍐呭瓨娉勬紡銆傛垜鎯蟲墍鏈夌殑C++紼嬪簭鍛橀兘鐭ラ亾榪欐牱鐨勫嵄闄╂с傚綋鐒訛紝濡傛灉鍦ㄦ瀽鏋勫嚱鏁頒腑鍋氫簡鍏朵粬宸ヤ綔鐨勮瘽錛岄偅浣犵殑鎵鏈夊姫鍔涗篃閮芥槸鐧借垂鍔涙皵銆?/span>
鎵浠ワ紝鏂囩珷寮澶寸殑閭d釜闂鐨勭瓟妗堝氨鏄紞錛嶈繖鏍峰仛鏄負浜嗗綋鐢ㄤ竴涓熀綾葷殑鎸囬拡鍒犻櫎涓涓淳鐢熺被鐨勫璞℃椂錛屾淳鐢熺被鐨勬瀽鏋勫嚱鏁頒細琚皟鐢ㄣ?/span>
褰撶劧錛屽茍涓嶆槸瑕佹妸鎵鏈夌被鐨勬瀽鏋勫嚱鏁伴兘鍐欐垚铏氬嚱鏁般傚洜涓哄綋綾婚噷闈㈡湁铏氬嚱鏁扮殑鏃跺欙紝緙栬瘧鍣ㄤ細緇欑被娣誨姞涓涓櫄鍑芥暟琛紝閲岄潰鏉ュ瓨鏀捐櫄鍑芥暟鎸囬拡錛岃繖鏍峰氨浼氬鍔犵被鐨勫瓨鍌ㄧ┖闂淬傛墍浠ワ紝鍙湁褰撲竴涓被琚敤鏉ヤ綔涓哄熀綾葷殑鏃跺欙紝鎵嶆妸鏋愭瀯鍑芥暟鍐欐垚铏氬嚱鏁般?/span>
璇村疄璇濓紝榪欎釜涔熸槸浠婂ぉ鎵嶆繁鍒昏璇嗗埌鐨勩?/span>
褰撶劧榪橀棶鍒板緢澶氭暟鎹粨鏋勫拰綆楁硶鏂歸潰錛堢┖闂村鏉傚害鍜屾椂闂村鏉傚害涔嬬被鐨勪笢涓滐紝璇寸湡鐨勪篃鏄熀紜鎬х殑錛夌殑闂錛岃嚦浜庨偅浜涗笢瑗匡紝鑷繁璇村疄璇濇姏寮娌$敤浠栦滑宸茬粡寰堥暱鏃墮棿浜嗭紝鐪熷彲浠ヨ蹇樼殑宸笉澶氫簡錛岃冭繖縐嶇湡鐨勫緢鎬曪紝涔熸鉤鏃舵病鎬庝箞鐢ㄥ埌銆備笉鐭ラ亾澶у鐢ㄧ殑澶氫笉錛?/span>
濂戒箙娌℃湁姝e紡鍙傚姞榪囬潰璇曚簡錛屼粖澶╃獊鐒舵潵涓嬈¤寰楄嚜宸卞熀紜榪樻槸涓嶅鎵庡疄銆?/span>
C涓浣曡皟鐢?/span>C++鍑芥暟?
鍓嶉樀瀛愯闂強涓涓湪C涓浣曡皟鐢?/span>C++鍑芥暟鐨勯棶棰?/span>錛屽綋鏃剁畝鍗曞洖絳旀槸灝嗗嚱鏁?/span>鐢?span lang=EN-US style="COLOR: black">extern "C"澹版槑錛屽綋琚棶鍙婂浣曞皢綾誨唴鎴愬憳鍑芥暟澹版槑鏃訛紝涓鏃惰濉烇紝鍚庢潵緗戜笂鏌ヤ簡涓嬶紝緗戜笂鏈変竴緲昏瘧C++涔嬬埗鐨勬枃绔犲彲浠ヤ綔涓鴻В絳旓紝閬傛嬁鏉?span lang=EN-US>Mark涓涓嬨?span lang=EN-US>
灝?/span> C++ 鍑芥暟澹版槑涓?/span>``extern "C"''錛堝湪浣犵殑 C++ 浠g爜閲屽仛榪欎釜澹版槑錛夛紝鐒跺悗璋冪敤瀹冿紙鍦ㄤ綘鐨?/span> C 鎴栬?/span> C++ 浠g爜閲岃皟鐢級銆備緥濡傦細
// C++ code:
extern "C" void f(int);
void f(int i)
{
// ...
}
鐒跺悗錛屼綘鍙互榪欐牱浣跨敤 f()錛?/span>
/* C code: */
void f(int);
void cc(int i)
{
f(i);
/* ... */
}
褰撶劧錛岃繖鎷涘彧閫傜敤浜庨潪鎴愬憳鍑芥暟銆傚鏋滀綘鎯寵鍦?/span> C 閲岃皟鐢ㄦ垚鍛樺嚱鏁幫紙鍖呮嫭铏氬嚱鏁幫級錛屽垯闇瑕佹彁渚涗竴涓畝鍗曠殑鍖呰錛?/span>wrapper錛夈備緥濡傦細
// C++ code:
class C
{
// ...
virtual double f(int);
};
extern "C" double call_C_f(C* p, int i) // wrapper function
{
return p->f(i);
}
鐒跺悗錛屼綘灝卞彲浠ヨ繖鏍瘋皟鐢?/span> C::f()錛?/span>
/* C code: */
double call_C_f(struct C* p, int i);
void ccc(struct C* p, int i)
{
double d = call_C_f(p,i);
/* ... */
}
濡傛灉浣犳兂鍦?/span> C 閲岃皟鐢ㄩ噸杞藉嚱鏁幫紝鍒欏繀欏繪彁渚涗笉鍚屽悕瀛楃殑鍖呰錛岃繖鏍鋒墠鑳借 C 浠g爜璋冪敤銆備緥濡?/span>錛?/span>
// C++ code:
void f(int);
void f(double);
extern "C" void f_i(int i) { f(i); }
extern "C" void f_d(double d) { f(d); }
鐒跺悗錛屼綘鍙互榪欐牱浣跨敤姣忎釜閲嶈澆鐨?/span> f()錛?/span>
/* C code: */
void f_i(int);
void f_d(double);
void cccc(int i,double d)
{
f_i(i);
f_d(d);
/* ... */
}
娉ㄦ剰錛岃繖浜涙妧宸т篃閫傜敤浜庡湪 C 閲岃皟鐢?/span> C++ 綾誨簱錛屽嵆浣夸綘涓嶈兘錛堟垨鑰呬笉鎯籌級淇敼 C++ 澶存枃浠躲?/span>
http://www.research.att.com/~bs/bs_faq2.html#callCpp
鏈潵璐村嚭鏉ヤ互鍚庡彈鍒板緢澶欳/C++鏈嬪弸鐨勫叧娉紝闈炲父鑽e垢錛屽湪“姊﹀湪澶╂動”鐨勬彁閱掍笅錛屾湰浜哄悗鏉ュ張瀹屾垚浜嗕竴涓狣emo宸ョ▼錛屽彂鐜板拰BJ璇寸殑鏈夌偣鍑哄叆錛屽笇鏈涙湁楂樻墜鎸囩偣錛孌emo宸ョ▼涓嬭澆閾炬帴濡備笅錛?/o:p>http://m.shnenglu.com/Files/franksunny/cCallCppDemo.rar
//鏍規嵁緇撴灉涔熷氨鏄錛屾棤絎﹀彿絎﹀彿鏁版嵁鏄彲浠ュ瓨鍌ㄥ湪鏈夌鍙峰瀷鍙橀噺鍐呭瓨涓殑,
//鑰屼笖鏈変緥瀛愬湪鍐呭瓨鍧楅暱搴︿竴鏍鋒椂錛屼笉鐢ㄥ己杞紝鐩存帴璧嬬粰鏃犵鍙峰彉閲忔椂涔熷彲琛?br>//涓婅堪浜嬪疄鍙互瑙i噴涓哄唴瀛樺潡涓嶅彉錛岄噰鐢ㄤ笉鍚岀殑瑙g爜鏂瑰紡瑙e嚭涓嶅悓鐨勬暟鎹?br>//浣嗘槸璇誨嚭鏉ョ殑鏃跺欒娉ㄦ剰錛屽鏋滄湁絎﹀彿杞棤絎﹀彿涓瀹氳寮鴻漿
//涔嬫墍浠ヤ笂渚媢nsigned int杈撳嚭-1錛屾垜騫朵笉鏄緢娓呮
Reserved String | Meaning | |
Date | $DATE$ | Year/month/day formatted as %04d/%02d/%02d |
$DAY$ | Day of month formatted as %d | |
$DAY_02$ | Day of month formatted as %02d | |
$DAYNAME$ | Three-character abbreviation of day | |
$DAYLONGNAME$ | Full name of day | |
$MONTH$ | Month formatted as %d | |
$MONTH_02$ | Month formatted as %02d | |
$MONTHNAME$ | Three-character abbreviation of month | |
$MONTHLONGNAME$ | Full name of month | |
$YEAR$ | Year formatted as %d | |
$YEAR_02$ | Year formatted as %02d | |
File | $FILE$ | Full filename with path* |
$FILE_UPPER$ | Full filename with path in uppercase* | |
$FILE_BASE$ | Filename without path or extension* | |
$FILE_BASE_UPPER$ | Filename without path or extension in upper case* | |
$FILE_EXT$ | Filename extension* | |
$FILE_EXT_UPPER$ | Filename extension in upper case* | |
$FILE_PATH$ | Path of file* | |
$FILE_PATH_UPPER$ | Path of file in upper case* | |
General | $clipboard$ | Current clipboard |
$end$ | Position of caret after expansion | |
$selected$ | Current selection** | |
$$ | $ | |
GUID | $GUID_DEFINITION$ | Generated GUID formatted for use in a definition |
$GUID_STRING$ | Generated GUID formatted for use in a string | |
$GUID_STRUCT$ | Generated GUID formatted for use in a struct | |
(Note that all instances of GUID reserved words will use a singe generated GUID.) | ||
Refactor | $GeneratedPropertyName$ | Property name generated during Encapsulate Field |
$MethodArg$ | One parameter of the method and its type | |
$MethodArgName$ | One parameter of the method | |
$MethodArgType$ | Type of one parameter of the method | |
$MethodBody$ | Body of implementation | |
$MethodQualifier$ | Optional qualifiers of method | |
$ParameterList$ | Parameters separated by commas | |
$SymbolContext$ | Context and name of method | |
$SymbolName$ | Name of method | |
$SymbolPrivileges$ | Access of method | |
$SymbolStatic$ | Keyword static or blank | |
$SymbolType$ | Return type of method | |
$SymbolVirtual$ | Keyword virtual or blank | |
Time | $HOUR$ | Hour formatted as %d |
$HOUR_02$ | Hour formatted as %02d | |
$MINUTE$ | Minute formatted as %02d | |
$SECOND$ | Second formatted as %02d |
鍙噸鍏ュ嚱鏁頒笌涓嶅彲閲嶅叆鍑芥暟
涓昏鐢ㄤ簬澶氫換鍔$幆澧冧腑錛屼竴涓彲閲嶅叆鐨勫嚱鏁扮畝鍗曟潵璇村氨鏄彲浠ヨ涓柇鐨勫嚱鏁幫紝涔熷氨鏄錛屽彲浠ュ湪榪欎釜鍑芥暟鎵ц鐨勪換浣曟椂鍒諱腑鏂畠錛岃漿鍏?span lang=EN-US>OS璋冨害涓嬪幓鎵ц鍙﹀涓孌典唬鐮侊紝鑰岃繑鍥炴帶鍒舵椂涓嶄細鍑虹幇浠涔堥敊璇紱鑰屼笉鍙噸鍏ョ殑鍑芥暟鐢變簬浣跨敤浜嗕竴浜涚郴緇熻祫婧愶紝姣斿鍏ㄥ眬鍙橀噺鍖猴紝涓柇鍚戦噺琛ㄧ瓑錛屾墍浠ュ畠濡傛灉琚腑鏂殑璇濓紝鍙兘浼氬嚭鐜伴棶棰橈紝榪欑被鍑芥暟鏄笉鑳借繍琛屽湪澶氫換鍔$幆澧冧笅鐨勩?span lang=EN-US>
涔熷彲浠ヨ繖鏍風悊瑙o紝閲嶅叆鍗寵〃紺洪噸澶嶈繘鍏ワ紝棣栧厛瀹冩剰鍛崇潃榪欎釜鍑芥暟鍙互琚腑鏂紝鍏舵鎰忓懗鐫瀹冮櫎浜嗕嬌鐢ㄨ嚜宸辨爤涓婄殑鍙橀噺浠ュ涓嶄緷璧栦簬浠諱綍鐜錛堝寘鎷?span lang=EN-US>static錛夛紝榪欐牱鐨勫嚱鏁板氨鏄?span lang=EN-US>purecode錛堢函浠g爜錛夊彲閲嶅叆錛屽彲浠ュ厑璁告湁璇ュ嚱鏁扮殑澶氫釜鍓湰鍦ㄨ繍琛岋紝鐢變簬瀹冧滑浣跨敤鐨勬槸鍒嗙鐨勬爤錛屾墍浠ヤ笉浼氫簰鐩稿共鎵般傚鏋滅‘瀹為渶瑕佽闂叏灞鍙橀噺錛堝寘鎷?span lang=EN-US>static錛夛紝涓瀹氳娉ㄦ剰瀹炴柦浜掓枼鎵嬫銆傚彲閲嶅叆鍑芥暟鍦ㄥ茍琛岃繍琛岀幆澧冧腑闈炲父閲嶈錛屼絾鏄竴鑸涓鴻闂叏灞鍙橀噺浠樺嚭涓浜涙ц兘浠d環銆?span lang=EN-US>
緙栧啓鍙噸鍏ュ嚱鏁版椂錛岃嫢浣跨敤鍏ㄥ眬鍙橀噺錛屽垯搴旈氳繃鍏充腑鏂佷俊鍙烽噺錛堝嵆P銆?span lang=EN-US>V鎿嶄綔錛夌瓑鎵嬫瀵瑰叾鍔犱互淇濇姢銆?span lang=EN-US>
璇存槑錛氳嫢瀵規墍浣跨敤鐨勫叏灞鍙橀噺涓嶅姞浠ヤ繚鎶わ紝鍒欐鍑芥暟灝變笉鍏鋒湁鍙噸鍏ユэ紝鍗沖綋澶氫釜榪涚▼璋冪敤姝ゅ嚱鏁版椂錛屽緢鏈夊彲鑳戒嬌鏈夊叧鍏ㄥ眬鍙橀噺鍙樹負涓嶅彲鐭ョ姸鎬併?span lang=EN-US>
紺轟緥錛氬亣璁?span lang=EN-US>Exam鏄?span lang=EN-US>int鍨嬪叏灞鍙橀噺錛屽嚱鏁?span lang=EN-US>Squre_Exam榪斿洖Exam騫蟲柟鍊箋傞偅涔堝涓嬪嚱鏁頒笉鍏鋒湁鍙噸鍏ユс?span lang=EN-US>
unsigned int example( int para )
{
unsigned int temp;
Exam = para; // 錛?span lang=EN-US>**錛?span lang=EN-US>
temp = Square_Exam( );
return temp;
}
姝ゅ嚱鏁拌嫢琚涓繘紼嬭皟鐢ㄧ殑璇濓紝鍏剁粨鏋滃彲鑳芥槸鏈煡鐨勶紝鍥犱負褰擄紙**錛夎鍙ュ垰鎵ц瀹屽悗錛屽彟澶栦竴涓嬌鐢ㄦ湰鍑芥暟鐨勮繘紼嬪彲鑳芥濂借嬋媧伙紝閭d箞褰撴柊嬋媧葷殑榪涚▼鎵ц鍒版鍑芥暟鏃訛紝灝嗕嬌Exam璧嬩笌鍙︿竴涓笉鍚岀殑para鍊鹼紝鎵浠ュ綋鎺у埗閲嶆柊鍥炲埌“temp = Square_Exam( )”鍚庯紝璁$畻鍑虹殑temp寰堝彲鑳戒笉鏄鎯充腑鐨勭粨鏋溿傛鍑芥暟搴斿涓嬫敼榪涖?span lang=EN-US>
unsigned int example( int para ) {
unsigned int temp;
[鐢寵淇″彿閲忔搷浣?span lang=EN-US>] //(1)
Exam = para;
temp = Square_Exam( );
[閲婃斁淇″彿閲忔搷浣?span lang=EN-US>]
return temp;
}
(1)鑻ョ敵璇蜂笉鍒?span lang=EN-US>“淇″彿閲?span lang=EN-US>”錛岃鏄庡彟澶栫殑榪涚▼姝e浜庣粰Exam璧嬪煎茍璁$畻鍏跺鉤鏂硅繃紼嬩腑錛堝嵆姝e湪浣跨敤姝や俊鍙鳳級,鏈繘紼嬪繀欏葷瓑寰呭叾閲婃斁淇″彿鍚庯紝鎵嶅彲緇х畫鎵ц銆傝嫢鐢寵鍒頒俊鍙鳳紝鍒欏彲緇х畫鎵ц錛屼絾鍏跺畠榪涚▼蹇呴』絳夊緟鏈繘紼嬮噴鏀句俊鍙烽噺鍚庯紝鎵嶈兘鍐嶄嬌鐢ㄦ湰淇″彿銆?span lang=EN-US>
淇濊瘉鍑芥暟鐨勫彲閲嶅叆鎬х殑鏂規硶錛?span lang=EN-US>
鍦ㄥ啓鍑芥暟鏃跺欏敖閲忎嬌鐢ㄥ眬閮ㄥ彉閲忥紙渚嬪瀵勫瓨鍣ㄣ佸爢鏍堜腑鐨勫彉閲忥級錛屽浜庤浣跨敤鐨勫叏灞鍙橀噺瑕佸姞浠ヤ繚鎶わ紙濡傞噰鍙栧叧涓柇銆佷俊鍙烽噺絳夋柟娉曪級錛岃繖鏍鋒瀯鎴愮殑鍑芥暟灝變竴瀹氭槸涓涓彲閲嶅叆鐨勫嚱鏁般?span lang=EN-US>
VxWorks涓噰鍙栫殑鍙噸鍏ョ殑鎶鏈湁錛?span lang=EN-US>
* 鍔ㄦ佸爢鏍堝彉閲忥紙鍚勫瓙鍑芥暟鏈夎嚜宸辯嫭绔嬬殑鍫嗘爤絀洪棿錛?span lang=EN-US>
* 鍙椾繚鎶ょ殑鍏ㄥ眬鍙橀噺鍜岄潤鎬佸彉閲?span lang=EN-US>
* 浠誨姟鍙橀噺
--------------------------------------------------
鍦ㄥ疄鏃剁郴緇熺殑璁捐涓紝緇忓父浼氬嚭鐜板涓換鍔¤皟鐢ㄥ悓涓涓嚱鏁扮殑鎯呭喌銆傚鏋滆繖涓嚱鏁頒笉騫歌璁捐鎴愪負涓嶅彲閲嶅叆鐨勫嚱鏁扮殑璇濓紝閭d箞涓嶅悓浠誨姟璋冪敤榪欎釜鍑芥暟鏃跺彲鑳戒慨鏀瑰叾浠栦換鍔¤皟鐢ㄨ繖涓嚱鏁扮殑鏁版嵁錛屼粠鑰屽鑷翠笉鍙鏂欑殑鍚庢灉銆傞偅涔堜粈涔堟槸鍙噸鍏ュ嚱鏁板憿錛熸墍璋撳彲閲嶅叆鍑芥暟鏄寚涓涓彲浠ヨ澶氫釜浠誨姟璋冪敤鐨勮繃紼嬶紝浠誨姟鍦ㄨ皟鐢ㄦ椂涓嶅繀鎷呭績鏁版嵁鏄惁浼氬嚭閿欍備笉鍙噸鍏ュ嚱鏁板湪瀹炴椂緋葷粺璁捐涓瑙嗕負涓嶅畨鍏ㄥ嚱鏁般傛弧瓚充笅鍒楁潯浠剁殑鍑芥暟澶氭暟鏄笉鍙噸鍏ョ殑錛?span lang=EN-US>
1) 鍑芥暟浣撳唴浣跨敤浜嗛潤鎬佺殑鏁版嵁緇撴瀯錛?span lang=EN-US>
2) 鍑芥暟浣撳唴璋冪敤浜?span lang=EN-US>malloc()鎴栬?span lang=EN-US>free()鍑芥暟錛?span lang=EN-US>
3) 鍑芥暟浣撳唴璋冪敤浜嗘爣鍑?span lang=EN-US>I/O鍑芥暟銆?span lang=EN-US>
涓嬮潰涓句緥鍔犱互璇存槑銆?span lang=EN-US>
A. 鍙噸鍏ュ嚱鏁?span lang=EN-US>
void strcpy(char *lpszDest, char *lpszSrc)
{
while(*lpszDest++=*lpszSrc++);
*dest=0;
}
B. 涓嶅彲閲嶅叆鍑芥暟1
charcTemp;//鍏ㄥ眬鍙橀噺
void SwapChar1(char *lpcX, char *lpcY)
{
cTemp=*lpcX;
*lpcX=*lpcY;
lpcY=cTemp;//璁塊棶浜嗗叏灞鍙橀噺
}
C. 涓嶅彲閲嶅叆鍑芥暟2
void SwapChar2(char *lpcX,char *lpcY)
{
static char cTemp;//闈欐佸眬閮ㄥ彉閲?span lang=EN-US>
cTemp=*lpcX;
*lpcX=*lpcY;
lpcY=cTemp;//浣跨敤浜嗛潤鎬佸眬閮ㄥ彉閲?span lang=EN-US>
}
闂1錛屽浣曠紪鍐欏彲閲嶅叆鐨勫嚱鏁幫紵
絳旓細鍦ㄥ嚱鏁頒綋鍐呬笉璁塊棶閭d簺鍏ㄥ眬鍙橀噺錛屼笉浣跨敤闈欐佸眬閮ㄥ彉閲忥紝鍧氭寔鍙嬌鐢ㄥ眬閮ㄥ彉閲忥紝鍐欏嚭鐨勫嚱鏁板氨灝嗘槸鍙噸鍏ョ殑銆傚鏋滃繀欏昏闂叏灞鍙橀噺錛岃浣忓埄鐢ㄤ簰鏂ヤ俊鍙烽噺鏉ヤ繚鎶ゅ叏灞鍙橀噺銆?span lang=EN-US>
闂2錛屽浣曞皢涓涓笉鍙噸鍏ョ殑鍑芥暟鏀瑰啓鎴愬彲閲嶅叆鐨勫嚱鏁幫紵
絳旓細鎶婁竴涓笉鍙噸鍏ュ嚱鏁板彉鎴愬彲閲嶅叆鐨勫敮涓鏂規硶鏄敤鍙噸鍏ヨ鍒欐潵閲嶅啓瀹冦傚叾瀹炲緢綆鍗曪紝鍙閬靛畧浜嗗嚑鏉″緢瀹規槗鐞嗚В鐨勮鍒欙紝閭d箞鍐欏嚭鏉ョ殑鍑芥暟灝辨槸鍙噸鍏ョ殑銆?span lang=EN-US>
1) 涓嶈浣跨敤鍏ㄥ眬鍙橀噺銆傚洜涓哄埆鐨勪唬鐮佸緢鍙兘瑕嗙洊榪欎簺鍙橀噺鍊箋?span lang=EN-US>
2) 鍦ㄥ拰紜歡鍙戠敓浜や簰鐨勬椂鍊欙紝鍒囪鎵ц綾諱技disinterrupt()涔嬬被鐨勬搷浣滐紝灝辨槸鍏抽棴紜歡涓柇銆傚畬鎴愪氦浜掕寰楁墦寮涓柇錛屽湪鏈変簺緋誨垪涓婏紝榪欏彨鍋?span lang=EN-US>“榪涘叆/閫鍑烘牳蹇?span lang=EN-US>”銆?span lang=EN-US>
3) 涓嶈兘璋冪敤鍏跺畠浠諱綍涓嶅彲閲嶅叆鐨勫嚱鏁般?span lang=EN-US>
4) 璋ㄦ厧浣跨敤鍫嗘爤銆傛渶濂藉厛鍦ㄤ嬌鐢ㄥ墠鍏?span lang=EN-US>OS_ENTER_KERNAL銆?span lang=EN-US>
鍫嗘爤鎿嶄綔娑夊強鍐呭瓨鍒嗛厤錛岀◢涓嶇暀紲炲氨浼氶犳垚鐩婂嚭瀵艱嚧瑕嗙洊鍏朵粬浠誨姟鐨勬暟鎹紝鎵浠ワ紝璇瘋皚鎱庝嬌鐢ㄥ爢鏍堬紒鏈濂藉埆鐢紒寰堝榛戝紼嬪簭灝卞埄鐢ㄤ簡榪欎竴鐐逛互渚跨郴緇熸墽琛岄潪娉曚唬鐮佷粠鑰岃交鏉捐幏寰楃郴緇熸帶鍒舵潈銆傝繕鏈変竴浜涜鍒欙紝鎬諱箣錛屾椂鍒昏浣忎竴鍙ヨ瘽錛氫繚璇佷腑鏂槸瀹夊叏鐨勶紒
瀹炰緥闂錛氭浘緇忚璁¤繃濡備笅涓涓嚱鏁幫紝鍦ㄤ唬鐮佹瑙嗙殑鏃跺欒鎻愰啋鏈?span lang=EN-US>bug錛屽洜涓鴻繖涓嚱鏁版槸涓嶅彲閲嶅叆鐨勶紝涓轟粈涔堬紵
unsigned int sum_int( unsigned int base )
{
unsigned int index;
static unsigned int sum = 0; // 娉ㄦ剰錛屾槸static綾誨瀷
for (index = 1; index <= base; index++)
sum += index;
return sum;
}
鍒嗘瀽錛氭墍璋撶殑鍑芥暟鏄彲閲嶅叆鐨勶紙涔熷彲浠ヨ鏄彲棰勬祴鐨勶級錛屽嵆鍙杈撳叆鏁版嵁鐩稿悓灝卞簲浜х敓鐩稿悓鐨勮緭鍑恒傝繖涓嚱鏁頒箣鎵浠ユ槸涓嶅彲棰勬祴鐨勶紝灝辨槸鍥犱負鍑芥暟涓嬌鐢ㄤ簡static鍙橀噺錛屽洜涓?span lang=EN-US>static鍙橀噺鐨勭壒寰侊紝榪欐牱鐨勫嚱鏁拌縐頒負錛氬甫“鍐呴儴瀛樺偍鍣?span lang=EN-US>”鍔熻兘鐨勭殑鍑芥暟銆傚洜姝ゅ鏋滈渶瑕佷竴涓彲閲嶅叆鐨勫嚱鏁幫紝涓瀹氳閬垮厤鍑芥暟涓嬌鐢?span lang=EN-US>static鍙橀噺錛岃繖縐嶅嚱鏁頒腑鐨?span lang=EN-US>static鍙橀噺錛屼嬌鐢ㄥ師鍒欐槸錛岃兘涓嶇敤灝介噺涓嶇敤銆?span lang=EN-US>
灝嗕笂闈㈢殑鍑芥暟淇敼涓哄彲閲嶅叆鐨勫嚱鏁幫紝鍙灝嗗0鏄?span lang=EN-US>sum鍙橀噺涓殑static鍏抽敭瀛楀幓鎺夛紝鍙橀噺sum鍗沖彉涓轟竴涓?span lang=EN-US>auto綾誨瀷鐨勫彉閲忥紝鍑芥暟鍗沖彉涓轟竴涓彲閲嶅叆鐨勫嚱鏁般?span lang=EN-US>
褰撶劧錛屾湁浜涙椂鍊欙紝鍦ㄥ嚱鏁頒腑鏄繀欏昏浣跨敤static鍙橀噺鐨勶紝姣斿褰撴煇鍑芥暟鐨勮繑鍥炲間負鎸囬拡綾誨瀷鏃訛紝鍒欏繀欏繪槸static鐨勫眬閮ㄥ彉閲忕殑鍦板潃浣滀負榪斿洖鍊鹼紝鑻ヤ負auto綾誨瀷錛屽垯榪斿洖涓洪敊鎸囬拡銆?/span>
鏈榪戣漿鍘繪悶浣庡眰浜涚殑鍗曠墖鏈虹▼搴忕紪紼嬶紝鍦ㄤ竴鍧?span lang=EN-US>msp430涓婅澧炲姞涓涓浗闄呮爣鍑嗘椂闂達紝鐢變簬浠ュ墠鍦?span lang=EN-US>VC涓兘鏄嬁鏉ョ敤鐨勶紝娌¢亣鍒伴棶棰橈紝涔熷氨涓嶄細鍘繪繁絀躲傚湪鍗曠墖鏈轟笂鎯崇敤鏍囧噯C閲岄潰鐨?span lang=EN-US>time錛?span lang=EN-US>time_t*錛夊嚱鏁版眰寰楃郴緇熸椂闂達紝鏈鍚庣粨鏋滃嚭涓嶆潵銆傚悗鏉ユ墠鐭ラ亾鍘熸潵浠ュ墠鏄彇寰楃殑鏄搷浣滅郴緇熺殑鏃墮棿錛屾睏姝伙紝鍗曠墖鏈烘病緋葷粺鐨勫晩錛屽笇鏈涜兘澶熷敖鏃╄鎴戞悶宓屽叆寮忓晩錛屽懙鍛點?span lang=EN-US>
鍚庢潵鑷繁寮勬槑鐧戒簡錛岃涓椂闂村鹼紝鐒跺悗鐢ㄥ崟鐗囨満鏅舵尟绱姞璁℃暟錛岃繕鏄彲浠ョ敤time.h杞繪澗瀹炵幇鏍囧噯鏃墮棿璁℃椂鐨勶紝鑰屼笖鏂逛究涓嶇敤鑰冭檻鑷繁鍘誨啓鏃墮棿杞崲鍑芥暟錛屼互涓嬫槸鍏蜂綋鐨?span lang=EN-US>time,h鐨勮瑙o紝鎴戝氨涓嶅啀灞曞紑浜嗐?span lang=EN-US>
time.h浠庡ご瀛?span lang=EN-US>
鏈枃浠庝粙緇嶅熀紜姒傚康鍏ユ墜錛屾帰璁ㄤ簡鍦?span lang=EN-US>C/C++涓鏃ユ湡鍜屾椂闂存搷浣滄墍鐢ㄥ埌鐨勬暟鎹粨鏋勫拰鍑芥暟錛屽茍瀵硅鏃躲佹椂闂寸殑鑾峰彇銆佹椂闂寸殑璁$畻鍜屾樉紺烘牸寮忕瓑鏂歸潰榪涜浜嗛槓榪般傛湰鏂囪繕閫氳繃澶ч噺鐨勫疄渚嬪悜浣犲睍紺轟簡time.h澶存枃浠朵腑澹版槑鐨勫悇縐嶅嚱鏁板拰鏁版嵁緇撴瀯鐨勮緇嗕嬌鐢ㄦ柟娉曘?span lang=EN-US>
鍏抽敭瀛楋細UTC錛堜笘鐣屾爣鍑嗘椂闂達級錛?span lang=EN-US>Calendar Time錛堟棩鍘嗘椂闂達級錛?span lang=EN-US>epoch錛堟椂闂寸偣錛夛紝clock tick錛堟椂閽熻鏃跺崟鍏冿級
1錛?/font> 姒傚康
鍦?span lang=EN-US>C/C++涓紝瀵瑰瓧絎︿覆鐨勬搷浣滄湁寰堝鍊煎緱娉ㄦ剰鐨勯棶棰橈紝鍚屾牱錛?span lang=EN-US>C/C++瀵規椂闂寸殑鎿嶄綔涔熸湁璁稿鍊煎緱澶у娉ㄦ剰鐨勫湴鏂廣傛渶榪戯紝鍦ㄦ妧鏈兢涓湁寰堝緗戝弸涔熷嬈¢棶鍒拌繃C++璇█涓鏃墮棿鐨勬搷浣溿佽幏鍙栧拰鏄劇ず絳夌瓑鐨勯棶棰樸備笅闈紝鍦ㄨ繖綃囨枃绔犱腑錛岀瑪鑰呭皢涓昏浠嬬粛鍦?span lang=EN-US>C/C++涓椂闂村拰鏃ユ湡鐨勪嬌鐢ㄦ柟娉?span lang=EN-US>.
閫氳繃瀛︿範璁稿C/C++搴擄紝浣犲彲浠ユ湁寰堝鎿嶄綔銆佷嬌鐢ㄦ椂闂寸殑鏂規硶銆備絾鍦ㄨ繖涔嬪墠浣犻渶瑕佷簡瑙d竴浜?span lang=EN-US>“鏃墮棿”鍜?span lang=EN-US>“鏃ユ湡”鐨勬蹇碉紝涓昏鏈変互涓嬪嚑涓細
Coordinated Universal Time錛?span lang=EN-US>UTC錛夛細鍗忚皟涓栫晫鏃訛紝鍙堢О涓轟笘鐣屾爣鍑嗘椂闂達紝涔熷氨鏄ぇ瀹舵墍鐔熺煡鐨勬牸鏋楀▉娌繪爣鍑嗘椂闂達紙Greenwich Mean Time錛?span lang=EN-US>GMT錛夈傛瘮濡傦紝涓浗鍐呭湴鐨勬椂闂翠笌UTC鐨勬椂宸負+8錛屼篃灝辨槸UTC+8銆傜編鍥芥槸UTC-5銆?span lang=EN-US>
Calendar Time錛氭棩鍘嗘椂闂達紝鏄敤“浠庝竴涓爣鍑嗘椂闂寸偣鍒版鏃剁殑鏃墮棿緇忚繃鐨勭鏁?span lang=EN-US>”鏉ヨ〃紺虹殑鏃墮棿銆傝繖涓爣鍑嗘椂闂寸偣瀵逛笉鍚岀殑緙栬瘧鍣ㄦ潵璇翠細鏈夋墍涓嶅悓錛屼絾瀵逛竴涓紪璇戠郴緇熸潵璇達紝榪欎釜鏍囧噯鏃墮棿鐐規槸涓嶅彉鐨勶紝璇ョ紪璇戠郴緇熶腑鐨勬椂闂村搴旂殑鏃ュ巻鏃墮棿閮介氳繃璇ユ爣鍑嗘椂闂寸偣鏉ヨ 閲忥紝鎵浠ュ彲浠ヨ鏃ュ巻鏃墮棿鏄?span lang=EN-US>“鐩稿鏃墮棿”錛屼絾鏄棤璁轟綘鍦ㄥ摢涓涓椂鍖猴紝鍦ㄥ悓涓鏃跺埢瀵瑰悓涓涓爣鍑嗘椂闂寸偣鏉ヨ錛屾棩鍘嗘椂闂撮兘鏄竴鏍風殑銆?span lang=EN-US>
epoch錛氭椂闂寸偣銆傛椂闂寸偣鍦ㄦ爣鍑?span lang=EN-US>C/C++涓槸涓涓暣鏁幫紝瀹冪敤姝ゆ椂鐨勬椂闂村拰鏍囧噯鏃墮棿鐐圭浉宸殑縐掓暟錛堝嵆鏃ュ巻鏃墮棿錛夋潵琛ㄧず銆?span lang=EN-US>
clock tick錛氭椂閽熻鏃跺崟鍏冿紙鑰屼笉鎶婂畠鍙仛鏃墮挓婊寸瓟嬈℃暟錛夛紝涓涓椂閽熻鏃跺崟鍏冪殑鏃墮棿闀跨煭鏄敱CPU鎺у埗鐨勩備竴涓?span lang=EN-US>clock tick涓嶆槸CPU鐨勪竴涓椂閽熷懆鏈燂紝鑰屾槸C/C++鐨勪竴涓熀鏈鏃跺崟浣嶃?span lang=EN-US>
鎴戜滑鍙互浣跨敤ANSI鏍囧噯搴撲腑鐨?span lang=EN-US>time.h澶存枃浠躲傝繖涓ご鏂囦歡涓畾涔夌殑鏃墮棿鍜屾棩鏈熸墍浣跨敤鐨勬柟娉曪紝鏃犺鏄湪緇撴瀯瀹氫箟錛岃繕鏄懡鍚嶏紝閮藉叿鏈夋槑鏄劇殑C璇█椋庢牸銆備笅闈紝鎴戝皢璇存槑鍦?span lang=EN-US>C/C++涓庢牱浣跨敤鏃ユ湡鐨勬椂闂村姛鑳姐?span lang=EN-US>
2錛?璁℃椂
C/C++涓殑璁℃椂鍑芥暟鏄?span lang=EN-US>clock()錛岃屼笌鍏剁浉鍏崇殑鏁版嵁綾誨瀷鏄?span lang=EN-US>clock_t銆傚湪MSDN涓紝鏌ュ緱瀵?span lang=EN-US>clock鍑芥暟瀹氫箟濡備笅錛?span lang=EN-US>
clock_t clock( void );
榪欎釜鍑芥暟榪斿洖浠?span lang=EN-US>“寮鍚繖涓▼搴忚繘紼?span lang=EN-US>”鍒?span lang=EN-US>“紼嬪簭涓皟鐢?span lang=EN-US>clock()鍑芥暟”鏃朵箣闂寸殑CPU鏃墮挓璁℃椂鍗曞厓錛?span lang=EN-US>clock tick錛夋暟錛屽湪MSDN涓О涔嬩負鎸傞挓鏃墮棿錛?span lang=EN-US>wal-clock錛夈傚叾涓?span lang=EN-US>clock_t鏄敤鏉ヤ繚瀛樻椂闂寸殑鏁版嵁綾誨瀷錛屽湪time.h鏂囦歡涓紝鎴戜滑鍙互鎵懼埌瀵瑰畠鐨勫畾涔夛細
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
寰堟槑鏄撅紝clock_t鏄竴涓暱鏁村艦鏁般傚湪time.h鏂囦歡涓紝榪樺畾涔変簡涓涓父閲?span lang=EN-US>CLOCKS_PER_SEC錛屽畠鐢ㄦ潵琛ㄧず涓縐掗挓浼氭湁澶氬皯涓椂閽熻鏃跺崟鍏冿紝鍏跺畾涔夊涓嬶細
#define CLOCKS_PER_SEC ((clock_t)1000)
鍙互鐪嬪埌姣忚繃鍗冨垎涔嬩竴縐掞紙1姣錛夛紝璋冪敤clock錛堬級鍑芥暟榪斿洖鐨勫煎氨鍔?span lang=EN-US>1銆備笅闈婦涓緥瀛愶紝浣犲彲浠ヤ嬌鐢ㄥ叕寮?span lang=EN-US>clock()/CLOCKS_PER_SEC鏉ヨ綆椾竴涓繘紼嬭嚜韜殑榪愯鏃墮棿錛?span lang=EN-US>
void elapsed_time()
{
printf("Elapsed time:%u secs.\n",clock()/CLOCKS_PER_SEC);
}
褰撶劧錛屼綘涔熷彲浠ョ敤clock鍑芥暟鏉ヨ綆椾綘鐨勬満鍣ㄨ繍琛屼竴涓驚鐜垨鑰呭鐞嗗叾瀹冧簨浠跺埌搴曡姳浜嗗灝戞椂闂達細
#include “stdio.h”
#include “stdlib.h”
#include “time.h”
int main( void )
{
long i =
clock_t start, finish;
double duration;
/* 嫻嬮噺涓涓簨浠舵寔緇殑鏃墮棿*/
printf( "Time to do %ld empty loops is ", i );
start = clock();
while( i-- ) ;
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "%f seconds\n", duration );
system("pause");
}
鍦ㄧ瑪鑰呯殑鏈哄櫒涓婏紝榪愯緇撴灉濡備笅錛?span lang=EN-US>
Time to do 10000000 empty loops is 0.03000 seconds
涓婇潰鎴戜滑鐪嬪埌鏃墮挓璁℃椂鍗曞厓鐨勯暱搴︿負1姣錛岄偅涔堣鏃剁殑綺懼害涔熶負1姣錛岄偅涔堟垜浠彲涓嶅彲浠ラ氳繃鏀瑰彉CLOCKS_PER_SEC鐨勫畾涔夛紝閫氳繃鎶婂畠瀹氫箟鐨勫ぇ涓浜涳紝浠庤屼嬌璁℃椂綺懼害鏇撮珮鍛紵閫氳繃灝濊瘯錛屼綘浼氬彂鐜拌繖鏍鋒槸涓嶈鐨勩傚湪鏍囧噯C/C++涓紝鏈灝忕殑璁℃椂鍗曚綅鏄竴姣銆?span lang=EN-US>
3錛庝笌鏃ユ湡鍜屾椂闂寸浉鍏崇殑鏁版嵁緇撴瀯
鍦ㄦ爣鍑?span lang=EN-US>C/C++涓紝鎴戜滑鍙氳繃tm緇撴瀯鏉ヨ幏寰楁棩鏈熷拰鏃墮棿錛?span lang=EN-US>tm緇撴瀯鍦?span lang=EN-US>time.h涓殑瀹氫箟濡備笅錛?span lang=EN-US>
#ifndef _TM_DEFINED
struct tm {
int tm_sec; /* 縐?span lang=EN-US> – 鍙栧煎尯闂翠負[0,59] */
int tm_min; /* 鍒?span lang=EN-US> - 鍙栧煎尯闂翠負[0,59] */
int tm_hour; /* 鏃?span lang=EN-US> - 鍙栧煎尯闂翠負[0,23] */
int tm_mday; /* 涓涓湀涓殑鏃ユ湡 - 鍙栧煎尯闂翠負[1,31] */
int tm_mon; /* 鏈堜喚錛堜粠涓鏈堝紑濮嬶紝0浠h〃涓鏈堬級 - 鍙栧煎尯闂翠負[0,11] */
int tm_year; /* 騫翠喚錛屽叾鍊肩瓑浜庡疄闄呭勾浠藉噺鍘?/font>1900 */
int tm_wday; /* 鏄熸湡 – 鍙栧煎尯闂翠負[0,6]錛屽叾涓?span lang=EN-US>0浠h〃鏄熸湡澶╋紝1浠h〃鏄熸湡涓錛屼互姝ょ被鎺?/font> */
int tm_yday; /* 浠庢瘡騫寸殑
int tm_isdst; /* 澶忎護鏃舵爣璇嗙錛屽疄琛屽浠ゆ椂鐨勬椂鍊欙紝tm_isdst涓烘銆備笉瀹炶澶忎護鏃剁殑榪涘欙紝tm_isdst涓?span lang=EN-US>0錛涗笉浜嗚В鎯呭喌鏃訛紝tm_isdst()涓鴻礋銆?/font>*/
};
#define _TM_DEFINED
#endif
ANSI C鏍囧噯縐頒嬌鐢?span lang=EN-US>tm緇撴瀯鐨勮繖縐嶆椂闂磋〃紺轟負鍒嗚В鏃墮棿(broken-down time)銆?span lang=EN-US>
鑰屾棩鍘嗘椂闂達紙Calendar Time錛夋槸閫氳繃time_t鏁版嵁綾誨瀷鏉ヨ〃紺虹殑錛岀敤time_t琛ㄧず鐨勬椂闂達紙鏃ュ巻鏃墮棿錛夋槸浠庝竴涓椂闂寸偣錛堜緥濡傦細
#ifndef _TIME_T_DEFINED
typedef long time_t; /* 鏃墮棿鍊?/font> */
#define _TIME_T_DEFINED /* 閬垮厤閲嶅瀹氫箟 time_t */
#endif
澶у鍙兘浼氫駭鐢熺枒闂細鏃㈢劧time_t瀹為檯涓婃槸闀挎暣鍨嬶紝鍒版湭鏉ョ殑鏌愪竴澶╋紝浠庝竴涓椂闂寸偣錛堜竴鑸槸
鍦?span lang=EN-US>time.h澶存枃浠朵腑錛屾垜浠繕鍙互鐪嬪埌涓浜涘嚱鏁幫紝瀹冧滑閮芥槸浠?span lang=EN-US>time_t涓哄弬鏁扮被鍨嬫垨榪斿洖鍊肩被鍨嬬殑鍑芥暟錛?span lang=EN-US>
double difftime(time_t time1, time_t time0);
time_t mktime(struct tm * timeptr);
time_t time(time_t * timer);
char * asctime(const struct tm * timeptr);
char * ctime(const time_t *timer);
姝ゅ錛?span lang=EN-US>time.h榪樻彁渚涗簡涓ょ涓嶅悓鐨勫嚱鏁板皢鏃ュ巻鏃墮棿錛堜竴涓敤time_t琛ㄧず鐨勬暣鏁幫級杞崲涓烘垜浠鉤鏃剁湅鍒扮殑鎶婂勾鏈堟棩鏃跺垎縐掑垎寮鏄劇ず鐨勬椂闂存牸寮?span lang=EN-US>tm錛?span lang=EN-US>
struct tm * gmtime(const time_t *timer); struct tm * localtime(const time_t * timer);
閫氳繃鏌ラ槄MSDN錛屾垜浠彲浠ョ煡閬?span lang=EN-US>Microsoft C/C++ 7.0涓椂闂寸偣鐨勫鹼紙time_t瀵硅薄鐨勫鹼級鏄粠
4錛庝笌鏃ユ湡鍜屾椂闂寸浉鍏崇殑鍑芥暟鍙婂簲鐢?span lang=EN-US>
鍦ㄦ湰鑺傦紝鎴戝皢鍚戝ぇ瀹跺睍紺烘庢牱鍒╃敤time.h涓0鏄庣殑鍑芥暟瀵規椂闂磋繘琛屾搷浣溿傝繖浜涙搷浣滃寘鎷彇褰撳墠鏃墮棿銆佽綆楁椂闂撮棿闅斻佷互涓嶅悓鐨勫艦寮忔樉紺烘椂闂寸瓑鍐呭銆?span lang=EN-US>
4.1 鑾峰緱鏃ュ巻鏃墮棿
鎴戜滑鍙互閫氳繃time()鍑芥暟鏉ヨ幏寰楁棩鍘嗘椂闂達紙Calendar Time錛夛紝鍏跺師鍨嬩負錛?span lang=EN-US>
time_t time(time_t * timer);
濡傛灉浣犲凡緇忓0鏄庝簡鍙傛暟timer錛屼綘鍙互浠庡弬鏁?span lang=EN-US>timer榪斿洖鐜板湪鐨勬棩鍘嗘椂闂達紝鍚屾椂涔熷彲浠ラ氳繃榪斿洖鍊艱繑鍥炵幇鍦ㄧ殑鏃ュ巻鏃墮棿錛屽嵆浠庝竴涓椂闂寸偣錛堜緥濡傦細
#include "time.h"
#include "stdio.h"
int main(void)
{
struct tm *ptr;
time_t lt;
lt =time(NUL);
printf("The Calendar Time now is %d\n",lt);
return 0;
}
榪愯鐨勭粨鏋滀笌褰撴椂鐨勬椂闂存湁鍏籌紝鎴戝綋鏃惰繍琛岀殑緇撴灉鏄細
The Calendar Time now is 1122707619
鍏朵腑1122707619灝辨槸鎴戣繍琛岀▼搴忔椂鐨勬棩鍘嗘椂闂淬傚嵆浠?st1:chsdate w:st="on" Year="1970" Month="1" Day="1" IsLunarDate="False" IsROCDate="False">1970騫?span lang=EN-US>1鏈?span lang=EN-US>1鏃?span lang=EN-US>0鏃?span lang=EN-US>0鍒?span lang=EN-US>0縐?/st1:chsdate>鍒版鏃剁殑縐掓暟銆?span lang=EN-US>
4.2 鑾峰緱鏃ユ湡鍜屾椂闂?span lang=EN-US>
榪欓噷璇寸殑鏃ユ湡鍜屾椂闂村氨鏄垜浠鉤鏃舵墍璇寸殑騫淬佹湀銆佹棩銆佹椂銆佸垎銆佺絳変俊鎭備粠絎?span lang=EN-US>2鑺傛垜浠凡緇忕煡閬撹繖浜涗俊鎭兘淇濆瓨鍦ㄤ竴涓悕涓?span lang=EN-US>tm鐨勭粨鏋勪綋涓紝閭d箞濡備綍灝嗕竴涓棩鍘嗘椂闂翠繚瀛樹負涓涓?span lang=EN-US>tm緇撴瀯鐨勫璞″憿錛?span lang=EN-US>
鍏朵腑鍙互浣跨敤鐨勫嚱鏁版槸gmtime()鍜?span lang=EN-US>localtime()錛岃繖涓や釜鍑芥暟鐨勫師鍨嬩負錛?span lang=EN-US>
struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);
鍏朵腑gmtime()鍑芥暟鏄皢鏃ュ巻鏃墮棿杞寲涓轟笘鐣屾爣鍑嗘椂闂達紙鍗蟲牸鏋楀凹娌繪椂闂達級錛屽茍榪斿洖涓涓?span lang=EN-US>tm緇撴瀯浣撴潵淇濆瓨榪欎釜鏃墮棿錛岃?span lang=EN-US>localtime()鍑芥暟鏄皢鏃ュ巻鏃墮棿杞寲涓烘湰鍦版椂闂淬傛瘮濡傜幇鍦ㄧ敤gmtime()鍑芥暟鑾峰緱鐨勪笘鐣屾爣鍑嗘椂闂存槸
#include "time.h"
#include "stdio.h"
int main(void)
{
struct tm *local;
time_t t;
t=time(NUL);
local=localtime(&t);
printf("Local hour is: %d\n",local->tm_hour);
local=gmtime(&t);
printf("UTC hour is: %d\n",local->tm_hour);
return 0;
}
榪愯緇撴灉鏄細
Local hour is: 15
UTC hour is: 7
4.3 鍥哄畾鐨勬椂闂存牸寮?span lang=EN-US>
鎴戜滑鍙互閫氳繃asctime()鍑芥暟鍜?span lang=EN-US>ctime()鍑芥暟灝嗘椂闂翠互鍥哄畾鐨勬牸寮忔樉紺哄嚭鏉ワ紝涓よ呯殑榪斿洖鍊奸兘鏄?span lang=EN-US>char*鍨嬬殑瀛楃涓層傝繑鍥炵殑鏃墮棿鏍煎紡涓猴細
鏄熸湡鍑?鏈堜喚鏃ユ湡 鏃?span lang=EN-US>:鍒?span lang=EN-US>:縐?騫?/font>\n\0
渚嬪錛?span lang=EN-US>Wed Jan 02 02:03:55 1980\n\0
鍏朵腑\n鏄竴涓崲琛岀錛?span lang=EN-US>\0鏄竴涓┖瀛楃錛岃〃紺哄瓧絎︿覆緇撴潫銆備笅闈㈡槸涓や釜鍑芥暟鐨勫師鍨嬶細
char * asctime(const struct tm * timeptr);
char * ctime(const time_t *timer);
鍏朵腑asctime()鍑芥暟鏄氳繃tm緇撴瀯鏉ョ敓鎴愬叿鏈夊浐瀹氭牸寮忕殑淇濆瓨鏃墮棿淇℃伅鐨勫瓧絎︿覆錛岃?span lang=EN-US>ctime()鏄氳繃鏃ュ巻鏃墮棿鏉ョ敓鎴愭椂闂村瓧絎︿覆銆傝繖鏍風殑璇濓紝asctime錛堬級鍑芥暟鍙槸鎶?span lang=EN-US>tm緇撴瀯瀵硅薄涓殑鍚勪釜鍩熷~鍒版椂闂村瓧絎︿覆鐨勭浉搴斾綅緗氨琛屼簡錛岃?span lang=EN-US>ctime錛堬級鍑芥暟闇瑕佸厛鍙傜収鏈湴鐨勬椂闂磋緗紝鎶婃棩鍘嗘椂闂磋漿鍖栦負鏈湴鏃墮棿錛岀劧鍚庡啀鐢熸垚鏍煎紡鍖栧悗鐨勫瓧絎︿覆銆傚湪涓嬮潰錛屽鏋?span lang=EN-US>t鏄竴涓潪絀虹殑time_t鍙橀噺鐨勮瘽錛岄偅涔堬細
printf(ctime(&t));
絳変環浜庯細
struct tm *ptr;
ptr=localtime(&t);
printf(asctime(ptr));
閭d箞錛屼笅闈㈣繖涓▼搴忕殑涓ゆ潯printf璇彞杈撳嚭鐨勭粨鏋滃氨鏄笉鍚岀殑浜嗭紙闄ら潪浣犲皢鏈湴鏃跺尯璁句負涓栫晫鏍囧噯鏃墮棿鎵鍦ㄧ殑鏃跺尯錛夛細
#include "time.h"
#include "stdio.h"
int main(void)
{
struct tm *ptr;
time_t lt;
lt =time(NUL);
ptr=gmtime(<);
printf(asctime(ptr));
printf(ctime(<));
return 0;
}
榪愯緇撴灉錛?span lang=EN-US>
Sat Jul 30 08:43:03 2005
Sat Jul 30 16:43:03 2005
4.4 鑷畾涔夋椂闂存牸寮?span lang=EN-US>
鎴戜滑鍙互浣跨敤strftime錛堬級鍑芥暟灝嗘椂闂存牸寮忓寲涓烘垜浠兂瑕佺殑鏍煎紡銆傚畠鐨勫師鍨嬪涓嬶細
size_t strftime(
char *strDest,
size_t maxsize,
const char *format,
const struct tm *timeptr
);
鎴戜滑鍙互鏍規嵁format鎸囧悜瀛楃涓蹭腑鏍煎紡鍛戒護鎶?span lang=EN-US>timeptr涓繚瀛樼殑鏃墮棿淇℃伅鏀懼湪strDest鎸囧悜鐨勫瓧絎︿覆涓紝鏈澶氬悜strDest涓瓨鏀?span lang=EN-US>maxsize涓瓧絎︺傝鍑芥暟榪斿洖鍚?span lang=EN-US>strDest鎸囧悜鐨勫瓧絎︿覆涓斁緗殑瀛楃鏁般?span lang=EN-US>
鍑芥暟strftime()鐨勬搷浣滄湁浜涚被浼間簬sprintf()錛氳瘑鍒互鐧懼垎鍙?span lang=EN-US>(%)寮濮嬬殑鏍煎紡鍛戒護闆嗗悎錛屾牸寮忓寲杈撳嚭緇撴灉鏀懼湪涓涓瓧絎︿覆涓傛牸寮忓寲鍛戒護璇存槑涓?span lang=EN-US>strDest涓悇縐嶆棩鏈熷拰鏃墮棿淇℃伅鐨勭‘鍒囪〃紺烘柟娉曘傛牸寮忎覆涓殑鍏朵粬瀛楃鍘熸牱鏀捐繘涓蹭腑銆傛牸寮忓懡浠ゅ垪鍦ㄤ笅闈紝瀹冧滑鏄尯鍒嗗ぇ灝忓啓鐨勩?span lang=EN-US>
%a 鏄熸湡鍑犵殑綆鍐?/font>
%A 鏄熸湡鍑犵殑鍏ㄧО
%b 鏈堝垎鐨勭畝鍐?/font>
%B 鏈堜喚鐨勫叏縐?/font>
%c 鏍囧噯鐨勬棩鏈熺殑鏃墮棿涓?/font>
%C 騫翠喚鐨勫悗涓や綅鏁板瓧
%d 鍗佽繘鍒惰〃紺虹殑姣忔湀鐨勭鍑犲ぉ
%D 鏈?span lang=EN-US>/澶?span lang=EN-US>/騫?/font>
%e 鍦ㄤ袱瀛楃鍩熶腑錛屽崄榪涘埗琛ㄧず鐨勬瘡鏈堢殑絎嚑澶?/font>
%F 騫?span lang=EN-US>-鏈?span lang=EN-US>-鏃?/font>
%g 騫翠喚鐨勫悗涓や綅鏁板瓧錛屼嬌鐢ㄥ熀浜庡懆鐨勫勾
%G 騫村垎錛屼嬌鐢ㄥ熀浜庡懆鐨勫勾
%h 綆鍐欑殑鏈堜喚鍚?/font>
%H 24灝忔椂鍒剁殑灝忔椂
%I 12灝忔椂鍒剁殑灝忔椂
%j 鍗佽繘鍒惰〃紺虹殑姣忓勾鐨勭鍑犲ぉ
%m 鍗佽繘鍒惰〃紺虹殑鏈堜喚
%M 鍗佹椂鍒惰〃紺虹殑鍒嗛挓鏁?/font>
%n 鏂拌絎?/font>
%p 鏈湴鐨?span lang=EN-US>AM鎴?span lang=EN-US>PM鐨勭瓑浠鋒樉紺?/font>
%r 12灝忔椂鐨勬椂闂?/font>
%R 鏄劇ず灝忔椂鍜屽垎閽燂細hh:mm
%S 鍗佽繘鍒剁殑縐掓暟
%t 姘村鉤鍒惰〃絎?/font>
%T 鏄劇ず鏃跺垎縐掞細hh:mm:ss
%u 姣忓懆鐨勭鍑犲ぉ錛屾槦鏈熶竴涓虹涓澶?錛堝間粠0鍒?span lang=EN-US>6錛屾槦鏈熶竴涓?span lang=EN-US>0錛?/font>
%U 絎勾鐨勭鍑犲懆錛屾妸鏄熸湡鏃ュ仛涓虹涓澶╋紙鍊間粠0鍒?span lang=EN-US>53錛?/font>
%V 姣忓勾鐨勭鍑犲懆錛屼嬌鐢ㄥ熀浜庡懆鐨勫勾
%w 鍗佽繘鍒惰〃紺虹殑鏄熸湡鍑狅紙鍊間粠0鍒?span lang=EN-US>6錛屾槦鏈熷ぉ涓?span lang=EN-US>0錛?/font>
%W 姣忓勾鐨勭鍑犲懆錛屾妸鏄熸湡涓鍋氫負絎竴澶╋紙鍊間粠0鍒?span lang=EN-US>53錛?/font>
%x 鏍囧噯鐨勬棩鏈熶覆
%X 鏍囧噯鐨勬椂闂翠覆
%y 涓嶅甫涓栫邯鐨勫崄榪涘埗騫翠喚錛堝間粠0鍒?span lang=EN-US>99錛?/font>
%Y 甯︿笘綰儴鍒嗙殑鍗佽繘鍒跺勾浠?/font>
%z錛?span lang=EN-US>%Z 鏃跺尯鍚嶇О錛屽鏋滀笉鑳藉緱鍒版椂鍖哄悕縐板垯榪斿洖絀哄瓧絎︺?/font>
%% 鐧懼垎鍙?span lang=EN-US>
濡傛灉鎯蟲樉紺虹幇鍦ㄦ槸鍑犵偣浜嗭紝騫朵互12灝忔椂鍒舵樉紺猴紝灝辮薄涓嬮潰榪欐紼嬪簭錛?span lang=EN-US>
#include “time.h”
#include “stdio.h”
int main(void)
{
struct tm *ptr;
time_t lt;
char str[80];
lt=time(NUL);
ptr=localtime(<);
strftime(str,100,"It is now %I %p",ptr);
printf(str);
return 0;
}
鍏惰繍琛岀粨鏋滀負錛?/font>
It is now 4PM
鑰屼笅闈㈢殑紼嬪簭鍒欐樉紺哄綋鍓嶇殑瀹屾暣鏃ユ湡錛?span lang=EN-US>
#include <stdio.h>
#include <time.h>
void main( void )
{
struct tm *newtime;
char tmpbuf[128];
time_t lt1;
time( <1 );
newtime=localtime(<1);
strftime( tmpbuf, 128, "Today is %A, day %d of %B in the year %Y.\n", newtime);
printf(tmpbuf);
}
榪愯緇撴灉錛?span lang=EN-US>
Today is Saturday, day 30 of July in the year 2005.
4.5 璁$畻鎸佺畫鏃墮棿鐨勯暱搴?span lang=EN-US>
鏈夋椂鍊欏湪瀹為檯搴旂敤涓璁$畻涓涓簨浠舵寔緇殑鏃墮棿闀垮害錛屾瘮濡傝綆楁墦瀛楅熷害銆傚湪絎?span lang=EN-US>1鑺傝鏃墮儴鍒嗕腑錛屾垜宸茬粡鐢?span lang=EN-US>clock鍑芥暟涓句簡涓涓緥瀛愩?span lang=EN-US>Clock()鍑芥暟鍙互綺劇‘鍒版縐掔駭銆傚悓鏃訛紝鎴戜滑涔熷彲浠ヤ嬌鐢?span lang=EN-US>difftime()鍑芥暟錛屼絾瀹冨彧鑳界簿紜埌縐掋傝鍑芥暟鐨勫畾涔夊涓嬶細
double difftime(time_t time1, time_t time0);
铏界劧璇ュ嚱鏁拌繑鍥炵殑浠ョ璁$畻鐨勬椂闂撮棿闅旀槸double綾誨瀷鐨勶紝浣嗚繖騫朵笉璇存槑璇ユ椂闂村叿鏈夊悓double涓鏍風殑綺劇‘搴︼紝榪欐槸鐢卞畠鐨勫弬鏁拌寰楃殑錛?span lang=EN-US>time_t鏄互縐掍負鍗曚綅璁$畻鐨勶級銆傛瘮濡備笅闈竴孌電▼搴忥細
#include "time.h"
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
time_t start,end;
start = time(NUL);
system("pause");
end = time(NUL);
printf("The pause used %f seconds.\n",difftime(end,start));//<-
system("pause");
return 0;
}
榪愯緇撴灉涓猴細
璇鋒寜浠繪剰閿戶緇?/font>. . .
The pause used 2.000000 seconds.
璇鋒寜浠繪剰閿戶緇?span lang=EN-US>. . .
鍙互鎯沖儚錛屾殏鍋滅殑鏃墮棿騫朵笉閭d箞宸ф槸鏁存暣2縐掗挓銆傚叾瀹烇紝浣犲皢涓婇潰紼嬪簭鐨勫甫鏈?span lang=EN-US>“//<-”娉ㄩ噴鐨勪竴琛岀敤涓嬮潰鐨勪竴琛屼唬鐮佹浛鎹細
printf("The pause used %f seconds.\n",end-start);
鍏惰繍琛岀粨鏋滄槸涓鏍風殑銆?span lang=EN-US>
4.6 鍒嗚В鏃墮棿杞寲涓烘棩鍘嗘椂闂?span lang=EN-US>
榪欓噷璇寸殑鍒嗚В鏃墮棿灝辨槸浠ュ勾銆佹湀銆佹棩銆佹椂銆佸垎銆佺絳夊垎閲忎繚瀛樼殑鏃墮棿緇撴瀯錛屽湪C/C++涓槸tm緇撴瀯銆傛垜浠彲浠ヤ嬌鐢?span lang=EN-US>mktime錛堬級鍑芥暟灝嗙敤tm緇撴瀯琛ㄧず鐨勬椂闂磋漿鍖栦負鏃ュ巻鏃墮棿銆傚叾鍑芥暟鍘熷瀷濡備笅錛?span lang=EN-US>
time_t mktime(struct tm * timeptr);
鍏惰繑鍥炲煎氨鏄漿鍖栧悗鐨勬棩鍘嗘椂闂淬傝繖鏍鋒垜浠氨鍙互鍏堝埗瀹氫竴涓垎瑙f椂闂達紝鐒跺悗瀵硅繖涓椂闂磋繘琛屾搷浣滀簡錛屼笅闈㈢殑渚嬪瓙鍙互璁$畻鍑?st1:chsdate w:st="on" Year="1997" Month="7" Day="1" IsLunarDate="False" IsROCDate="False">1997騫?span lang=EN-US>7鏈?span lang=EN-US>1鏃?/st1:chsdate>鏄槦鏈熷嚑錛?span lang=EN-US>
#include "time.h"
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
struct tm t;
time_t t_of_day;
t.tm_year=1997-1900;
t.tm_mon=6;
t.tm_mday=1;
t.tm_hour=0;
t.tm_min=0;
t.tm_sec=1;
t.tm_isdst=0;
t_of_day=mktime(&t);
printf(ctime(&t_of_day));
return 0;
}
榪愯緇撴灉錛?/font>
Tue Jul 01 00:00:01 1997
鐜板湪娉ㄦ剰浜嗭紝鏈変簡mktime()鍑芥暟錛屾槸涓嶆槸鎴戜滑鍙互鎿嶄綔鐜板湪涔嬪墠鐨勪換浣曟椂闂村憿錛熶綘鍙互閫氳繃榪欑鍔炴硶綆楀嚭1945騫?span lang=EN-US>8鏈?span lang=EN-US>15鍙鋒槸鏄熸湡鍑犲悧錛熺瓟妗堟槸鍚﹀畾鐨勩傚洜涓鴻繖涓椂闂村湪
鐢?/span>switch閫夋嫨緇撴瀯鐞嗚В灞閮ㄥ彉閲?/span>
鍑芥暟浣撳唴閮ㄨ嚜瀹氫箟鍙橀噺錛岀О涓哄眬閮ㄥ彉閲忥紝瀛樺偍浜庢爤錛?/span>stack錛変腑錛岀敱緙栬瘧鍣ㄨ嚜鍔ㄥ垎閰嶅拰閲婃斁錛屽眬閮ㄥ彉閲忕殑鐢熷瓨鏈燂紙鎴栬呰浣滅敤鍩燂級鏄綋鍓嶅嚱鏁板唴閮紝浣跨敤鏃跺繀欏誨垵濮嬪寲錛屽惁鍒欏叾鍊煎皢涓嶅畾銆備互鍓嶅灞閮ㄥ彉閲忕殑瀹氫箟涔熷氨鏄繖涔堝錛岃屼笖涔熷氨閭d箞鍦ㄧ敤銆傝繎鏈熺鍒板涓嬩竴涓棶棰橈細
void func( void )
{
int x = 2;
switch ( x )
{
int m =0; //initialization skipped by case0,case1,case2,default
case 0 :
int i = 0; //initialization skipped by case1,case2,default
{ int j = 1; } // OK, initialized in enclosing block
break;
case 1 :
break;
case 2:
break;
default:
int k = 1; // OK, initialization not skipped
}
}
閬囧埌榪欎釜闂錛岀綉涓婄殑瑙g瓟寰堝錛屽緢澶氫漢瑙夊緱switch鍐呬笉鑳藉畾涔夊眬閮ㄥ彉閲忥紝榪欎釜鏄庢樉鏄笉瀵圭殑銆傚洜涓烘垜鎶婁唬鐮佹敼鎴愪互涓嬪艦寮忓悗灝卞畬鍏ㄥ彲浠ョ敤浜嗐?/span>
void func( void )
{
int x = 2;
switch ( x )
{
int m;
m = 0; //without execute;
case 0:
int i;
i = 0;
{ int j = 1; } // OK, initialized in enclosing block
printf("%d %d\n", m, i);
break;
case 1:
i = 1;
printf("%d %d\n", m, i);
break;
case 2:
i = 2;
printf("%d %d\n", m, i);
break;
default:
int k = 1; // OK, initialization not skipped
}
}
緙栬瘧鏃舵湁涓涓?/span>warning錛屽嵆“local variable 'm' used without having been initialized”錛屾墽琛岀粨鏋滀負錛?/span>-858993460 2
鍥犳switch鍐呬笉浣嗗彲浠ュ畾涔夊彉閲忥紝鑰屼笖涔熶笉鐢ㄥ儚寰堝浜烘墍璇寸殑鍦?/span>case鍐呴亣鍒拌鐢ㄥ彉閲忔椂涓瀹氳鐢?/span>{}鎷搗鏉ワ紝涓嶈繃涓ユ牸鐨勮涓嶇敤{}鎵╄搗鏉ョ殑鍙橀噺鏄槸灞炰簬鏁翠釜switch鍧楃粨鏋勭殑錛屼負姝ょ紪紼嬩竴瀹氳灝嗘柊澧炲彉閲忎綔鐢ㄥ煙闄愬畾鍦?/span>case鍐呭氨蹇呴』瑕佺敤{}銆?/span>
閫氳繃switch···case緇撴瀯錛屽灞閮ㄥ彉閲忕殑澹版槑銆佸畾涔変互鍙婂垵濮嬪寲絳夋蹇靛彲浠ユ湁涓涓瘮杈冩竻鏅扮殑璁よ瘑銆傛垜鐨勭悊瑙e氨鏄細澹版槑璇彞涓嶇鏄斁鍦ㄥ摢閲岋紝鍏剁紪璇戞椂閮芥槸灝嗗叾緗《鍒板潡鐨勫ご閮紝濡?/span>int k铏界劧鍦?/span>default涓紝浣嗘槸榪欎釜鍙橀噺鐨勫0鏄庡氨鍦?/span>switch鐨?/span>{}鍐咃紝鍏剁敓瀛樻湡涓庡彉閲?/span>m絳夊悓錛屽彧鏄敱浜庡墠闈㈡病鏈夊0鏄庯紝鎵浠?/span>default涔嬪墠涓嶈兘鐢ㄣ?/span>
鏄ㄥぉ鍘葷綉璁紙鏉窞錛夌瑪璇曚簡錛屽仛浜嗕笅絎旇瘯棰橈紝鎰熻棰樼洰閮戒笉闅撅紝浣嗘槸鑷繁鍋氱殑鐨勭‘涓嶆庝箞鏍鳳紝浼拌鏄病鏈轟細鍘諱簡錛屼笉榪囨殏鏃惰繕鏄厛鎶婂嚑閬撹嚜宸辮繕璁板緱鐨勯鐩紝鍐欏嚭鏉ワ紝鎬葷粨涓嬶紝浠ュ仛澶嶄範銆?/span>
1銆?span style="FONT: 7pt 'Times New Roman'"> 瑕佹眰鑷繁瀹炵幇 String 綾伙紝緇欏嚭浜?/span> String 綾葷殑浠ヤ笅澶存枃浠剁被澹版槑
class String
{
public:
String(const char *m_char = NULL);
String(const String & Str);
String& operator = (const String &Str);
~String();
private:
char * m_Data;
};
鍏充簬 String 綾葷殑絎旇瘯棰橈紝浠ュ墠鐪嬫灄閿愮殑闅忕瑪鏃跺惉璇翠粬鍦ㄥ井杞潰璇曟椂鏇劇鍒伴偅涔堜竴閬撻鐩紝鎴戣嚜宸變篃娌℃湁鐪熺殑涓嬬瑪鍘誨仛榪囷紝騫沖父閮芥槸鎷挎潵灝辯敤鐨勶紝榪欐鑷繁紕板埌錛屾墠鐭ラ亾浼氭寰楅偅涔堟儴錛屽弽姝g紪寰椾笉鍫叆鐩紙鎴戝氨涓嶆嬁鍑烘潵鐚笐浜嗭級錛屼笅闈㈡槸鎴戝洖鏉ュ悗錛岃嚜宸遍噸鏂板啓鐨勭瓟妗堛?/span>
String::String(const char* m_char)
{
int m_nLength = strlen(m_char) + 1;
if (m_Data != NULL)
{
delete [] m_Data;
m_Data = NULL;
}// 浠ヤ笂鍒ゆ柇鏄惁蹇呰 ??
m_Data = new char[m_nLength];
memcpy(m_Data, m_char, m_nLength);
}
String::String(const String &Str)
{
int m_nLength = strlen(Str.m_Data) + 1;// 浠ュ墠鐪熺殑涓嶇煡閬擄紝鍘熸潵瀵硅薄鐨勭鏈夊彉閲?/span>
// 鍦ㄧ被鐨勫疄鐜頒唬鐮佷腑涔熸槸鍙互璁塊棶鐨?/span>
if (m_Data != NULL)
{
delete [] m_Data;
m_Data = NULL;
}// 浠ヤ笂鍒ゆ柇鏄惁蹇呰 ??
m_Data = new char[m_nLength];
memcpy(m_Data, Str.m_Data, m_nLength);
}
String& String::operator = (const String& Str)
{
if(this == &Str)
return *this;
int m_nLength = strlen(Str.m_Data) + 1;
if (m_Data != NULL)
{
delete [] m_Data;
m_Data = NULL;
}// 浠ヤ笂鍒ゆ柇鏄惁蹇呰 ??
m_Data = new char[m_nLength];
memcpy(m_Data, Str.m_Data, m_nLength);
return *this;
}
String::~String()
{
if (m_Data != NULL)
{
delete [] m_Data;
m_Data = NULL;
}
}
2銆?span style="FONT: 7pt 'Times New Roman'"> 鍏充簬鍐呭瓨鍒嗛厤
榪欎釜棰樼洰寰堢畝鍗曪紝灝辯粰浜嗕竴涓嚱鏁幫紝鐒跺悗闂嚱鏁板唴鐨勫眬閮ㄥ彉閲忓瓨鏀懼湪鍝噷錛屾垜涔熶笉鐭ラ亾涓轟粈涔堝綋鏃朵細閫夋嫨 heap( 鍫?/span> ) 錛屼笅闈㈠啀鎶婂嚑涓蹇電綏鍒楀嚭鏉ワ細
1. 鍫嗗尯錛?/span> heap 錛夛細鐢辯▼搴忓憳鐢寵鍒嗛厤鍜岄噴鏀撅紝灞炲姩鎬佸唴瀛樺垎閰嶆柟寮忥紝鑻ョ▼搴忓憳涓嶉噴鏀撅紝紼嬪簭緇撴潫鏃跺彲鑳戒細鐢?/span> OS 鍥炴敹銆備笉榪囪繖涓唴瀛樺垎閰嶅緢瀹規槗寮曡搗闂錛屽鏋滅敵璇風殑鍐呭瓨涓嶉噴鏀懼氨浼氶犳垚鍐呭瓨娉勬紡錛涘鏋滈噴鏀劇殑涓嶆槸鎵瑕侀噴鏀劇殑鍐呭瓨錛屽垯杞昏呭紩璧風▼搴忚繍琛岀粨鏋滃嚭閿欙紝閲嶈呯郴緇熷穿婧冦?/span>
2. 鏍堝尯錛?/span> stack 錛夛細緙栬瘧鍣ㄨ嚜鍔ㄥ垎閰嶉噴鏀撅紝瀛樻斁鍑芥暟鐨勫艦鍙傚箋佸眬閮ㄥ彉閲忕殑鍊鹼紝涔熸槸灞炰簬鍔ㄦ佸唴瀛樺垎閰嶆柟寮忥紝瀹冪敱緋葷粺鍒嗛厤錛屾墍浠ユ墽琛屾晥鐜囦篃楂橈紝涓嶈繃鑷敱搴﹀皬錛屽0鏄庢椂灝卞緱鍐沖畾鍏跺叿浣撳ぇ灝忋?/span>
3. 鍏ㄥ眬鍖猴紙闈欐佸尯錛夛紙 static 錛夛細鍏ㄥ眬鍙橀噺鍜岄潤鎬佸彉閲忕殑瀛樺偍鏄斁鍦ㄤ竴鍧楃殑錛岃屼笖鍒濆鍖栫殑鍏ㄥ眬鍙橀噺鍜岄潤鎬佸彉閲忓湪涓鍧楀尯鍩燂紝鏈垵濮嬪寲鐨勫叏灞鍙橀噺鍜屾湭鍒濆鍖栫殑闈欐佸彉閲忓湪鐩擱偦鐨勫彟涓鍧楀尯鍩熴傜▼搴忕粨鏉熷悗鐢辯郴緇熼噴鏀撅紝鎵浠ヤ篃涓嶄細閫犳垚鍐呭瓨闂銆?/span>
闄や簡浠ヤ笂鐨勫彉閲忓錛岃繕鏈変袱綾誨瓨鏀句綅緗紝鏂囧瓧甯擱噺鍖哄拰紼嬪簭浠g爜鍖猴紝涓よ呴兘鏄敱緋葷粺鍒嗛厤鍜岄噴鏀撅紝涓旀枃瀛楀父閲忓尯鍜屽墠闈笁鍖哄悎鎴愪負紼嬪簭鏁版嵁鍖猴紝涓庣▼搴忎唬鐮佸尯鐩稿搴斻?/span>
3銆?span style="FONT: 7pt 'Times New Roman'"> 鍏充簬綾葷戶鎵跨殑鏋勯犲拰鏋愭瀯鍑芥暟
class Base
{
public:
Base(){cout<< "Base" <<endl;};
~Base(){cout<<"~Base"<<endl;};
protected:
private:
};
class First:public Base
{
public:
First(){cout << "First" << endl;};
~First(){cout << "~First" <<endl;};
};
int main()
{
Base *a = new First;
delete a;
}
闂▼搴忕殑杈撳嚭浼氭槸浠涔堬紵
緇撴灉寰堢畝鍗曪紝涔熷氨鏄?/span> Base
First
~Base
鍏跺畠榪樻湁涓涓叧浜?/span> & 鐨勯鐩紝鎶婃垜鎼炵殑浜戦噷闆鵑噷鐨勶紝榪樿鍐嶇湅浜涗笢瑗挎墠鐭ラ亾鎬庝箞鏉ヨВ閲娿?/span>