锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
瀵逛簬璇誨彇鏁版嵁嫻佹椂錛堝緗戠粶鎴栨枃浠訛級瑕佺壒鍒敞鎰忋?/p>
姣斿
PBYTE pData;
//鎸囧悜鎺ユ敹鍒扮殑鏁版嵁嫻?/p>
int * pi = pData + 榪欐鎺ユ敹鍒版暟鎹祦鐨勫ぇ灝?- 4錛?/p>
//鎸囧悜鎺ユ敹鍒版暟鎹祦鐨勬渶鍚?浣?鍙兘瀹㈡埛绔彂榪囨潵鐨勮繖涓暟鎹祦鏈鍚?浣嶆槸int錛岄偅鏍峰氨鏄榻愬ソ鐨勪簡銆備篃鏈夊彲鑳戒笉鏄痠nt銆?/p>
if *pi = 4561321 endparse data;//鍒ゆ柇浣滀負鏁版嵁嫻佺殑緇撴潫鏍囧織錛屾渶鍚?浣嶇殑鍓嶉潰鍙兘鏄叏鏄痗har鐨勩?/p>
鐢變簬榪欐渶鍚?浣嶅彲鑳戒笉鏄痠nt錛岄偅鏍峰氨鏈夊彲鑳戒笉瀵歸綈錛岃繖閲屽氨浼氬嚭鐜癉atatype misalignment閿欒銆備絾鏄垜浠繕鏄繀欏婚氳繃鏈鍚?浣嶄綔涓虹粨鏉熸爣蹇楋紝鑰屽彧鏈夌煡閬撲粈涔堟椂鍊欑粨鏉熸墠鑳界敤int鎸囬拡鎸囧悜鏈鍚?浣嶆墠涓嶄細鍑虹幇瀵歸綈閿欒銆傝繖鏍峰艦鎴愪簡涓涓寰幆錛岄毦閬撴病鍔炴硶瑙e喅浜嗕箞錛?/p>
PBYTE pData;
PBYTE * pi = pData + 榪欐鎺ユ敹鍒版暟鎹祦鐨勫ぇ灝?- 4錛?/p>
int i;
memcpy(&i, pi, 4);
if i = 4561321 endparse data;
榪欐牱灝卞彲浠ヨВ鍐崇敤int* pi鎸囧悜鏈榻愮殑int閿欒浜嗐?/p>
榪欎竴鎷涘鎵鏈夌鍒癉atatype misalignment鐨勬暟鎹殑璁塊棶搴旇閮芥湁鏁堬紝灝辨槸鎶奃atatype misalignment鐨勬暟鎹敤memcpy鎷瘋礉鍒板榻愮殑鍐呭瓨鏉ヨ闂?/p>
1錛岃В鏋愭暟鎹祦鏃跺簲璇ユ椂鍒繪敞鎰忋傚鏋滈渶瑕佹妸涓涓暟鎹祦錛圔UFFER錛夎漿鍖栨垚緇撴瀯榪涜鍙栧鹼紝灝卞簲璇ユ妸榪欎釜緇撴瀯瀹氫箟涓烘寜瀛楄妭瀛樺彇.鑰冭檻濡備笅緇撴瀯錛?/p>
struct a{
char a;
short b;
long c;
};
濡傛灉鏌愪釜鏁版嵁嫻佷腑鍖呭惈榪欐牱鐨勭粨鏋勶紝鑰屼笖鎴戜滑瑕佺洿鎺ュ皢鏁版嵁嫻佺殑鎸囬拡杞寲鎴愯緇撴瀯鐨勬寚閽堬紝鐒跺悗鐩存帴鍙栫粨鏋勬垚鍛樼殑鍊鹼紝鎴戜滑灝卞簲璇ュ皢榪欎釜緇撴瀯瀹氫箟鎴愭寜瀛楄妭璁塊棶錛屽嵆灝嗗叾澶瑰湪璇彞
#pragma pack(push,1)//璁句負1瀛楄妭瀵歸綈
...
#pragma pack(pop)//榪樺師涓哄師鏉ョ殑瀛楄妭瀵歸綈鏂瑰紡
涔嬩腑銆傚鏋滄垜浠笉榪欐牱鍋氾紝緙栬瘧鍣ㄤ細灝嗘垚鍛榖鐨勫湴鍧瀵歸綈鍒皊hort鎸囬拡鐨勫湴鍧錛屽嵆鍦╝涔嬪悗鍔犱笂涓涓猚har鍗?浣嶇殑鎴愬憳錛屽皢C瀵歸綈鍒癓ONG錛屽嵆鍦˙涔嬪悗鍐嶅姞涓涓猚har鎴愬憳銆傚姝や竴鏉ワ紝鎴愬憳B鍜屾垚鍛楥灝卞緱涓嶅埌姝g‘鐨勫間簡銆?/p>
pragma pack 鍙綔鐢ㄤ簬緇撴瀯鐨勫畾涔夛紝鑰屼笉鏄垎閰嶅唴瀛樼┖闂淬傛妸涓涓粨鏋勫畾涔変負pack1鍚庯紝榪欎釜緇撴瀯鍦ㄧ▼搴忎腑灝變竴鐩存槸1浜嗐?/p>
涓婇潰榪欎釜渚嬪瓙鏄鎴風鍙戦?涓繛緇殑鏁版嵁涓嶆槸鍙戦佺粨鏋勪綋錛屾湇鍔$鎺ユ敹緇撴瀯浣撱?/p>
濡傛灉瀹㈡埛绔篃鍙戦佺粨鏋勪綋錛屾湇鍔$涔熸帴鏀剁粨鏋勪綋灝變笉闇瑕佽繖鏍蜂簡銆備絾鏄墠鎻愭槸鍙屾柟鐨勫榻愭柟寮忎竴鑷淬傛墍浠ュ湪瀹㈡埛绔彂閫佸墠涔熻鐢?pragma pack()涓涓嬶紝鏈嶅姟绔篃瑕?pragma pack()涓涓嬨?/p>
鏈濂借繕鏄鎴風涔熷崟涓暟鎹彂閫侊紝鏈嶅姟绔篃鍗曚釜鏁版嵁鎺ユ敹銆?/p>
濡傛灉鎴戜滑瀹氫箟涓涓櫘閫氱殑緇撴瀯鐢ㄦ潵瀛樻斁涓浜涙暟鎹紝鍒欎笉鐢ㄥ畾涔夋垚鎸夊瓧鑺傚瓨鍙栵紝緙栬瘧鍣ㄤ細鍔犱笂涓浜涘崰浣嶆垚鍛橈紝浣嗗茍涓嶄細褰卞搷紼嬪簭鐨勮繍琛屻備粠榪欎釜鎰忎箟涓婅錛屽湪ARM涓紝灝嗙粨鏋勬垚鍛樺畾涔夋垚CHAR鍜孲HORT鏉ヨ妭綰﹀唴瀛樻槸娌℃湁鎰忎箟鐨勩?/p>
涓涓吀鍨嬬殑渚嬪瓙灝辨枃浠剁郴緇熺殑椹卞姩紼嬪簭錛屾枃浠舵槸浠ヤ竴浜涘凡緇忓畾涔夊ソ鐨勭粨鏋勫瓨鏀懼湪瀛樺偍浠嬭川涓婄殑錛屽畠浠璇誨彇鍒頒竴涓狟UFFER涓紝鑰屽叿浣撳彇鏌愪釜鏂囦歡銆佺洰褰曠粨鏋勬椂錛屾垜浠細灝嗗湴鍧杞寲鎴愮粨鏋勮岃鍙栧叾涓殑鍊箋?/p>
2錛岃闂璁炬椂銆?br>渚嬪錛岀鐩橀┍鍔ㄩ氬父浠?6BIT鐨勬柟寮忓瓨鍙栨暟鎹紝鍗蟲瘡嬈″瓨鍙栦袱涓瓧鑺傦紝榪欐牱灝辮姹備紶緇欏畠鐨凚UFFER鏄弻瀛楄妭瀵歸綈鐨勶紝椹卞姩紼嬪簭搴旇鑷充笂灞備紶鏉ョ殑鎸囬拡鍋氬嚭姝g‘鐨勫鐞嗕互淇濊瘉鏁版嵁鐨勬紜с?/p>
3.鏈夋椂錛屾垜浠病鏈夊皢鏁版嵁嫻佹寚閽堣漿鍖栦負緇撴瀯鎸囬拡鍙栧鹼紝浣嗗鏋滄垜浠鍙栫殑鏄弻瀛楄妭鎴栬呮槸鍥涘瓧鑺傜殑鏁版嵁錛屽悓鏍烽渶瑕佹敞鎰忓榻愮殑闂錛屼緥濡傦紝濡傛灉浠庝竴涓狟UFFER鐨勫亸縐?0澶勮鍙栦竴涓洓瀛楄妭鍊鹼紝鍒欏疄闄呭緱鍒扮殑鍊兼槸鍋忕Щ8澶勭殑
鍦板潃涓婄殑DWORD鍊箋?/p>
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/lqk1985/archive/2008/10/23/3129842.aspx
鏈榪戠瑪鑰呬竴鐩村湪鍋欽PEG鐨勮В鐮佸伐浣滐紝鍙戠幇鐢ㄥ畬鍏ㄤ嬌鐢ㄥ搱澶浖鏍戣繘琛岃В鐮佹瘮杈冭垂鏃訛紝鑰屼嬌鐢ㄨ〃緇撴瀯瀛樺偍緙栫爜鍜屽肩殑瀵瑰簲鍏崇郴姣旇緝蹇嵎錛屼絾鏄篃瀛樺湪姣旇緝闅懼鐞嗙殑鍦版柟錛屾瘮濡傝В鐮佸伐浣滈氬父鏄互浣嶄負鍗曚綅鐨勬搷浣滐紝榪欓噷蹇呯劧浼氭秹鍙婂埌縐諱綅鎿嶄綔錛岃岀瑪鑰呬箣鍓嶅浣嶇殑鎿嶄綔寰堝皯錛岀粡楠屽緢嬈犵己錛岀粡榪囪繖嬈″巻緇冪粓浜庡彂鐜頒簡涓涓嚜宸辨浘緇忓拷瑙嗙殑涓滆タ錛岄偅灝辨槸C/C++涓殑縐諱綅鎿嶄綔瀹規槗鍑洪敊鐨勬儏鍐點?/p>
1銆佷粈涔堟牱鐨勬暟鎹被鍨嬪彲浠ョ洿鎺ョЩ浣?/strong>
char銆乻hort銆乮nt銆乴ong銆乽nsigned char銆乽nsigned short銆乽nsigned int銆乽nsigned long閮藉彲浠ヨ繘琛岀Щ浣嶆搷浣滐紝鑰宒ouble銆乫loat銆乥ool銆乴ong double鍒欎笉鍙互榪涜縐諱綅鎿嶄綔銆?/p>
2銆佹湁絎﹀彿鏁版嵁綾誨瀷鐨勭Щ浣嶆搷浣?/strong>
瀵逛簬char銆乻hort銆乮nt銆乴ong榪欎簺鏈夌鍙風殑鏁版嵁綾誨瀷錛?/p>
3銆佹棤絎﹀彿鏁版嵁綾誨瀷鐨勭Щ浣嶆搷浣?/strong>
瀵逛簬unsigned char銆乽nsigned short銆乽nsigned int銆乽nsigned long榪欎簺鏃犵鍙鋒暟鎹被鍨嬶細
娌℃湁鐗規畩瑕佽鏄庣殑錛屼嬌鐢?lt;< 鍜?>> 鎿嶄綔絎﹀氨OK浜?/p>
緇撴潫璇?/p>
8086 涓瓨鍦ㄩ昏緫縐諱綅銆佺畻鏈Щ浣嶏紝鑰孋\C++涓殑縐諱綅浼間箮鏃笉鏄昏緫縐諱綅錛屼篃涓嶆槸綆楁湳縐諱綅銆?/p>
姣斿-1錛屾垜浠嫢瀵瑰畠鍙崇Щ1浣嶏紝C鐨勭粨鏋滀粛鏃ф槸-1錛屼簨瀹炰笂鏃犺鍙崇Щ澶氬皯浣嶅緇堟槸-1錛岄昏緫縐諱綅寰楀埌鐨勭粨鏋滐紙8浣嶈〃紺猴級搴旇鏄?128錛屾墍浠ヨ繖鐐硅娉ㄦ剰
渚嬪瓙錛?br>1.灝?13800138000 杞負 91 68 31 08 10 83 00 F0 //91涓? 68鍥藉鍙?涓嶅浣嶉暱浠琛?/strong>
浜屻佸懡鍚嶈鍒欙細
1銆佸彉閲忓悕鐨勫懡鍚嶈鍒?/strong>
鈶犮佸彉閲忕殑鍛藉悕瑙勫垯瑕佹眰鐢?#8220;鍖堢墮鍒╂硶鍒?#8221;銆傚嵆寮澶村瓧姣嶇敤鍙橀噺鐨勭被鍨嬶紝鍏朵綑閮ㄥ垎鐢ㄥ彉閲忕殑鑻辨枃鎰忔濇垨鍏惰嫳鏂囨剰鎬濈殑緙╁啓,灝介噺閬垮厤鐢ㄤ腑鏂囩殑鎷奸煶,瑕佹眰鍗曡瘝鐨勭涓涓瓧姣嶅簲澶у啓銆?nbsp;
鍗籌細 鍙橀噺鍚?鍙橀噺綾誨瀷+鍙橀噺鐨勮嫳鏂囨剰鎬濓紙鎴栫緝鍐欙級
瀵歸潪閫氱敤鐨勫彉閲忥紝鍦ㄥ畾涔夋椂鍔犲叆娉ㄩ噴璇存槑錛屽彉閲忓畾涔夊敖閲忓彲鑳芥斁鍦ㄥ嚱鏁扮殑寮濮嬪銆?nbsp;
瑙佷笅琛細
bool(BOOL) 鐢╞寮澶?nbsp; bIsParent
byte(BYTE) 鐢╞y寮澶?nbsp; byFlag
short(int) 鐢╪寮澶?nbsp; nStepCount
long(LONG) 鐢╨寮澶?nbsp; lSum
char(CHAR) 鐢╟寮澶?nbsp; cCount
float(FLOAT) 鐢╢寮澶?nbsp; fAvg
double(DOUBLE) 鐢╠寮澶?nbsp; dDeta
void(VOID) 鐢╲寮澶?nbsp; vVariant
unsigned int錛圵ORD錛?nbsp; 鐢╳寮澶?nbsp; wCount
unsigned long(DWORD) 鐢╠w寮澶?nbsp; dwBroad
HANDLE錛圚INSTANCE錛?nbsp; 鐢╤寮澶?nbsp; hHandle
DWORD 鐢╠w寮澶?nbsp; dwWord
LPCSTR(LPCTSTR) 鐢╯tr寮澶?nbsp; strString
鐢?緇撳熬鐨勫瓧絎︿覆 鐢╯z寮澶?nbsp; szFileName
瀵規湭緇欏嚭鐨勫彉閲忕被鍨嬭姹傛彁鍑哄茍緇欏嚭鍛藉悕寤鴻緇欐妧鏈鍛樹細銆?nbsp;
鈶°佹寚閽堝彉閲忓懡鍚嶇殑鍩烘湰鍘熷垯涓猴細
瀵逛竴閲嶆寚閽堝彉閲忕殑鍩烘湰鍘熷垯涓猴細
“p”+鍙橀噺綾誨瀷鍓嶇紑+鍛藉悕
濡備竴涓猣loat*鍨嬪簲璇ヨ〃紺轟負pfStat
瀵瑰閲嶆寚閽堝彉閲忕殑鍩烘湰瑙勫垯涓猴細
浜岄噸鎸囬拡錛?nbsp; “pp”+鍙橀噺綾誨瀷鍓嶇紑+鍛藉悕
涓夐噸鎸囬拡錛?nbsp; “ppp”+鍙橀噺綾誨瀷鍓嶇紑+鍛藉悕
......
鈶€佸叏灞鍙橀噺鐢╣_寮澶?濡備竴涓叏灞鐨勯暱鍨嬪彉閲忓畾涔変負g_lFailCount,鍗籌細鍙橀噺鍚?g_+鍙橀噺綾誨瀷+鍙橀噺鐨勮嫳鏂囨剰鎬濓紙鎴栫緝鍐欙級
鈶c侀潤鎬佸彉閲忕敤s_寮澶?濡備竴涓潤鎬佺殑鎸囬拡鍙橀噺瀹氫箟涓?span style="COLOR: #008000">s_plPerv_Inst,鍗籌細 鍙橀噺鍚?s_+鍙橀噺綾誨瀷+鍙橀噺鐨勮嫳鏂囨剰鎬濓紙鎴栫緝鍐欙級
鈶ゃ佹垚鍛樺彉閲忕敤m_寮澶?濡備竴涓暱鍨嬫垚鍛樺彉閲忓畾涔変負m_lCount;鍗籌細鍙橀噺鍚?m_+鍙橀噺綾誨瀷+鍙橀噺鐨勮嫳鏂囨剰鎬濓紙鎴栫緝鍐欙級
鈶ャ佸鏋氫婦綾誨瀷錛坋num錛変腑鐨勫彉閲忥紝瑕佹眰鐢ㄦ灇涓懼彉閲忔垨鍏剁緝鍐欏仛鍓嶇紑銆傚茍涓旇姹傜敤澶у啓銆?nbsp;
濡傦細enum cmEMDAYS
{
EMDAYS_MONDAY;
EMDAYS_TUESDAY;
……
};
鈶︺佸struct銆乽nion銆乧lass鍙橀噺鐨勫懡鍚嶈姹傚畾涔夌殑綾誨瀷鐢ㄥぇ鍐欍傚茍瑕佸姞涓婂墠緙錛屽叾鍐呴儴鍙橀噺鐨勫懡鍚嶈鍒欎笌鍙橀噺鍛藉悕瑙勫垯涓鑷淬?nbsp;
緇撴瀯涓鑸敤S寮澶?nbsp;
濡傦細struct ScmNPoint
{
int nX;//鐐圭殑X浣嶇疆
int nY; //鐐圭殑Y浣嶇疆
};
鑱斿悎浣撲竴鑸敤U寮澶?nbsp;
濡? union UcmLPoint
{
long lX;
long lY;
}
綾諱竴鑸敤C寮澶?nbsp;
濡傦細
class CcmFPoint
{
public:
float fPoint;
};
瀵逛竴鑸殑緇撴瀯搴旇瀹氫箟涓虹被妯℃澘錛屼負浠ュ悗鐨勬墿灞曟ц冭檻
濡傦細
template
class CcmTVector3d
{
public:
TYPE x,y,z;
};
鈶с佸甯擱噺錛堝寘鎷敊璇殑緙栫爜錛夊懡鍚嶏紝瑕佹眰甯擱噺鍚嶇敤澶у啓錛屽父閲忓悕鐢ㄨ嫳鏂囪〃杈懼叾鎰忔濄?nbsp;
濡?span style="COLOR: #008000">錛?define CM_FILE_NOT_FOUND CMMAKEHR(0X20B) 鍏朵腑CM琛ㄧず綾誨埆銆?nbsp;
鈶ㄣ佸const 鐨勫彉閲忚姹傚湪鍙橀噺鐨勫懡鍚嶈鍒欏墠鍔犲叆c_,鍗籌細c_+鍙橀噺鍛藉悕瑙勫垯錛涗緥濡傦細
const char* c_szFileName;
2銆?nbsp; 鍑芥暟鐨勫懡鍚嶈鑼冿細
鍑芥暟鐨勫懡鍚嶅簲璇ュ敖閲忕敤鑻辨枃琛ㄨ揪鍑哄嚱鏁板畬鎴愮殑鍔熻兘銆傞伒寰姩瀹劇粨鏋勭殑鍛藉悕娉曞垯錛屽嚱鏁板悕涓姩璇嶅湪鍓?騫跺湪鍛藉悕鍓嶅姞鍏ュ嚱鏁扮殑鍓嶇紑錛屽嚱鏁板悕鐨勯暱搴︿笉寰楀皯浜?涓瓧姣嶃?nbsp;
渚嬪錛?nbsp;
long cmGetDeviceCount(……);
3銆佸嚱鏁板弬鏁拌鑼冿細
鈶犮?nbsp; 鍙傛暟鍚嶇О鐨勫懡鍚嶅弬鐓у彉閲忓懡鍚嶈鑼冦?nbsp;
鈶°?nbsp; 涓轟簡鎻愰珮紼嬪簭鐨勮繍琛屾晥鐜囷紝鍑忓皯鍙傛暟鍗犵敤鐨勫爢鏍堬紝浼犻掑ぇ緇撴瀯鐨勫弬鏁幫紝涓寰嬮噰鐢ㄦ寚閽堟垨寮曠敤鏂瑰紡浼犻掋?nbsp;
鈶€?nbsp; 涓轟簡渚夸簬鍏朵粬紼嬪簭鍛樿瘑鍒煇涓寚閽堝弬鏁版槸鍏ュ彛鍙傛暟榪樻槸鍑哄彛鍙傛暟錛屽悓鏃朵究浜庣紪璇戝櫒媯鏌ラ敊璇紝搴旇鍦ㄥ叆鍙e弬鏁板墠鍔犲叆const鏍囧織銆傚錛?nbsp;
……cmCopyString(const char * c_szSource, char * szDest)
4銆佸紩鍑哄嚱鏁拌鑼冿細
瀵逛簬浠庡姩鎬佸簱寮曞嚭浣滀負浜屾寮鍙戝嚱鏁板叕寮鐨勫嚱鏁幫紝涓轟簡鑳戒笌鍏朵粬鍑芥暟浠ュ強Windows鐨勫嚱鏁板尯鍒嗭紝閲囩敤綾誨埆鍓嶇紑+鍩烘湰鍛藉悕瑙勫垯鐨勬柟娉曞懡鍚嶃備緥濡傦細鍦ㄥ鍔ㄦ佸簱涓紩鍑虹殑涓涓浘璞$紪杈戠殑鍑芥暟瀹氫箟涓?nbsp; imgFunctionname(鍏朵腑img涓篿mage緙╁啓)銆?nbsp;
鐜扮粰鍑轟笁縐嶅簱鐨勫懡鍚嶅墠緙錛?nbsp;
鈶犮?nbsp; 瀵歸氱敤鍑芥暟搴擄紝閲囩敤cm涓哄墠緙銆?nbsp;
鈶°?nbsp; 瀵逛笁緇村嚱鏁板簱錛岄噰鐢╲r涓哄墠緙銆?nbsp;
鈶€?nbsp; 瀵瑰浘璞″嚱鏁板簱錛岄噰鐢╥mg涓哄墠緙銆?/span>
瀵瑰畯瀹氫箟錛岀粨鏋滀唬鐮佺敤鍚屾牱鐨勫墠緙銆?nbsp;
5銆佹枃浠跺悕(鍖呮嫭鍔ㄦ佸簱銆佺粍浠躲佹帶浠躲佸伐紼嬫枃浠剁瓑)鐨勫懡鍚嶈鑼冿細
鏂囦歡鍚嶇殑鍛藉悕瑕佹眰琛ㄨ揪鍑烘枃浠剁殑鍐呭錛岃姹傛枃浠跺悕鐨勯暱搴︿笉寰楀皯浜?涓瓧姣嶏紝涓ョ浣跨敤璞ile1,myfile涔嬬被鐨勬枃浠跺悕銆?nbsp;
涓夈佹敞閲婅鑼冿細
1銆佸嚱鏁板ご鐨勬敞閲?/strong>
瀵逛簬鍑芥暟錛屽簲璇ヤ粠“鍔熻兘”錛?#8220;鍙傛暟”錛?#8220;榪斿洖鍊?#8221;銆?#8220;涓昏鎬濊礬”銆?#8220;璋冪敤鏂規硶”銆?#8220;鏃ユ湡”鍏釜鏂歸潰鐢ㄥ涓嬫牸寮忔敞閲婏細
//紼嬪簭璇存槑寮濮?nbsp;
//================================================================//
// 鍔熻兘錛?nbsp; 浠庝竴涓猄tring 涓垹闄ゅ彟涓涓猄tring銆?nbsp;
// 鍙傛暟錛?nbsp; strByDelete,strToDelete
// 錛堝叆鍙o級 strByDelete: 琚垹闄ょ殑瀛楃涓詫紙鍘熸潵鐨勫瓧絎︿覆錛?nbsp;
// 錛堝嚭鍙o級 strToDelete: 瑕佷粠涓婁釜瀛楃涓蹭腑鍒犻櫎鐨勫瓧絎︿覆銆?nbsp;
// 榪斿洖錛?nbsp; 鎵懼埌騫跺垹闄よ繑鍥?錛屽惁鍒欒繑鍥?銆傦紙瀵硅繑鍥炲兼湁閿欒緙栫爜鐨勮// 姹傚垪鍑洪敊璇紪鐮侊級銆?nbsp;
// 涓昏鎬濊礬錛氭湰綆楁硶涓昏閲囩敤寰幆姣旇緝鐨勬柟娉曟潵浠巗trByDelete涓壘鍒?nbsp;
// 涓巗trToDelete鐩稿尮閰嶇殑瀛楃涓詫紝瀵瑰鍖歸厤strByDelete
// 涓湁澶氫釜strToDelete瀛愪覆錛夌殑鎯呭喌娌℃湁澶勭悊銆傝鍙傞槄錛?nbsp;
// 涔﹀悕......
// 璋冪敤鏂規硶錛?.....
// 鏃ユ湡錛氳搗濮嬫棩鏈燂紝濡傦細2000/8/21.9:40--2000/8/23.21:45
//================================================================//
鍑芥暟鍚?……)
//紼嬪簭璇存槑緇撴潫
鈶犮?nbsp; 瀵逛簬鏌愪簺鍑芥暟錛屽叾閮ㄥ垎鍙傛暟涓轟紶鍏ュ鹼紝鑰岄儴鍒嗗弬鏁頒負浼犲嚭鍊鹼紝鎵浠ュ鍙傛暟瑕佽緇嗚鏄庤鍙傛暟鏄叆鍙e弬鏁幫紝榪樻槸鍑哄彛鍙傛暟錛屽浜庢煇浜涙剰涔変笉鏄庣‘鐨勫弬鏁拌繕瑕佸仛璇︾粏璇存槑錛堜緥濡傦細浠ヨ搴︿綔涓哄弬鏁版椂錛岃璇存槑璇ヨ搴﹀弬鏁版槸浠ュ姬搴︼紙PI錛?榪樻槸浠ュ害涓哄崟浣嶏級,瀵規棦鏄叆鍙e張鏄嚭鍙g殑鍙橀噺搴旇鍦ㄥ叆鍙e拰鍑哄彛澶勫悓鏃舵爣鏄庛傜瓑絳夈?nbsp;
鈶°?nbsp; 鍑芥暟鐨勬敞閲婂簲璇ユ斁緗湪鍑芥暟鐨勫ご鏂囦歡涓紝鍦ㄥ疄鐜版枃浠朵腑鐨勮鍑芥暟鐨勫疄鐜伴儴鍒嗗簲璇ュ悓鏃舵斁緗娉ㄩ噴銆?nbsp;
鈶€?nbsp; 鍦ㄦ敞閲婁腑搴旇璇︾粏璇存槑鍑芥暟鐨勪富瑕佸疄鐜版濊礬銆佺壒鍒娉ㄦ槑鑷繁鐨勪竴浜涙兂娉曪紝濡傛灉鏈夊繀瑕佸垯搴旇鍐欐槑瀵規兂娉曚駭鐢熺殑鏉ョ敱銆傚涓浜涙ā浠跨殑鍑芥暟搴旇娉ㄩ噴涓婂嚱鏁扮殑鍑哄銆?nbsp;
鈶c?nbsp; 鍦ㄦ敞閲婁腑璇︾粏娉ㄦ槑鍑芥暟鐨勯傚綋璋冪敤鏂規硶錛屽浜庤繑鍥炲肩殑澶勭悊鏂規硶絳夈傚湪娉ㄩ噴涓寮鴻皟璋冪敤鏃剁殑鍗遍櫓鏂歸潰錛屽彲鑳藉嚭閿欑殑鍦版柟銆?nbsp;
鈶ゃ?nbsp; 瀵規棩鏈熺殑娉ㄩ噴瑕佹眰璁板綍浠庡紑濮嬪啓鍑芥暟鍒扮粨鏉熷嚱鏁扮殑嫻嬭瘯涔嬮棿鐨勬棩鏈熴?nbsp;
鈶ャ?nbsp; 瀵瑰嚱鏁版敞閲婂紑濮嬪埌鍑芥暟鍛藉悕涔嬮棿搴旇鏈変竴緇勭敤鏉ユ爣璇嗙殑鐗規畩瀛楃涓層?nbsp;
濡傛灉綆楁硶姣旇緝澶嶆潅錛屾垨綆楁硶涓殑鍙橀噺瀹氫箟涓庝綅緗湁鍏籌紝鍒欒姹傚鍙橀噺鐨勫畾涔夎繘琛屽浘瑙c傚闅句互鐞嗚В鐨勭畻娉曡兘鍥捐В灝介噺鍥捐В銆?nbsp;
2銆佸彉閲忕殑娉ㄩ噴錛?/strong>
瀵逛簬鍙橀噺鐨勬敞閲婄揣璺熷湪鍙橀噺鐨勫悗闈㈣鏄庡彉閲忕殑浣滅敤銆傚師鍒欎笂瀵逛簬姣忎釜鍙橀噺搴旇娉ㄩ噴錛屼絾瀵逛簬鎰忎箟闈炲父鏄庢樉鐨勫彉閲忥紝濡傦細i,j絳夊驚鐜彉閲忓彲浠ヤ笉娉ㄩ噴銆?nbsp;
渚嬪錛?nbsp; long lLineCount //綰跨殑鏍規暟銆?nbsp;
銆3銆佹枃浠剁殑娉ㄩ噴錛?/strong>
鏂囦歡搴旇鍦ㄦ枃浠跺紑澶村姞鍏ヤ互涓嬫敞閲婏細
/////////////////////////////////////////////////////////////////////
// 宸ョ▼: 鏂囦歡鎵鍦ㄧ殑欏圭洰鍚嶃?nbsp;
// 浣滆咃細**錛屼慨鏀硅咃細**
// 鎻忚堪:璇存槑鏂囦歡鐨勫姛鑳姐?nbsp;
// 涓昏鍑芥暟錛?#8230;………
// 鐗堟湰: 璇存槑鏂囦歡鐨勭増鏈紝瀹屾垚鏃ユ湡銆?nbsp;
// 淇敼: 璇存槑瀵規枃浠剁殑淇敼鍐呭銆佷慨鏀瑰師鍥犱互鍙婁慨鏀規棩鏈熴?nbsp;
// 鍙傝冩枃鐚細 ......
/////////////////////////////////////////////////////////////////////
涓轟簡澶存枃浠惰閲嶅鍖呭惈瑕佹眰瀵瑰ご鏂囦歡榪涜瀹氫箟濡備笅:
#ifndef __FILENAME_H__
#define __FILENAME_H__
鍏朵腑FILENAME涓哄ご鏂囦歡鐨勫悕瀛椼?nbsp;
銆銆銆4銆佸叾浠栨敞閲婏細
鍦ㄥ嚱鏁板唴鎴戜滑涓嶉渶瑕佹敞閲婃瘡涓琛岃鍙ャ備絾蹇呴』鍦ㄥ悇鍔熻兘妯″潡鐨勬瘡涓涓昏閮ㄥ垎涔嬪墠娣誨姞鍧楁敞閲婏紝娉ㄩ噴姣忎竴緇勮鍙ワ紝鍦ㄥ驚鐜佹祦紼嬬殑鍚勫垎鏀瓑錛屽敖鍙兘澶氬姞浠ユ敞閲娿?nbsp;
鍏朵腑鐨勫驚鐜佹潯浠躲侀夋嫨絳変綅緗繀欏繪敞閲娿?nbsp;
瀵逛簬鍓嶅悗欏哄簭涓嶈兘棰犲掔殑鎯呭喌錛屽緩璁湪娉ㄩ噴涓鍔犲簭鍙楓?nbsp;
渚嬪錛?nbsp;
鍦ㄥ叾浠栭『搴忔墽琛岀殑紼嬪簭涓紝姣忛殧3鈥?琛岃鍙ワ紝蹇呴』鍔犱竴涓敞閲婏紝娉ㄦ槑榪欎竴孌佃鍙ユ墍緇勬垚鐨勫皬妯″潡鐨勪綔鐢ㄣ傚浜庤嚜宸辯殑涓浜涙瘮杈冪嫭鐗圭殑鎬濇兂瑕佹眰鍦ㄦ敞閲婁腑鏍囨槑銆?nbsp;
鍥涖佺▼搴忓仴澹э細
1銆佸嚱鏁扮殑榪斿洖鍊艱鑼冿細
瀵逛簬鍑芥暟鐨勮繑鍥炰綅緗紝灝介噺淇濇寔鍗曚竴鎬э紝鍗充竴涓嚱鏁板敖閲忓仛鍒板彧鏈変竴涓繑鍥炰綅緗?鍗曞叆鍙e崟鍑哄彛)銆?nbsp;
瑕佹眰澶у緇熶竴鍑芥暟鐨勮繑鍥炲鹼紝鎵鏈夌殑鍑芥暟鐨勮繑鍥炲奸兘灝嗕互緙栫爜鐨勬柟寮忚繑鍥炪?nbsp;
渚嬪緙栫爜瀹氫箟濡備笅錛?nbsp;
#define CM_POINT_IS_NULL CMMAKEHR(0X200)
:
:
寤鴻鍑芥暟瀹炵幇濡備笅錛?nbsp;
long 鍑芥暟鍚?鍙傛暟,……)
{
long lResult; //淇濇寔閿欒鍙?nbsp;
lResult=CM_OK;
//濡傛灉鍙傛暟鏈夐敊璇垯榪斿洖閿欒鍙?nbsp;
if(鍙傛暟==NULL)
{
lResult=CM_POINT_IS_NULL;
goto END;
}
……
END:
return lResult;
}
2銆佸叧浜巊oto鐨勫簲鐢細
瀵筭oto璇彞鐨勫簲鐢紝鎴戜滑瑕佹眰灝介噺灝戠敤goto璇彞銆傚涓瀹氳鐢ㄧ殑鍦版柟瑕佹眰鍙兘鍚戝悗杞Щ銆?nbsp;
3銆佽祫婧愬彉閲忕殑澶勭悊錛堣祫婧愬彉閲忔槸鎸囨秷鑰楃郴緇熻祫婧愮殑鍙橀噺錛夛細
瀵硅祫婧愬彉閲忎竴瀹氳祴鍒濆箋傚垎閰嶇殑璧勬簮鍦ㄧ敤瀹屽悗蹇呴』椹笂閲婃斁錛屽茍閲嶆柊璧嬪箋?nbsp;
4銆佸澶嶆潅鐨勬潯浠跺垽鏂紝涓轟簡紼嬪簭鐨勫彲璇繪э紝搴旇灝介噺浣跨敤鎷彿銆?nbsp;
渚嬶細if(((szFileName!=NULL)&&(lCount>=0)))||(bIsRead==TRUE))
浜斻佸彲縐繪鎬э細
1銆侀珮璐ㄩ噺鐨勪唬鐮佽姹傝兘澶熻法騫沖彴錛屾墍浠ユ垜浠殑浠g爜搴旇鑰冭檻鍒板涓嶅悓鐨勫鉤鍙扮殑鏀寔錛岀壒鍒槸瀵箇indows98鍜寃indowsnt鐨勬敮鎸併?nbsp;
2銆佺敱浜嶤璇█鐨勭Щ妞嶆ф瘮杈冨ソ錛屾墍浠ュ綆楁硶鍑芥暟瑕佹眰鐢–浠g爜錛屼笉鑳界敤C++浠g爜銆?nbsp;
3銆佸涓嶅悓鐨勭‖浠朵笌杞歡鐨勫嚱鏁拌鍋氫笉鍚岀殑澶勭悊
鍖堢墮鍒╁懡鍚嶆硶
MFC銆佸彞鏌勩佹帶浠跺強緇撴瀯鐨勫懡鍚嶈鑼? Windows綾誨瀷 鏍鋒湰鍙橀噺 MFC綾? 鏍鋒湰鍙橀噺
HWND hWnd錛? CWnd* pWnd錛?
HDLG hDlg錛? CDialog* pDlg錛?
HDC hDC錛? CDC* pDC錛?
HGDIOBJ hGdiObj錛? CGdiObject* pGdiObj錛?
HPEN hPen錛? CPen* pPen錛?
HBRUSH hBrush錛? CBrush* pBrush錛?
HFONT hFont錛? CFont* pFont錛?
HBITMAP hBitmap錛? CBitmap* pBitmap錛?
HPALETTE hPaltte錛? CPalette* pPalette錛?
HRGN hRgn錛? CRgn* pRgn錛?
HMENU hMenu錛? CMenu* pMenu錛?
HWND hCtl錛? CState* pState錛?
HWND hCtl錛? CButton* pButton錛?
HWND hCtl錛? CEdit* pEdit錛?
HWND hCtl錛? CListBox* pListBox錛?
HWND hCtl錛? CComboBox* pComboBox錛?
HWND hCtl錛? CScrollBar* pScrollBar錛?
HSZ hszStr錛? CString pStr錛?
POINT pt錛? CPoint pt錛?
SIZE size錛? CSize size錛?
RECT rect錛? CRect rect錛?
涓鑸墠緙鍛藉悕瑙勮寖 鍓嶇紑 綾誨瀷 瀹炰緥
C 綾繪垨緇撴瀯 CDocument錛孋PrintInfo
m_ 鎴愬憳鍙橀噺 m_pDoc錛宮_nCustomers
鍙橀噺鍛藉悕瑙勮寖 鍓嶇紑 綾誨瀷 鎻忚堪 瀹炰緥
ch char 8浣嶅瓧絎? chGrade
ch TCHAR 濡傛灉_UNICODE瀹氫箟錛屽垯涓?6浣嶅瓧絎? chName
b BOOL 甯冨皵鍊? bEnable
n int 鏁村瀷錛堝叾澶у皬渚濊禆浜庢搷浣滅郴緇燂級 nLength
n UINT 鏃犵鍙峰鹼紙鍏跺ぇ灝忎緷璧栦簬鎿嶄綔緋葷粺錛? nHeight
w WORD 16浣嶆棤絎﹀彿鍊? wPos
l LONG 32浣嶆湁絎﹀彿鏁村瀷 lOffset
dw DWORD 32浣嶆棤絎﹀彿鏁村瀷 dwRange
p * 鎸囬拡 pDoc
lp FAR* 榪滄寚閽? lpszName
lpsz LPSTR 32浣嶅瓧絎︿覆鎸囬拡 lpszName
lpsz LPCSTR 32浣嶅父閲忓瓧絎︿覆鎸囬拡 lpszName
lpsz LPCTSTR 濡傛灉_UNICODE瀹氫箟錛屽垯涓?2浣嶅父閲忓瓧絎︿覆鎸囬拡 lpszName
h handle Windows瀵硅薄鍙ユ焺 hWnd
lpfn callback 鎸囧悜CALLBACK鍑芥暟鐨勮繙鎸囬拡
搴旂敤紼嬪簭絎﹀彿鍛藉悕瑙勮寖 鍓嶇紑 絎﹀彿綾誨瀷 瀹炰緥 鑼冨洿
IDR_ 涓嶅悓綾誨瀷鐨勫涓祫婧愬叡浜爣璇? IDR_MAIINFRAME 1锝?x6FFF
IDD_ 瀵硅瘽妗嗚祫婧? IDD_SPELL_CHECK 1锝?x6FFF
HIDD_ 瀵硅瘽妗嗚祫婧愮殑Help涓婁笅鏂? HIDD_SPELL_CHECK 0x20001锝?x26FF
IDB_ 浣嶅浘璧勬簮 IDB_COMPANY_LOGO 1锝?x6FFF
IDC_ 鍏夋爣璧勬簮 IDC_PENCIL 1锝?x6FFF
IDI_ 鍥炬爣璧勬簮 IDI_NOTEPAD 1锝?x6FFF
ID_ 鏉ヨ嚜鑿滃崟欏規垨宸ュ叿鏍忕殑鍛戒護 ID_TOOLS_SPELLING 0x8000锝?xDFFF
HID_ 鍛戒護Help涓婁笅鏂? HID_TOOLS_SPELLING 0x18000锝?x1DFFF
IDP_ 娑堟伅妗嗘彁紺? IDP_INVALID_PARTNO 8锝?xDEEF
HIDP_ 娑堟伅妗咹elp涓婁笅鏂? HIDP_INVALID_PARTNO 0x30008锝?x3DEFF
IDS_ 涓茶祫婧? IDS_COPYRIGHT 1锝?x7EEF
IDC_ 瀵硅瘽妗嗗唴鐨勬帶浠? IDC_RECALC 8锝?xDEEF
Microsoft MFC瀹忓懡鍚嶈鑼? 鍚嶇О 綾誨瀷
_AFXDLL 鍞竴鐨勫姩鎬佽繛鎺ュ簱錛圖ynamic Link Library錛孌LL錛夌増鏈?
_ALPHA 浠呯紪璇慏EC Alpha澶勭悊鍣?
_DEBUG 鍖呮嫭璇婃柇鐨勮皟璇曠増鏈?
_MBCS 緙栬瘧澶氬瓧鑺傚瓧絎﹂泦
_UNICODE 鍦ㄤ竴涓簲鐢ㄧ▼搴忎腑鎵撳紑Unicode
AFXAPI MFC鎻愪緵鐨勫嚱鏁?
CALLBACK 閫氳繃鎸囬拡鍥炶皟鐨勫嚱鏁?
搴撴爣璇嗙鍛藉悕娉? 鏍囪瘑絎? 鍊煎拰鍚箟
u ANSI錛圢錛夋垨Unicode錛圲錛?
d 璋冭瘯鎴栧彂琛岋細D = 璋冭瘯錛涘拷鐣ユ爣璇嗙涓哄彂琛屻?
闈欐佸簱鐗堟湰鍛藉悕瑙勮寖 搴? 鎻忚堪
NAFXCWD.LIB 璋冭瘯鐗堟湰錛歁FC闈欐佽繛鎺ュ簱
NAFXCW.LIB 鍙戣鐗堟湰錛歁FC闈欐佽繛鎺ュ簱
UAFXCWD.LIB 璋冭瘯鐗堟湰錛氬叿鏈塙nicode鏀寔鐨凪FC闈欐佽繛鎺ュ簱
UAFXCW.LIB 鍙戣鐗堟湰錛氬叿鏈塙nicode鏀寔鐨凪FC闈欐佽繛鎺ュ簱
鍔ㄦ佽繛鎺ュ簱鍛藉悕瑙勮寖 鍚嶇О 綾誨瀷
_AFXDLL 鍞竴鐨勫姩鎬佽繛鎺ュ簱錛圖LL錛夌増鏈?
WINAPI Windows鎵鎻愪緵鐨勫嚱鏁?
Windows.h涓柊鐨勫懡鍚嶈鑼? 綾誨瀷 瀹氫箟鎻忚堪
WINAPI 浣跨敤鍦ˋPI澹版槑涓殑FAR PASCAL浣嶇疆錛屽鏋滄鍦ㄧ紪鍐欎竴涓叿鏈夊鍑篈PI浜哄彛鐐圭殑DLL錛屽垯鍙互鍦ㄨ嚜宸辯殑API涓嬌鐢ㄨ綾誨瀷
CALLBACK 浣跨敤鍦ㄥ簲鐢ㄧ▼搴忓洖鍙緥紼嬶紝濡傜獥鍙e拰瀵硅瘽妗嗚繃紼嬩腑鐨凢AR PASCAL鐨勪綅緗?
LPCSTR 涓嶭PSTR鐩稿悓錛屽彧鏄疞PCSTR鐢ㄤ簬鍙涓叉寚閽堬紝鍏跺畾涔夌被浼鹼紙const char FAR*錛?
UINT 鍙Щ妞嶇殑鏃犵鍙鋒暣鍨嬬被鍨嬶紝鍏跺ぇ灝忕敱涓繪満鐜鍐沖畾錛堝浜嶹indows NT鍜學indows 9x涓?2浣嶏級錛涘畠鏄痷nsigned int鐨勫悓涔夎瘝
LRESULT 紿楀彛紼嬪簭榪斿洖鍊肩殑綾誨瀷
LPARAM 澹版槑lParam鎵浣跨敤鐨勭被鍨嬶紝lParam鏄獥鍙g▼搴忕殑絎洓涓弬鏁?
WPARAM 澹版槑wParam鎵浣跨敤鐨勭被鍨嬶紝wParam鏄獥鍙g▼搴忕殑絎笁涓弬鏁?
LPVOID 涓鑸寚閽堢被鍨嬶紝涓庯紙void *錛夌浉鍚岋紝鍙互鐢ㄦ潵浠f浛LPSTR
鏃跺父鍦╟pp鐨勪唬鐮佷箣涓湅鍒拌繖鏍風殑浠g爜:
#ifdef __cplusplus
extern "C" {
#endif
//涓孌典唬鐮?/p>
#ifdef __cplusplus
}
#endif
銆銆榪欐牱鐨勪唬鐮佸埌搴曟槸浠涔堟剰鎬濆憿錛熼鍏堬紝__cplusplus鏄痗pp涓殑鑷畾涔夊畯錛岄偅涔堝畾涔変簡榪欎釜瀹忕殑璇濊〃紺鴻繖鏄竴孌礳pp鐨勪唬鐮侊紝涔熷氨鏄錛屼笂闈㈢殑浠g爜鐨勫惈涔夋槸:濡傛灉榪欐槸涓孌礳pp鐨勪唬鐮侊紝閭d箞鍔犲叆extern "C"{鍜寎澶勭悊鍏朵腑鐨勪唬鐮?/span>銆?/p>
銆銆瑕佹槑鐧戒負浣曚嬌鐢╡xtern "C"錛岃繕寰椾粠cpp涓鍑芥暟鐨勯噸杞藉鐞嗗紑濮嬭璧楓傚湪c++涓紝涓轟簡鏀寔閲嶈澆鏈哄埗錛屽湪緙栬瘧鐢熸垚鐨勬眹緙栫爜涓紝瑕佸鍑芥暟鐨勫悕瀛楄繘琛屼竴浜涘鐞嗭紝鍔犲叆姣斿鍑芥暟鐨勮繑鍥炵被鍨嬬瓑絳?鑰屽湪C涓紝鍙槸綆鍗曠殑鍑芥暟鍚嶅瓧鑰屽凡錛屼笉浼氬姞鍏ュ叾浠栫殑淇℃伅.涔熷氨鏄:C++鍜孋瀵逛駭鐢熺殑鍑芥暟鍚嶅瓧鐨勫鐞嗘槸涓嶄竴鏍風殑. 銆銆姣斿涓嬮潰鐨勪竴孌電畝鍗曠殑鍑芥暟錛屾垜浠湅鐪嬪姞鍏ュ拰涓嶅姞鍏xtern "C"浜х敓鐨勬眹緙栦唬鐮侀兘鏈夊摢浜涘彉鍖? int f(void) { return 1; } 銆銆鍦ㄥ姞鍏xtern "C"鐨勬椂鍊欎駭鐢熺殑姹囩紪浠g爜鏄? .file "test.cxx" .text .align 2 .globl _f .def _f; .scl 2; .type 32; .endef _f: pushl %ebp movl %esp錛?%ebp movl $1錛?%eax popl %ebp ret 銆銆浣嗘槸涓嶅姞鍏ヤ簡extern "C"涔嬪悗 .file "test.cxx" .text .align 2 .globl __Z1fv .def __Z1fv; .scl 2; .type 32; .endef __Z1fv: pushl %ebp movl %esp錛?%ebp movl $1錛?%eax popl %ebp ret 銆銆涓ゆ姹囩紪浠g爜鍚屾牱閮芥槸浣跨敤gcc -S鍛戒護浜х敓鐨勶紝鎵鏈夌殑鍦版柟閮芥槸涓鏍風殑錛屽敮鐙槸浜х敓鐨勫嚱鏁板悕錛屼竴涓槸_f錛屼竴涓槸__Z1fv銆?/p>
銆銆鏄庣櫧浜嗗姞鍏ヤ笌涓嶅姞鍏xtern "C"涔嬪悗瀵瑰嚱鏁板悕縐頒駭鐢熺殑褰卞搷錛屾垜浠戶緇垜浠殑璁ㄨ:涓轟粈涔堥渶瑕佷嬌鐢╡xtern "C"鍛紵C++涔嬬埗鍦ㄨ璁++涔嬫椂錛岃冭檻鍒板綋鏃跺凡緇忓瓨鍦ㄤ簡澶ч噺鐨凜浠g爜錛屼負浜嗘敮鎸佸師鏉ョ殑C浠g爜鍜屽凡緇忓啓濂紺搴擄紝闇瑕佸湪C++涓敖鍙兘鐨勬敮鎸丆錛岃宔xtern "C"灝辨槸鍏朵腑鐨勪竴涓瓥鐣ャ?/p>
銆銆璇曟兂榪欐牱鐨勬儏鍐?涓涓簱鏂囦歡宸茬粡鐢–鍐欏ソ浜嗚屼笖榪愯寰楀緢鑹ソ錛岃繖涓椂鍊欐垜浠渶瑕佷嬌鐢ㄨ繖涓簱鏂囦歡錛屼絾鏄垜浠渶瑕佷嬌鐢–++鏉ュ啓榪欎釜鏂扮殑浠g爜銆傚鏋滆繖涓唬鐮佷嬌鐢ㄧ殑鏄疌++鐨勬柟寮忛摼鎺ヨ繖涓狢搴撴枃浠剁殑璇濓紝閭d箞灝變細鍑虹幇閾炬帴閿欒.鎴戜滑鏉ョ湅涓孌典唬鐮?棣栧厛錛屾垜浠嬌鐢–鐨勫鐞嗘柟寮忔潵鍐欎竴涓嚱鏁幫紝涔熷氨鏄鍋囪榪欎釜鍑芥暟褰撴椂鏄敤C鍐欐垚鐨? //f1.c extern "C" { void f1() { return; } } 銆銆緙栬瘧鍛戒護鏄?gcc -c f1.c -o f1.o 浜х敓浜嗕竴涓彨f1.o鐨勫簱鏂囦歡銆傚啀鍐欎竴孌典唬鐮佽皟鐢ㄨ繖涓猣1鍑芥暟: // test.cxx //榪欎釜extern琛ㄧずf1鍑芥暟鍦ㄥ埆鐨勫湴鏂瑰畾涔夛紝榪欐牱鍙互閫氳繃 //緙栬瘧錛屼絾鏄摼鎺ョ殑鏃跺欒繕鏄渶瑕?/p>
//閾炬帴涓婂師鏉ョ殑搴撴枃浠? extern void f1(); int main() { f1(); return 0; } 銆銆閫氳繃gcc -c test.cxx -o test.o 浜х敓涓涓彨test.o鐨勬枃浠躲傜劧鍚庯紝鎴戜滑浣跨敤gcc test.o f1.o鏉ラ摼鎺ヤ袱涓枃浠訛紝鍙槸鍑洪敊浜嗭紝閿欒鐨勬彁紺烘槸: test.o(.text + 0x1f):test.cxx: undefine reference to 'f1()' 銆銆涔熷氨鏄錛屽湪緙栬瘧test.cxx鐨勬椂鍊欑紪璇戝櫒鏄嬌鐢–++鐨勬柟寮忔潵澶勭悊f1()鍑芥暟鐨勶紝浣嗘槸瀹為檯涓婇摼鎺ョ殑搴撴枃浠跺嵈鏄敤C鐨勬柟寮忔潵澶勭悊鍑芥暟鐨勶紝鎵浠ュ氨浼氬嚭鐜伴摼鎺ヨ繃涓嶅幓鐨勯敊璇?鍥犱負閾炬帴鍣ㄦ壘涓嶅埌鍑芥暟銆?/p>
銆銆鍥犳錛?span style="COLOR: #ff0000">涓轟簡鍦–++浠g爜涓皟鐢ㄧ敤C鍐欐垚鐨勫簱鏂囦歡錛屽氨闇瑕佺敤extern "C"鏉ュ憡璇夌紪璇戝櫒:榪欐槸涓涓敤C鍐欐垚鐨勫簱鏂囦歡錛岃鐢–鐨勬柟寮忔潵閾炬帴瀹冧滑銆?/span> 銆銆姣斿錛岀幇鍦ㄦ垜浠湁浜嗕竴涓狢搴撴枃浠訛紝瀹冪殑澶存枃浠舵槸f.h錛屼駭鐢熺殑lib鏂囦歡鏄痜.lib錛岄偅涔堟垜浠鏋滆鍦–++涓嬌鐢ㄨ繖涓簱鏂囦歡錛屾垜浠渶瑕佽繖鏍峰啓: extern "C" { #include "f.h" } 銆銆鍥炲埌涓婇潰鐨勯棶棰橈紝濡傛灉瑕佹敼姝i摼鎺ラ敊璇紝鎴戜滑闇瑕佽繖鏍峰瓙鏀瑰啓test.cxx: extern "C" { extern void f1(); } int main() { f1(); return 0; } 銆銆閲嶆柊緙栬瘧騫朵笖閾炬帴灝卞彲浠ヨ繃鍘諱簡. 鎬葷粨 C鍜孋++瀵瑰嚱鏁扮殑澶勭悊鏂瑰紡鏄笉鍚岀殑.extern "C"鏄嬌C++鑳藉璋冪敤C鍐欎綔鐨勫簱鏂囦歡鐨勪竴涓墜孌碉紝濡傛灉瑕佸緙栬瘧鍣ㄦ彁紺轟嬌鐢–鐨勬柟寮忔潵澶勭悊鍑芥暟鐨勮瘽錛岄偅涔堝氨瑕佷嬌鐢╡xtern "C"鏉ヨ鏄?/span>銆?/p>
1.寮曡█ C++璇█鐨勫垱寤哄垵琛鋒槸“a better C”錛屼絾鏄繖騫朵笉鎰忓懗鐫C++涓被浼糃璇█鐨勫叏灞鍙橀噺鍜屽嚱鏁版墍閲囩敤鐨勭紪璇戝拰榪炴帴鏂瑰紡涓嶤璇█瀹屽叏鐩稿悓銆備綔涓轟竴縐嶆涓嶤鍏煎鐨勮璦錛孋++淇濈暀浜嗕竴閮ㄥ垎榪囩▼ 寮忚璦鐨勭壒鐐癸紙琚笘浜虹О涓?#8220;涓嶅交搴曞湴闈㈠悜瀵硅薄”錛夛紝鍥犺屽畠鍙互瀹氫箟涓嶅睘浜庝換浣曠被鐨勫叏灞鍙橀噺鍜屽嚱鏁般備絾鏄紝C++姣曠珶鏄竴縐嶉潰鍚戝璞$殑紼嬪簭璁捐璇█錛屼負浜嗘敮鎸佸嚱鏁扮殑閲嶈澆錛孋++瀵瑰叏灞鍑芥暟鐨勫鐞嗘柟寮忎笌C鏈夋槑鏄劇殑涓嶅悓銆?/p>
2.浠庢爣鍑嗗ご鏂囦歡璇磋搗 鏌愪紒涓氭浘緇忕粰鍑哄涓嬬殑涓閬撻潰璇曢錛?/p>
闈㈣瘯棰?/p>
涓轟粈涔堟爣鍑嗗ご鏂囦歡閮芥湁綾諱技浠ヤ笅鐨勭粨鏋勶紵 #ifndef __INCvxWorksh #define __INCvxWorksh #ifdef __cplusplus extern "C" { #endif /*...*/ #ifdef __cplusplus } #endif #endif /* __INCvxWorksh */ 鍒嗘瀽 鏄劇劧錛屽ご鏂囦歡涓殑緙栬瘧瀹?#8220;#ifndef __INCvxWorksh銆?define __INCvxWorksh銆?endif” 鐨勪綔鐢ㄦ槸闃叉璇ュご鏂囦歡琚噸澶嶅紩鐢?/span>銆?/p>
閭d箞 #ifdef __cplusplus extern "C" { #endif #ifdef __cplusplus } #endif 鐨勪綔鐢ㄥ張鏄粈涔堝憿錛熸垜浠皢鍦ㄤ笅鏂囦竴涓閬撴潵銆?/p>
3.娣卞眰鎻瘑extern "C" extern "C" 鍖呭惈鍙岄噸鍚箟錛屼粠瀛楅潰涓婂嵆鍙緱鍒幫細棣栧厛錛岃瀹冧慨楗扮殑鐩爣鏄?#8220;extern”鐨勶紱鍏舵錛岃瀹冧慨楗扮殑鐩爣鏄?#8220;C”鐨勩傝鎴戜滑鏉ヨ緇嗚В璇昏繖涓ら噸鍚箟銆?/p>
錛?錛?nbsp; 琚玡xtern "C"闄愬畾鐨勫嚱鏁版垨鍙橀噺鏄痚xtern綾誨瀷鐨?/span>錛?/p>
extern鏄疌/C++璇█涓〃鏄庡嚱鏁板拰鍏ㄥ眬鍙橀噺浣滅敤鑼冨洿錛堝彲瑙佹э級鐨勫叧閿瓧錛岃鍏抽敭瀛楀憡璇夌紪璇戝櫒錛屽叾澹版槑鐨勫嚱鏁板拰鍙橀噺鍙互鍦ㄦ湰妯″潡鎴栧叾瀹冩ā鍧椾腑浣跨敤銆傝浣忥紝涓嬪垪璇彞錛?/p>
extern int a; 浠呬粎鏄竴涓彉閲忕殑澹版槑錛屽叾騫朵笉鏄湪瀹氫箟鍙橀噺a錛屽茍鏈負a鍒嗛厤鍐呭瓨絀洪棿銆傚彉閲廰鍦ㄦ墍鏈夋ā鍧椾腑浣滀負涓縐嶅叏灞鍙橀噺鍙兘琚畾涔変竴嬈★紝鍚﹀垯浼氬嚭鐜拌繛鎺ラ敊璇?/p>
閫氬父錛屽湪妯″潡鐨勫ご鏂囦歡涓鏈ā鍧楁彁渚涚粰鍏跺畠妯″潡寮曠敤鐨勫嚱鏁板拰鍏ㄥ眬鍙橀噺浠ュ叧閿瓧extern澹版槑銆備緥濡傦紝濡傛灉妯″潡B嬈插紩鐢ㄨ妯″潡A涓畾涔夌殑鍏ㄥ眬鍙橀噺鍜?鍑芥暟鏃跺彧闇鍖呭惈妯″潡A鐨勫ご鏂囦歡鍗沖彲銆傝繖鏍鳳紝妯″潡B涓皟鐢ㄦā鍧桝涓殑鍑芥暟鏃訛紝鍦ㄧ紪璇戦樁孌碉紝妯″潡B铏界劧鎵句笉鍒拌鍑芥暟錛屼絾鏄茍涓嶄細鎶ラ敊錛涘畠浼氬湪榪炴帴闃舵涓粠妯″潡 A緙栬瘧鐢熸垚鐨勭洰鏍囦唬鐮佷腑鎵懼埌姝ゅ嚱鏁般?/p>
涓巈xtern瀵瑰簲鐨勫叧閿瓧鏄痵tatic錛岃瀹冧慨楗扮殑鍏ㄥ眬鍙橀噺鍜屽嚱鏁板彧鑳藉湪鏈ā鍧椾腑浣跨敤銆傚洜姝わ紝涓涓嚱鏁版垨鍙橀噺鍙彲鑳借鏈ā鍧椾嬌鐢ㄦ椂錛屽叾涓嶅彲鑳借extern “C”淇グ銆?/p>
錛?錛?nbsp; 琚玡xtern "C"淇グ鐨勫彉閲忓拰鍑芥暟鏄寜鐓璇█鏂瑰紡緙栬瘧鍜岃繛鎺ョ殑錛?/p>
鏈姞extern “C”澹版槑鏃剁殑緙栬瘧鏂瑰紡 棣栧厛鐪嬬湅C++涓綾諱技C鐨勫嚱鏁版槸鎬庢牱緙栬瘧鐨勩?/p>
浣滀負涓縐嶉潰鍚戝璞$殑璇█錛孋++鏀寔鍑芥暟閲嶈澆錛岃岃繃紼嬪紡璇█C鍒欎笉鏀寔銆傚嚱鏁拌C++緙栬瘧鍚庡湪絎﹀彿搴撲腑鐨勫悕瀛椾笌C璇█鐨勪笉鍚屻備緥濡傦紝鍋囪鏌愪釜鍑芥暟鐨勫師鍨嬩負錛?/p>
void foo( int x, int y ); 璇ュ嚱鏁拌C緙栬瘧鍣ㄧ紪璇戝悗鍦ㄧ鍙峰簱涓殑鍚嶅瓧涓?span style="COLOR: #008000">_foo 鍚屾牱鍦幫紝C++涓殑鍙橀噺闄ゆ敮鎸佸眬閮ㄥ彉閲忓錛岃繕鏀寔綾繪垚鍛樺彉閲忓拰鍏ㄥ眬鍙橀噺銆傜敤鎴鋒墍緙栧啓紼嬪簭鐨勭被鎴愬憳鍙橀噺鍙兘涓庡叏灞鍙橀噺鍚屽悕錛屾垜浠互"."鏉ュ尯鍒嗐傝屾湰 璐ㄤ笂錛岀紪璇戝櫒鍦ㄨ繘琛岀紪璇戞椂錛屼笌鍑芥暟鐨勫鐞嗙浉浼鹼紝涔熶負綾諱腑鐨勫彉閲忓彇浜嗕竴涓嫭涓鏃犱簩鐨勫悕瀛楋紝榪欎釜鍚嶅瓧涓庣敤鎴風▼搴忎腑鍚屽悕鐨勫叏灞鍙橀噺鍚嶅瓧涓嶅悓銆?/p>
鏈姞extern "C"澹版槑鏃剁殑榪炴帴鏂瑰紡錛?/span> 鍋囪鍦–++涓紝妯″潡A鐨勫ご鏂囦歡濡備笅錛?/p>
// 妯″潡A澶存枃浠躲moduleA.h #ifndef MODULE_A_H #define MODULE_A_H int foo( int x, int y ); #endif 鍦ㄦā鍧桞涓紩鐢ㄨ鍑芥暟錛?/p>
// 妯″潡B瀹炵幇鏂囦歡銆moduleB.cpp 錛僫 nclude "moduleA.h" foo(2,3); 瀹為檯涓婏紝鍦ㄨ繛鎺ラ樁孌碉紝榪炴帴鍣ㄤ細浠庢ā鍧桝鐢熸垚鐨勭洰鏍囨枃浠秏oduleA.obj涓鎵綺foo_int_int榪欐牱鐨勭鍙鳳紒 鍔爀xtern "C"澹版槑鍚庣殑緙栬瘧鍜岃繛鎺ユ柟寮忥細 鍔爀xtern "C"澹版槑鍚庯紝妯″潡A鐨勫ご鏂囦歡鍙樹負錛?/p>
// 妯″潡A澶存枃浠躲moduleA.h #ifndef MODULE_A_H #define MODULE_A_H extern "C" int foo( int x, int y ); #endif 鍦ㄦā鍧桞鐨勫疄鐜版枃浠朵腑浠嶇劧璋冪敤foo( 2,3 )錛屽叾緇撴灉鏄細 錛?錛夋ā鍧桝緙栬瘧鐢熸垚foo鐨勭洰鏍囦唬鐮佹椂錛屾病鏈夊鍏跺悕瀛楄繘琛岀壒孌婂鐞嗭紝閲囩敤浜咰璇█鐨勬柟寮忥紱 錛?錛夎繛鎺ュ櫒鍦ㄤ負妯″潡B鐨勭洰鏍囦唬鐮佸鎵緁oo(2,3)璋冪敤鏃訛紝瀵繪壘鐨勬槸鏈粡淇敼鐨勭鍙峰悕_foo銆?/p>
濡傛灉鍦ㄦā鍧桝涓嚱鏁板0鏄庝簡foo涓篹xtern "C"綾誨瀷錛岃屾ā鍧桞涓寘鍚殑鏄痚xtern int foo( int x, int y ) 錛屽垯妯″潡B鎵句笉鍒版ā鍧桝涓殑鍑芥暟錛涘弽涔嬩害鐒躲?/p>
鎵浠ワ紝鍙互鐢ㄤ竴鍙ヨ瘽姒傛嫭extern “C”榪欎釜澹版槑鐨勭湡瀹炵洰鐨勶紙浠諱綍璇█涓殑浠諱綍璇硶鐗規х殑璇炵敓閮戒笉鏄殢鎰忚屼負鐨勶紝鏉ユ簮浜庣湡瀹炰笘鐣岀殑闇姹傞┍鍔ㄣ傛垜浠湪鎬濊冮棶棰樻椂錛屼笉鑳藉彧鍋滅暀鍦ㄨ繖涓璦鏄庝箞鍋氱殑錛岃繕瑕侀棶涓闂畠涓轟粈涔堣榪欎箞鍋氾紝鍔ㄦ満鏄粈涔堬紝榪欐牱鎴戜滑鍙互鏇存繁鍏ュ湴鐞嗚В璁稿闂錛夛細 瀹炵幇C++涓嶤鍙婂叾瀹冭璦鐨勬販鍚堢紪紼嬨?/p>
鏄庣櫧浜咰++涓璭xtern "C"鐨勮绔嬪姩鏈猴紝鎴戜滑涓嬮潰鏉ュ叿浣撳垎鏋恊xtern "C"閫氬父鐨勪嬌鐢ㄦ妧宸с?/p>
4.extern "C"鐨勬儻鐢ㄦ硶 錛?錛夊湪C++涓紩鐢–璇█涓殑鍑芥暟鍜屽彉閲忥紝鍦ㄥ寘鍚獵璇█澶存枃浠訛紙鍋囪涓篶Example.h錛夋椂錛岄渶榪涜涓嬪垪澶勭悊錛?/p>
extern "C" { 錛僫 nclude "cExample.h" } 鑰屽湪C璇█鐨勫ご鏂囦歡涓紝瀵瑰叾澶栭儴鍑芥暟鍙兘鎸囧畾涓篹xtern綾誨瀷錛孋璇█涓笉鏀寔extern "C"澹版槑錛屽湪.c鏂囦歡涓寘鍚簡extern "C"鏃朵細鍑虹幇緙栬瘧璇硶閿欒銆?/p>
絎旇呯紪鍐欑殑C++寮曠敤C鍑芥暟渚嬪瓙宸ョ▼涓寘鍚殑涓変釜鏂囦歡鐨勬簮浠g爜濡備笅錛?/p>
/* c璇█澶存枃浠訛細cExample.h */ #ifndef C_EXAMPLE_H #define C_EXAMPLE_H extern int add(int x,int y); #endif /* c璇█瀹炵幇鏂囦歡錛歝Example.c */ 錛僫 nclude "cExample.h" int add( int x, int y ) { return x + y; } // c++瀹炵幇鏂囦歡錛岃皟鐢╝dd錛歝ppFile.cpp extern "C" { 錛僫 nclude "cExample.h" } int main(int argc, char* argv[]) { add(2,3); return 0; } 濡傛灉C++璋冪敤涓涓狢璇█緙栧啓鐨?DLL鏃訛紝褰撳寘鎷?DLL鐨勫ご鏂囦歡鎴栧0鏄庢帴鍙e嚱鏁版椂錛屽簲鍔爀xtern "C" {銆}銆?/p>
錛?錛夊湪C涓紩鐢–++璇█涓殑鍑芥暟鍜屽彉閲忔椂錛孋++鐨勫ご鏂囦歡闇娣誨姞extern "C"錛屼絾鏄湪C璇█涓笉鑳界洿鎺ュ紩鐢ㄥ0鏄庝簡extern "C"鐨勮澶存枃浠訛紝搴旇浠呭皢C鏂囦歡涓皢C++涓畾涔夌殑extern "C"鍑芥暟澹版槑涓篹xtern綾誨瀷銆?span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: #000000; TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2">
絎旇呯紪鍐欑殑C寮曠敤C++鍑芥暟渚嬪瓙宸ョ▼涓寘鍚殑涓変釜鏂囦歡鐨勬簮浠g爜濡備笅錛?/p>
//C++澶存枃浠?cppExample.h #ifndef CPP_EXAMPLE_H #define CPP_EXAMPLE_H extern "C" int add( int x, int y ); #endif //C++瀹炵幇鏂囦歡 cppExample.cpp 錛僫 nclude "cppExample.h" int add( int x, int y ) { return x + y; } /* C瀹炵幇鏂囦歡 cFile.c /* 榪欐牱浼氱紪璇戝嚭閿欙細錛僫 nclude "cExample.h" */ extern int add( int x, int y ); int main( int argc, char* argv[] ) { add( 2, 3 ); return 0; }
瀹圭▼搴忔槸浼氬穿婧冪殑錛岃屽悗鑰呭畬鍏ㄦ紜?br>紼嬪簭婕旂ず錛?br>嫻嬭瘯鐜Devc++
浠g爜
榪愯緇撴灉
2293628 4199056 abc
2293624 2293624 abc
2293620 4199056 abc
#include <iostream>
using namespace std;
main()
{
char *c1 = "abc";
char c2[] = "abc";
char *c3 = ( char* )malloc(3);
c3 = "abc";
printf("%d %d %s\n",&c1,c1,c1);
printf("%d %d %s\n",&c2,c2,c2);
printf("%d %d %s\n",&c3,c3,c3);
getchar();
}
鍙傝冭祫鏂欙細
棣栧厛瑕佹悶娓呮緙栬瘧紼嬪簭鍗犵敤鐨勫唴瀛樼殑鍒嗗尯褰㈠紡錛?br>涓銆侀澶囩煡璇?紼嬪簭鐨勫唴瀛樺垎閰?br>涓涓敱c/C++緙栬瘧鐨勭▼搴忓崰鐢ㄧ殑鍐呭瓨鍒嗕負浠ヤ笅鍑犱釜閮ㄥ垎
1銆佹爤鍖猴紙stack錛?鐢辯紪璇戝櫒鑷姩鍒嗛厤閲婃斁錛屽瓨鏀懼嚱鏁扮殑鍙傛暟鍊鹼紝灞閮ㄥ彉閲忕殑鍊肩瓑銆傚叾鎿嶄綔鏂瑰紡綾諱技浜?/span>
鏁版嵁緇撴瀯涓殑鏍堛?br>2銆佸爢鍖猴紙heap錛?涓鑸敱紼嬪簭鍛樺垎閰嶉噴鏀撅紝鑻ョ▼搴忓憳涓嶉噴鏀撅紝紼嬪簭緇撴潫鏃跺彲鑳界敱OS鍥炴敹銆傛敞鎰忓畠涓庢暟鎹?/span>
緇撴瀯涓殑鍫嗘槸涓ゅ洖浜嬶紝鍒嗛厤鏂瑰紡鍊掓槸綾諱技浜庨摼琛紝鍛靛懙銆?br>3銆佸叏灞鍖猴紙闈欐佸尯錛夛紙static錛?鍏ㄥ眬鍙橀噺鍜岄潤鎬佸彉閲忕殑瀛樺偍鏄斁鍦ㄤ竴鍧楃殑錛屽垵濮嬪寲鐨勫叏灞鍙橀噺鍜岄潤鎬?/span>
鍙橀噺鍦ㄤ竴鍧楀尯鍩燂紝鏈垵濮嬪寲鐨勫叏灞鍙橀噺鍜屾湭鍒濆鍖栫殑闈欐佸彉閲忓湪鐩擱偦鐨勫彟涓鍧楀尯鍩熴傜▼搴忕粨鏉熷悗鐢辯郴緇?/span>
閲婃斁銆?br>4銆佹枃瀛楀父閲忓尯-甯擱噺瀛楃涓插氨鏄斁鍦ㄨ繖閲岀殑銆傜▼搴忕粨鏉熷悗鐢辯郴緇熼噴鏀俱?br>5銆佺▼搴忎唬鐮佸尯
榪欐槸涓涓墠杈堝啓鐨勶紝闈炲父璇︾粏
//main.cpp
int a=0; //鍏ㄥ眬鍒濆鍖栧尯
char *p1; //鍏ㄥ眬鏈垵濮嬪寲鍖?br>main()
{
int b;鏍?br>char s[]="abc"; //鏍?br>char *p2; //鏍?br>char *p3="123456"; //123456\0鍦ㄥ父閲忓尯錛宲3鍦ㄦ爤涓娿?br>static int c=0錛?//鍏ㄥ眬錛堥潤鎬侊級鍒濆鍖栧尯
p1 = (char*)malloc(10);
p2 = (char*)malloc(20); //鍒嗛厤寰楁潵寰?0鍜?0瀛楄妭鐨勫尯鍩熷氨鍦ㄥ爢鍖恒?br>strcpy(p1,"123456"); //123456\0鏀懼湪甯擱噺鍖猴紝緙栬瘧鍣ㄥ彲鑳戒細灝嗗畠涓巔3鎵鍚?123456"浼樺寲鎴愪竴涓?/span>鍦版柟銆?br>}
浜屻佸爢鍜屾爤鐨勭悊璁虹煡璇?br>2.1鐢寵鏂瑰紡
stack:
鐢辯郴緇熻嚜鍔ㄥ垎閰嶃備緥濡傦紝澹版槑鍦ㄥ嚱鏁頒腑涓涓眬閮ㄥ彉閲廼nt b;緋葷粺鑷姩鍦ㄦ爤涓負b寮杈熺┖闂?br>heap:
闇瑕佺▼搴忓憳鑷繁鐢寵錛屽茍鎸囨槑澶у皬錛屽湪c涓璵alloc鍑芥暟
濡俻1=(char*)malloc(10);
鍦–++涓敤new榪愮畻絎?br>濡俻2=(char*)malloc(10);
浣嗘槸娉ㄦ剰p1銆乸2鏈韓鏄湪鏍堜腑鐨勩?br>2.2
鐢寵鍚庣郴緇熺殑鍝嶅簲
鏍堬細鍙鏍堢殑鍓╀綑絀洪棿澶т簬鎵鐢寵絀洪棿錛岀郴緇熷皢涓虹▼搴忔彁渚涘唴瀛橈紝鍚﹀垯灝嗘姤寮傚父鎻愮ず鏍堟孩鍑恒?br>鍫嗭細棣栧厛搴旇鐭ラ亾鎿嶄綔緋葷粺鏈変竴涓褰曠┖闂插唴瀛樺湴鍧鐨勯摼琛紝褰撶郴緇熸敹鍒扮▼搴忕殑鐢寵鏃訛紝
浼氶亶鍘嗚閾捐〃錛屽鎵劇涓涓┖闂村ぇ浜庢墍鐢寵絀洪棿鐨勫爢緇撶偣錛岀劧鍚庡皢璇ョ粨鐐逛粠絀洪棽緇撶偣閾捐〃涓垹闄わ紝騫跺皢
璇ョ粨鐐圭殑絀洪棿鍒嗛厤緇欑▼搴忥紝鍙﹀錛屽浜庡ぇ澶氭暟緋葷粺錛屼細鍦ㄨ繖鍧楀唴瀛樼┖闂翠腑鐨勯鍦板潃澶勮褰曟湰嬈″垎閰嶇殑澶?/span>
灝忥紝榪欐牱錛屼唬鐮佷腑鐨刣elete璇彞鎵嶈兘姝g‘鐨勯噴鏀炬湰鍐呭瓨絀洪棿銆傚彟澶栵紝鐢變簬鎵懼埌鐨勫爢緇撶偣鐨勫ぇ灝忎笉涓瀹氭
濂界瓑浜庣敵璇風殑澶у皬錛岀郴緇熶細鑷姩鐨勫皢澶氫綑鐨勯偅閮ㄥ垎閲嶆柊鏀懼叆絀洪棽閾捐〃涓?br>2.3鐢寵澶у皬鐨勯檺鍒?br>鏍堬細鍦╓indows涓?鏍堟槸鍚戜綆鍦板潃鎵╁睍鐨勬暟鎹粨鏋勶紝鏄竴鍧楄繛緇殑鍐呭瓨鐨勫尯鍩熴傝繖鍙ヨ瘽鐨勬剰鎬濇槸鏍堥《鐨勫湴
鍧鍜屾爤鐨勬渶澶у閲忔槸緋葷粺棰勫厛瑙勫畾濂界殑錛屽湪WINDOWS涓嬶紝鏍堢殑澶у皬鏄?M錛堜篃鏈夌殑璇存槸1M錛屾諱箣鏄竴涓紪璇?/span>
鏃跺氨紜畾鐨勫父鏁幫級錛屽鏋滅敵璇風殑絀洪棿瓚呰繃鏍堢殑鍓╀綑絀洪棿鏃訛紝灝嗘彁紺簅verflow銆傚洜姝わ紝鑳戒粠鏍堣幏寰楃殑絀洪棿
杈冨皬銆?br>鍫嗭細鍫嗘槸鍚戦珮鍦板潃鎵╁睍鐨勬暟鎹粨鏋勶紝鏄笉榪炵畫鐨勫唴瀛樺尯鍩熴傝繖鏄敱浜庣郴緇熸槸鐢ㄩ摼琛ㄦ潵瀛樺偍鐨勭┖闂插唴瀛樺湴
鍧鐨勶紝鑷劧鏄笉榪炵畫鐨勶紝鑰岄摼琛ㄧ殑閬嶅巻鏂瑰悜鏄敱浣庡湴鍧鍚戦珮鍦板潃銆傚爢鐨勫ぇ灝忓彈闄愪簬璁$畻鏈虹郴緇熶腑鏈夋晥鐨?/span>
铏氭嫙鍐呭瓨銆傜敱姝ゅ彲瑙侊紝鍫嗚幏寰楃殑絀洪棿姣旇緝鐏墊椿錛屼篃姣旇緝澶с?br>2.4鐢寵鏁堢巼鐨勬瘮杈冿細
鏍?鐢辯郴緇熻嚜鍔ㄥ垎閰嶏紝閫熷害杈冨揩銆備絾紼嬪簭鍛樻槸鏃犳硶鎺у埗鐨勩?br>鍫?鏄敱new鍒嗛厤鐨勫唴瀛橈紝涓鑸熷害姣旇緝鎱紝鑰屼笖瀹規槗浜х敓鍐呭瓨紕庣墖,涓嶈繃鐢ㄨ搗鏉ユ渶鏂逛究.
鍙﹀錛屽湪WINDOWS涓嬶紝鏈濂界殑鏂瑰紡鏄敤Virtual Alloc鍒嗛厤鍐呭瓨錛屼粬涓嶆槸鍦ㄥ爢錛屼篃涓嶆槸鍦ㄦ爤,鑰屾槸鐩存帴鍦ㄨ繘
紼嬬殑鍦板潃絀洪棿涓繚鐣欎竴鍧楀唴瀛橈紝铏界劧鐢ㄨ搗鏉ユ渶涓嶆柟渚褲備絾鏄熷害蹇紝涔熸渶鐏墊椿銆?br>2.5鍫嗗拰鏍堜腑鐨勫瓨鍌ㄥ唴瀹?br>鏍堬細鍦ㄥ嚱鏁拌皟鐢ㄦ椂錛岀涓涓繘鏍堢殑鏄富鍑芥暟涓悗鐨勪笅涓鏉℃寚浠わ紙鍑芥暟璋冪敤璇彞鐨勪笅涓鏉″彲鎵ц璇彞錛夌殑
鍦板潃錛岀劧鍚庢槸鍑芥暟鐨勫悇涓弬鏁幫紝鍦ㄥぇ澶氭暟鐨凜緙栬瘧鍣ㄤ腑錛屽弬鏁版槸鐢卞彸寰宸﹀叆鏍堢殑錛岀劧鍚庢槸鍑芥暟涓殑灞閮ㄥ彉
閲忋傛敞鎰忛潤鎬佸彉閲忔槸涓嶅叆鏍堢殑銆?br>褰撴湰嬈″嚱鏁拌皟鐢ㄧ粨鏉熷悗錛屽眬閮ㄥ彉閲忓厛鍑烘爤錛岀劧鍚庢槸鍙傛暟錛屾渶鍚庢爤欏舵寚閽堟寚鍚戞渶寮濮嬪瓨鐨勫湴鍧錛屼篃灝辨槸涓?/span>
鍑芥暟涓殑涓嬩竴鏉℃寚浠わ紝紼嬪簭鐢辮鐐圭戶緇繍琛屻?br>鍫嗭細涓鑸槸鍦ㄥ爢鐨勫ご閮ㄧ敤涓涓瓧鑺傚瓨鏀懼爢鐨勫ぇ灝忋傚爢涓殑鍏蜂綋鍐呭鐢辯▼搴忓憳瀹夋帓銆?br>2.6瀛樺彇鏁堢巼鐨勬瘮杈?br>char s1[]="aaaaaaaaaaaaaaa";
char *s2="bbbbbbbbbbbbbbbbb";
aaaaaaaaaaa鏄湪榪愯鏃跺埢璧嬪肩殑錛?br>鑰宐bbbbbbbbbb鏄湪緙栬瘧鏃跺氨紜畾鐨勶紱
浣嗘槸錛屽湪浠ュ悗鐨勫瓨鍙栦腑錛屽湪鏍堜笂鐨勬暟緇勬瘮鎸囬拡鎵鎸囧悜鐨勫瓧絎︿覆(渚嬪鍫?蹇?br>姣斿錛?br>#include
voidmain()
{
char a=1;
char c[]="1234567890";
char *p="1234567890";
a = c[1];
a = p[1];
return;
}
瀵瑰簲鐨勬眹緙栦唬鐮?br>10:a=c[1];
004010678A4DF1movcl,byteptr[ebp-0Fh]
0040106A884DFCmovbyteptr[ebp-4],cl
11:a=p[1];
0040106D8B55ECmovedx,dwordptr[ebp-14h]
004010708A4201moval,byteptr[edx+1]
004010738845FCmovbyteptr[ebp-4],al
絎竴縐嶅湪璇誨彇鏃剁洿鎺ュ氨鎶婂瓧絎︿覆涓殑鍏冪礌璇誨埌瀵勫瓨鍣╟l涓紝鑰岀浜岀鍒欒鍏堟妸鎸囬拡鍊艱鍒癳dx涓紝鍦ㄦ牴鎹?/span>
edx璇誨彇瀛楃錛屾樉鐒舵參浜嗐?br>2.7灝忕粨錛?br>鍫嗗拰鏍堢殑鍖哄埆鍙互鐢ㄥ涓嬬殑姣斿柣鏉ョ湅鍑猴細
浣跨敤鏍堝氨璞℃垜浠幓楗閲屽悆楗紝鍙鐐硅彍錛堝彂鍑虹敵璇鳳級銆佷粯閽便佸拰鍚冿紙浣跨敤錛夛紝鍚冮ケ浜嗗氨璧幫紝涓嶅繀鐞嗕細
鍒囪彍銆佹礂鑿滅瓑鍑嗗宸ヤ綔鍜屾礂紕椼佸埛閿呯瓑鎵熬宸ヤ綔錛屼粬鐨勫ソ澶勬槸蹇嵎錛屼絾鏄嚜鐢卞害灝忋?br>浣跨敤鍫嗗氨璞℃槸鑷繁鍔ㄦ墜鍋氬枩嬈㈠悆鐨勮彍鑲達紝姣旇緝楹葷儲錛屼絾鏄瘮杈冪鍚堣嚜宸辯殑鍙e懗錛岃屼笖鑷敱搴﹀ぇ銆?/span>
鑷垜鎬葷粨錛?br>char *c1 = "abc";瀹為檯涓婂厛鏄湪鏂囧瓧甯擱噺鍖哄垎閰嶄簡涓鍧楀唴瀛樻斁"abc",鐒跺悗鍦ㄦ爤涓婂垎閰嶄竴鍦板潃緇檆1騫舵寚鍚?/span>
榪欏潡鍦板潃錛岀劧鍚庢敼鍙樺父閲?abc"鑷劧浼氬穿婧?/span>
鐒惰宑har c2[] = "abc",瀹為檯涓奱bc鍒嗛厤鍐呭瓨鐨勫湴鏂瑰拰涓婅呭茍涓嶄竴鏍鳳紝鍙互浠?br>4199056
2293624 鐪嬪嚭錛屽畬鍏ㄦ槸涓ゅ潡鍦版柟錛屾帹鏂?199056澶勪簬甯擱噺鍖猴紝鑰?293624澶勪簬鏍堝尯
2293628
2293624
2293620 榪欐杈撳嚭鐪嬪嚭涓変釜鎸囬拡鍒嗛厤鐨勫尯鍩熶負鏍堝尯錛岃屼笖鏄粠楂樺湴鍧鍒頒綆鍦板潃
2293620 4199056 abc 鐪嬪嚭緙栬瘧鍣ㄥ皢c3浼樺寲鎸囧悜甯擱噺鍖虹殑"abc"
緇х畫鎬濊冿細
浠g爜錛?br>
杈撳嚭錛?br>2293628 4199056 abc
2293624 2293624 abc
2293620 4012976 gbc
鍐欐垚娉ㄩ噴閭f牱錛屽悗闈㈡敼鍔ㄥ氨浼氬穿婧?br>鍙strcpy(c3,"abc");abc鏄彟涓鍧楀湴鏂瑰垎閰嶇殑錛岃屼笖鍙互鏀瑰彉錛屽拰涓婇潰鐨勫弬鑰冩枃妗h娉曟湁浜涗笉涓瀹氾紝
#include <iostream>
using namespace std;
main()
{
char *c1 = "abc";
char c2[] = "abc";
char *c3 = ( char* )malloc(3);
// *c3 = "abc" //error
strcpy(c3,"abc");
c3[0] = 'g';
printf("%d %d %s\n",&c1,c1,c1);
printf("%d %d %s\n",&c2,c2,c2);
printf("%d %d %s\n",&c3,c3,c3);
getchar();
}
1)鍑芥暟鍙傛暟鐨勫帇鏍堥『搴忥紝2)鐢辮皟鐢ㄨ呰繕鏄璋冪敤鑰呮妸鍙傛暟寮瑰嚭鏍堬紝3)浠ュ強浜х敓鍑芥暟淇グ鍚嶇殑鏂規硶銆?/span>
1銆?/span>__stdcall璋冪敤綰﹀畾錛氬嚱鏁扮殑鍙傛暟鑷彸鍚戝乏閫氳繃鏍堜紶閫掞紝琚皟鐢ㄧ殑鍑芥暟鍦ㄨ繑鍥炲墠娓呯悊浼犻佸弬鏁扮殑鍐呭瓨鏍堬紝
2銆?/span>_cdecl鏄?/span>C鍜?/span>C錛嬶紜紼嬪簭鐨勭己鐪佽皟鐢ㄦ柟寮忋傛瘡涓涓皟鐢ㄥ畠鐨勫嚱鏁伴兘鍖呭惈娓呯┖鍫嗘爤鐨勪唬鐮侊紝鎵浠ヤ駭鐢熺殑鍙墽琛屾枃浠跺ぇ灝忎細姣旇皟鐢?/span>_stdcall鍑芥暟鐨勫ぇ銆傚嚱鏁伴噰鐢ㄤ粠鍙沖埌宸︾殑鍘嬫爤鏂瑰紡銆傛敞鎰忥細瀵逛簬鍙彉鍙傛暟鐨勬垚鍛樺嚱鏁幫紝濮嬬粓浣跨敤__cdecl鐨勮漿鎹㈡柟寮忋?/span>
3銆?/span>__fastcall璋冪敤綰﹀畾錛氬畠鏄氳繃瀵勫瓨鍣ㄦ潵浼犻佸弬鏁扮殑錛堝疄闄呬笂錛屽畠鐢?/span>ECX鍜?/span>EDX浼犻佸墠涓や釜鍙屽瓧錛?/span>DWORD錛夋垨鏇村皬鐨勫弬鏁幫紝鍓╀笅鐨勫弬鏁頒粛鏃ц嚜鍙沖悜宸﹀帇鏍堜紶閫侊紝琚皟鐢ㄧ殑鍑芥暟鍦ㄨ繑鍥炲墠娓呯悊浼犻佸弬鏁扮殑鍐呭瓨鏍堬級銆?/span>
4銆?/span>thiscall浠呬粎搴旂敤浜?/span>"C++"鎴愬憳鍑芥暟銆?/span>this鎸囬拡瀛樻斁浜?/span>CX瀵勫瓨鍣紝鍙傛暟浠庡彸鍒板乏鍘嬨?/span>thiscall涓嶆槸鍏抽敭璇嶏紝鍥犳涓嶈兘琚▼搴忓憳鎸囧畾銆?/span>
5銆?/span>naked call閲囩敤1-4鐨勮皟鐢ㄧ害瀹氭椂錛屽鏋滃繀瑕佺殑璇濓紝榪涘叆鍑芥暟鏃剁紪璇戝櫒浼氫駭鐢熶唬鐮佹潵淇濆瓨ESI錛?/span>EDI錛?/span>EBX錛?/span>EBP瀵勫瓨鍣紝閫鍑哄嚱鏁版椂鍒欎駭鐢熶唬鐮佹仮澶嶈繖浜涘瘎瀛樺櫒鐨勫唴瀹廣?/span>naked call涓嶄駭鐢熻繖鏍風殑浠g爜銆?/span>naked call涓嶆槸綾誨瀷淇グ絎︼紝鏁呭繀欏誨拰_declspec鍏卞悓浣跨敤銆?/span>
璋冪敤綰﹀畾鍙互閫氳繃宸ョ▼璁劇疆錛?/span>Setting...\C/C++ \Code Generation欏硅繘琛岄夋嫨錛岀己鐪佺姸鎬佷負__cdecl銆?/span>
鍚嶅瓧淇グ綰﹀畾錛?/span>
1銆佷慨楗板悕(Decoration name)錛?/span>"C"鎴栬?/span>"C++"鍑芥暟鍦ㄥ唴閮紙緙栬瘧鍜岄摼鎺ワ級閫氳繃淇グ鍚嶈瘑鍒?/span>
2銆?/span>C緙栬瘧鏃跺嚱鏁板悕淇グ綰﹀畾瑙勫垯錛?/span>
__stdcall璋冪敤綰﹀畾鍦ㄨ緭鍑哄嚱鏁板悕鍓嶅姞涓婁竴涓笅鍒掔嚎鍓嶇紑錛屽悗闈㈠姞涓婁竴涓?/span>"@"絎﹀彿鍜屽叾鍙傛暟鐨勫瓧鑺傛暟錛屾牸寮忎負_functionname@number,渚嬪錛?/span>function(int a, int b)錛屽叾淇グ鍚嶄負錛?/span>_function@8
__cdecl璋冪敤綰﹀畾浠呭湪杈撳嚭鍑芥暟鍚嶅墠鍔犱笂涓涓笅鍒掔嚎鍓嶇紑錛屾牸寮忎負_functionname銆?/span>
__fastcall璋冪敤綰﹀畾鍦ㄨ緭鍑哄嚱鏁板悕鍓嶅姞涓婁竴涓?/span>"@"絎﹀彿錛屽悗闈篃鏄竴涓?/span>"@"絎﹀彿鍜屽叾鍙傛暟鐨勫瓧鑺傛暟錛屾牸寮忎負@functionname@number銆?/span>
3銆?/span>C++緙栬瘧鏃跺嚱鏁板悕淇グ綰﹀畾瑙勫垯錛?/span>
__stdcall璋冪敤綰﹀畾錛?/span>
1)銆佷互"?"鏍囪瘑鍑芥暟鍚嶇殑寮濮嬶紝鍚庤窡鍑芥暟鍚嶏紱
2)銆佸嚱鏁板悕鍚庨潰浠?/span>"@@YG"鏍囪瘑鍙傛暟琛ㄧ殑寮濮嬶紝鍚庤窡鍙傛暟琛紱
3)銆佸弬鏁拌〃浠ヤ唬鍙瘋〃紺猴細
X--void 錛?/span>
D--char錛?/span>
E--unsigned char錛?/span>
F--short錛?/span>
H--int錛?/span>
I--unsigned int錛?/span>
J--long錛?/span>
K--unsigned long錛?/span>
M--float錛?/span>
N--double錛?/span>
_N--bool錛?/span>
PA--琛ㄧず鎸囬拡錛屽悗闈㈢殑浠e彿琛ㄦ槑鎸囬拡綾誨瀷錛屽鏋滅浉鍚岀被鍨嬬殑鎸囬拡榪炵畫鍑虹幇錛屼互"0"浠f浛錛屼竴涓?/span>"0"浠h〃涓嬈¢噸澶嶏紱
4)銆佸弬鏁拌〃鐨勭涓欏逛負璇ュ嚱鏁扮殑榪斿洖鍊肩被鍨嬶紝鍏跺悗渚濇涓哄弬鏁扮殑鏁版嵁綾誨瀷,鎸囬拡鏍囪瘑鍦ㄥ叾鎵鎸囨暟鎹被鍨嬪墠錛?/span>
5)銆佸弬鏁拌〃鍚庝互"@Z"鏍囪瘑鏁翠釜鍚嶅瓧鐨勭粨鏉燂紝濡傛灉璇ュ嚱鏁版棤鍙傛暟錛屽垯浠?/span>"Z"鏍囪瘑緇撴潫銆?/span>
鍏舵牸寮忎負"?functionname@@YG*****@Z"鎴?/span>"?functionname@@YG*XZ"錛屼緥濡?/span>
int Test1(char *var1,unsigned long)----"?Test1@@YGHPADK@Z"
void Test2()-----“?Test2@@YGXXZ”
__cdecl璋冪敤綰﹀畾錛?/span>
瑙勫垯鍚屼笂闈㈢殑_stdcall璋冪敤綰﹀畾錛屽彧鏄弬鏁拌〃鐨勫紑濮嬫爣璇嗙敱涓婇潰鐨?/span>"@@YG"鍙樹負"@@YA"銆?/span>
__fastcall璋冪敤綰﹀畾錛?/span>
瑙勫垯鍚屼笂闈㈢殑_stdcall璋冪敤綰﹀畾錛屽彧鏄弬鏁拌〃鐨勫紑濮嬫爣璇嗙敱涓婇潰鐨?/span>"@@YG"鍙樹負"@@YI"銆?/span>
VC++瀵瑰嚱鏁扮殑鐪佺己澹版槑鏄?/span>"__cedcl",灝嗗彧鑳借C/C++璋冪敤.
娉ㄦ剰錛?/span>
1銆?/span>_beginthread闇瑕?/span>__cdecl鐨勭嚎紼嬪嚱鏁板湴鍧錛?/span>_beginthreadex鍜?/span>CreateThread闇瑕?/span>__stdcall鐨勭嚎紼嬪嚱鏁板湴鍧銆?/span>
2銆佷竴鑸?/span>WIN32鐨勫嚱鏁伴兘鏄?/span>__stdcall銆傝屼笖鍦?/span>Windef.h涓湁濡備笅鐨勫畾涔夛細
#define CALLBACK __stdcall
#define WINAPI銆 __stdcall
3銆?/span>extern "C" _declspec(dllexport) int __cdecl Add(int a, int b);
typedef int (__cdecl*FunPointer)(int a, int b);
淇グ絎︾殑涔﹀啓欏哄簭濡備笂銆?/span>
4銆?/span>extern "C"鐨勪綔鐢細濡傛灉Add(int a, int b)鏄湪c璇█緙栬瘧鍣ㄧ紪璇戯紝鑰屽湪c++鏂囦歡浣跨敤錛屽垯闇瑕佸湪c++鏂囦歡涓0鏄庯細extern "C" Add(int a, int b)錛屽洜涓?/span>c緙栬瘧鍣ㄥ拰c++緙栬瘧鍣ㄥ鍑芥暟鍚嶇殑瑙i噴涓嶄竴鏍鳳紙c++緙栬瘧鍣ㄨВ閲婂嚱鏁板悕鐨勬椂鍊欒鑰冭檻鍑芥暟鍙傛暟錛岃繖鏍鋒槸浜嗘柟渚垮嚱鏁伴噸杞斤紝鑰屽湪c璇█涓笉瀛樺湪鍑芥暟閲嶈澆鐨勯棶棰橈級錛屼嬌鐢?/span>extern "C"錛屽疄璐ㄥ氨鏄憡璇?/span>c++緙栬瘧鍣紝璇ュ嚱鏁版槸c搴撻噷闈㈢殑鍑芥暟銆傚鏋滀笉浣跨敤extern "C"鍒欎細鍑虹幇閾炬帴閿欒銆?/span>
涓鑸薄濡備笅浣跨敤錛?/span>
#ifdef _cplusplus
#define EXTERN_C extern "C"
#else
#define EXTERN_C extern
#endif
#ifdef _cplusplus
extern "C"{
#endif
EXTERN_C int func(int a, int b);
#ifdef _cplusplus
}
#endif
5銆?/span>MFC鎻愪緵浜嗕竴浜涘畯錛屽彲浠ヤ嬌鐢?/span>AFX_EXT_CLASS鏉ヤ唬鏇?/span>__declspec(DLLexport)錛屽茍淇グ綾誨悕錛屼粠鑰屽鍑虹被錛?/span>AFX_API_EXPORT鏉ヤ慨楗板嚱鏁幫紝AFX_DATA_EXPORT鏉ヤ慨楗板彉閲?/span>
AFX_CLASS_IMPORT錛?/span>__declspec(DLLexport)
AFX_API_IMPORT錛?/span>__declspec(DLLexport)
AFX_DATA_IMPORT錛?/span>__declspec(DLLexport)
AFX_CLASS_EXPORT錛?/span>__declspec(DLLexport)
AFX_API_EXPORT錛?/span>__declspec(DLLexport)
AFX_DATA_EXPORT錛?/span>__declspec(DLLexport)
AFX_EXT_CLASS錛?/span>#ifdef _AFXEXT
AFX_CLASS_EXPORT
#else
AFX_CLASS_IMPORT
6銆?/span>DLLMain璐熻矗鍒濆鍖?/span>(Initialization)鍜岀粨鏉?/span>(Termination)宸ヤ綔錛屾瘡褰撲竴涓柊鐨勮繘紼嬫垨鑰呰榪涚▼鐨勬柊鐨勭嚎紼嬭闂?/span>DLL鏃訛紝鎴栬呰闂?/span>DLL鐨勬瘡涓涓繘紼嬫垨鑰呯嚎紼嬩笉鍐嶄嬌鐢?/span>DLL鎴栬呯粨鏉熸椂錛岄兘浼氳皟鐢?/span>DLLMain銆備絾鏄紝浣跨敤TerminateProcess鎴?/span>TerminateThread緇撴潫榪涚▼鎴栬呯嚎紼嬶紝涓嶄細璋冪敤DLLMain銆?/span>
7銆佷竴涓?/span>DLL鍦ㄥ唴瀛樹腑鍙湁涓涓疄渚?/span>
DLL紼嬪簭鍜岃皟鐢ㄥ叾杈撳嚭鍑芥暟鐨勭▼搴忕殑鍏崇郴錛?/span>
1)銆?/span>DLL涓庤繘紼嬨佺嚎紼嬩箣闂寸殑鍏崇郴
DLL妯″潡琚槧灝勫埌璋冪敤瀹冪殑榪涚▼鐨勮櫄鎷熷湴鍧絀洪棿銆?/span>
DLL浣跨敤鐨勫唴瀛樹粠璋冪敤榪涚▼鐨勮櫄鎷熷湴鍧絀洪棿鍒嗛厤錛屽彧鑳借璇ヨ繘紼嬬殑綰跨▼鎵璁塊棶銆?/span>
DLL鐨勫彞鏌勫彲浠ヨ璋冪敤榪涚▼浣跨敤錛涜皟鐢ㄨ繘紼嬬殑鍙ユ焺鍙互琚?/span>DLL浣跨敤銆?/span>
DLLDLL鍙互鏈夎嚜宸辯殑鏁版嵁孌碉紝浣嗘病鏈夎嚜宸辯殑鍫嗘爤錛屼嬌鐢ㄨ皟鐢ㄨ繘紼嬬殑鏍堬紝涓庤皟鐢ㄥ畠鐨勫簲鐢ㄧ▼搴忕浉鍚岀殑鍫嗘爤妯″紡銆?/span>
2)銆佸叧浜庡叡浜暟鎹
DLL瀹氫箟鐨勫叏灞鍙橀噺鍙互琚皟鐢ㄨ繘紼嬭闂紱DLL鍙互璁塊棶璋冪敤榪涚▼鐨勫叏灞鏁版嵁銆備嬌鐢ㄥ悓涓DLL鐨勬瘡涓涓繘紼嬮兘鏈夎嚜宸辯殑DLL鍏ㄥ眬鍙橀噺瀹炰緥銆傚鏋滃涓嚎紼嬪茍鍙戣闂悓涓鍙橀噺錛屽垯闇瑕佷嬌鐢ㄥ悓姝ユ満鍒訛紱瀵逛竴涓?/span>DLL鐨勫彉閲忥紝濡傛灉甯屾湜姣忎釜浣跨敤DLL鐨勭嚎紼嬮兘鏈夎嚜宸辯殑鍊鹼紝鍒欏簲璇ヤ嬌鐢ㄧ嚎紼嬪眬閮ㄥ瓨鍌?/span>(TLS錛?/span>Thread Local Strorage)銆?/span>
Visual C++ Compiler Options鍙互鎸囧畾鐨?span>Calling
Convention鏈?/span> 3縐嶏細
class base

{
public:
base(int i):m_j(i),m_i(m_j)
{
}
int get_i()
{
return m_i;
}
int get_j()
{
return m_j;
}
protected:
private:
int m_i;
int m_j;
};
int main(int argc, char* argv[])

{
base obj(98);
cout << obj.get_i() << endl
<< obj.get_j() << endl;
return 0;
}
鍦ㄥ甫鍙傛暟鐨勬瀯閫犲嚱鏁頒腑錛屽垵濮嬪寲鍒楄〃鐨勫垵濮嬪寲鍙橀噺欏哄簭鏄牴鎹垚鍛樺彉閲忕殑澹版槑欏哄簭鏉ユ墽琛岀殑錛屽洜姝_i浼氳
璧嬩簣涓涓殢鏈哄鹼紝杈撳嚭鏄?br>-858993460
98
濡傛灉鍦ㄥ0鏄庡彉閲忎負
int m_j;
class A

{
const int Size = 0;
}
class A

{
A()
{
const int Size = 10;
}
}; static 澹版槑鐨勫彉閲忓湪C璇█涓湁涓ゆ柟闈㈢殑鐗瑰緛錛?br>銆銆1)銆佸彉閲忎細琚斁鍦ㄧ▼搴忕殑鍏ㄥ眬瀛樺偍鍖轟腑錛岃繖鏍峰彲浠ュ湪涓嬩竴嬈¤皟鐢ㄧ殑鏃跺欒繕鍙互淇濇寔鍘熸潵鐨勮祴鍊箋傝繖涓鐐規槸瀹冧笌鍫嗘爤鍙橀噺鍜屽爢鍙橀噺鐨勫尯鍒?br>銆銆2)銆佸彉閲忕敤static鍛婄煡緙栬瘧鍣紝鑷繁浠呬粎鍦ㄥ彉閲忕殑浣滅敤鑼冨洿鍐呭彲瑙併傝繖涓鐐規槸瀹冧笌鍏ㄥ眬鍙橀噺鐨勫尯鍒?br>Tips:
銆銆A.鑻ュ叏灞鍙橀噺浠呭湪鍗曚釜C鏂囦歡涓闂紝鍒欏彲浠ュ皢榪欎釜鍙橀噺淇敼涓洪潤鎬佸叏灞鍙橀噺錛屼互闄嶄綆妯″潡闂寸殑鑰﹀悎搴︼紱
銆銆B.鑻ュ叏灞鍙橀噺浠呯敱鍗曚釜鍑芥暟璁塊棶錛屽垯鍙互灝嗚繖涓彉閲忔敼涓鴻鍑芥暟鐨勯潤鎬佸眬閮ㄥ彉閲忥紝浠ラ檷浣庢ā鍧楅棿鐨勮﹀悎搴︼紱
銆銆C.璁捐鍜屼嬌鐢ㄨ闂姩鎬佸叏灞鍙橀噺銆侀潤鎬佸叏灞鍙橀噺銆侀潤鎬佸眬閮ㄥ彉閲忕殑鍑芥暟鏃訛紝闇瑕佽冭檻閲嶅叆闂錛?br> D.濡傛灉鎴戜滑闇瑕佷竴涓彲閲嶅叆鐨勫嚱鏁幫紝閭d箞錛屾垜浠竴瀹氳閬垮厤鍑芥暟涓嬌鐢╯tatic鍙橀噺(榪欐牱鐨勫嚱鏁拌縐頒負錛氬甫“鍐呴儴瀛樺偍鍣?#8221;鍔熻兘鐨勭殑鍑芥暟)
E.鍑芥暟涓繀欏昏浣跨敤static鍙橀噺鎯呭喌:姣斿褰撴煇鍑芥暟鐨勮繑鍥炲間負鎸囬拡綾誨瀷鏃訛紝鍒欏繀欏繪槸static鐨勫眬閮ㄥ彉閲忕殑鍦板潃浣滀負榪斿洖鍊鹼紝鑻ヤ負auto綾誨瀷錛屽垯榪斿洖涓洪敊鎸囬拡銆?o:p>
鍑芥暟鍓嶅姞static浣垮緱鍑芥暟鎴愪負闈欐佸嚱鏁般備絾姝ゅ“static”鐨勫惈涔変笉鏄寚瀛樺偍鏂瑰紡錛岃屾槸鎸囧鍑芥暟鐨勪綔鐢ㄥ煙浠呭眬闄愪簬鏈枃浠?鎵浠ュ張縐板唴閮ㄥ嚱鏁?銆備嬌鐢ㄥ唴閮ㄥ嚱鏁扮殑濂藉鏄細涓嶅悓鐨勪漢緙栧啓涓嶅悓鐨勫嚱鏁版椂錛屼笉鐢ㄦ媴蹇冭嚜宸卞畾涔夌殑鍑芥暟錛屾槸鍚︿細涓庡叾瀹冩枃浠朵腑鐨勫嚱鏁板悓鍚嶃?o:p>
鎵╁睍鍒嗘瀽:鏈static鏈夌潃涓嶅甯哥殑鍘嗗彶.璧峰垵錛屽湪C涓紩鍏ュ叧閿瓧static鏄負浜嗚〃紺洪鍑轟竴涓潡鍚庝粛鐒跺瓨鍦ㄧ殑灞閮ㄥ彉閲忋傞殢鍚庯紝static鍦–涓湁浜嗙浜岀鍚箟錛氱敤鏉ヨ〃紺轟笉鑳借鍏跺畠鏂囦歡璁塊棶鐨勫叏灞鍙橀噺鍜屽嚱鏁般備負浜嗛伩鍏嶅紩鍏ユ柊鐨勫叧閿瓧錛屾墍浠ヤ粛浣跨敤static鍏抽敭瀛楁潵琛ㄧず榪欑浜岀鍚箟銆傛渶鍚庯紝C++閲嶇敤浜嗚繖涓叧閿瓧錛屽茍璧嬩簣瀹冧笌鍓嶉潰涓嶅悓鐨勭涓夌鍚箟錛氳〃紺哄睘浜庝竴涓被鑰屼笉鏄睘浜庢綾葷殑浠諱綍鐗瑰畾瀵硅薄鐨勫彉閲忓拰鍑芥暟(涓嶫ava涓鍏抽敭瀛楃殑鍚箟鐩稿悓)銆?o:p>
鍏ㄥ眬鍙橀噺銆侀潤鎬佸叏灞鍙橀噺銆侀潤鎬佸眬閮ㄥ彉閲忓拰灞閮ㄥ彉閲忕殑鍖哄埆
鍙橀噺鍙互鍒嗕負錛氬叏灞鍙橀噺銆侀潤鎬佸叏灞鍙橀噺銆侀潤鎬佸眬閮ㄥ彉閲忓拰灞閮ㄥ彉閲忋?br> 鎸夊瓨鍌ㄥ尯鍩熷垎錛屽叏灞鍙橀噺銆侀潤鎬佸叏灞鍙橀噺鍜岄潤鎬佸眬閮ㄥ彉閲忛兘瀛樻斁鍦ㄥ唴瀛樼殑闈欐佸瓨鍌ㄥ尯鍩燂紝灞閮ㄥ彉閲忓瓨鏀懼湪鍐呭瓨鐨勬爤鍖恒?br> 鎸変綔鐢ㄥ煙鍒嗭紝鍏ㄥ眬鍙橀噺鍦ㄦ暣涓伐紼嬫枃浠跺唴閮芥湁鏁堬紱闈欐佸叏灞鍙橀噺鍙湪瀹氫箟瀹冪殑鏂囦歡鍐呮湁鏁堬紱闈欐佸眬閮ㄥ彉閲忓彧鍦ㄥ畾涔夊畠鐨勫嚱鏁板唴鏈夋晥錛屽彧鏄▼搴忎粎鍒嗛厤涓嬈″唴瀛橈紝鍑芥暟榪斿洖鍚庯紝璇ュ彉閲忎笉浼氭秷澶憋紱灞閮ㄥ彉閲忓湪瀹氫箟瀹冪殑鍑芥暟鍐呮湁鏁堬紝浣嗘槸鍑芥暟榪斿洖鍚庡け鏁堛?o:p>
鍏ㄥ眬鍙橀噺(澶栭儴鍙橀噺)鐨勮鏄庝箣鍓嶅啀鍐犱互static 灝辨瀯鎴愪簡闈欐佺殑鍏ㄥ眬鍙橀噺銆傚叏灞鍙橀噺鏈韓灝辨槸闈欐佸瓨鍌ㄦ柟寮忥紝 闈欐佸叏灞鍙橀噺褰撶劧涔熸槸闈欐佸瓨鍌ㄦ柟寮忋?榪欎袱鑰呭湪瀛樺偍鏂瑰紡涓婂茍鏃犱笉鍚屻傝繖涓よ呯殑鍖哄埆铏藉湪浜庨潪闈欐佸叏灞鍙橀噺鐨勪綔鐢ㄥ煙鏄暣涓簮紼嬪簭錛?褰撲竴涓簮紼嬪簭鐢卞涓簮鏂囦歡緇勬垚鏃訛紝闈為潤鎬佺殑鍏ㄥ眬鍙橀噺鍦ㄥ悇涓簮鏂囦歡涓兘鏄湁鏁堢殑銆?鑰岄潤鎬佸叏灞鍙橀噺鍒欓檺鍒朵簡鍏朵綔鐢ㄥ煙錛?鍗沖彧鍦ㄥ畾涔夎鍙橀噺鐨勬簮鏂囦歡鍐呮湁鏁堬紝 鍦ㄥ悓涓婧愮▼搴忕殑鍏跺畠婧愭枃浠朵腑涓嶈兘浣跨敤瀹冦傜敱浜庨潤鎬佸叏灞鍙橀噺鐨勪綔鐢ㄥ煙灞闄愪簬涓涓簮鏂囦歡鍐咃紝鍙兘涓鴻婧愭枃浠跺唴鐨勫嚱鏁板叕鐢紝 鍥犳鍙互閬垮厤鍦ㄥ叾瀹冩簮鏂囦歡涓紩璧烽敊璇?
銆銆浠庝互涓婂垎鏋愬彲浠ョ湅鍑猴紝 鎶婂眬閮ㄥ彉閲忔敼鍙樹負闈欐佸彉閲忓悗鏄敼鍙樹簡瀹冪殑瀛樺偍鏂瑰紡鍗蟲敼鍙樹簡瀹冪殑鐢熷瓨鏈熴傛妸鍏ㄥ眬鍙橀噺鏀瑰彉涓洪潤鎬佸彉閲忓悗鏄敼鍙樹簡瀹冪殑浣滅敤鍩燂紝 闄愬埗浜嗗畠鐨勪嬌鐢ㄨ寖鍥淬?o:p>
銆銆static鍑芥暟涓庢櫘閫氬嚱鏁頒綔鐢ㄥ煙涓嶅悓銆備粎鍦ㄦ湰鏂囦歡銆傚彧鍦ㄥ綋鍓嶆簮鏂囦歡涓嬌鐢ㄧ殑鍑芥暟搴旇璇存槑涓哄唴閮ㄥ嚱鏁?static)錛屽唴閮ㄥ嚱鏁板簲璇ュ湪褰撳墠婧愭枃浠朵腑璇存槑鍜屽畾涔夈傚浜庡彲鍦ㄥ綋鍓嶆簮鏂囦歡浠ュ浣跨敤鐨勫嚱鏁幫紝搴旇鍦ㄤ竴涓ご鏂囦歡涓鏄庯紝瑕佷嬌鐢ㄨ繖浜涘嚱鏁扮殑婧愭枃浠惰鍖呭惈榪欎釜澶存枃浠?o:p>
銆銆static鍏ㄥ眬鍙橀噺涓庢櫘閫氱殑鍏ㄥ眬鍙橀噺鏈変粈涔堝尯鍒細static鍏ㄥ眬鍙橀噺鍙垵濮嬪寲涓嬈★紝闃叉鍦ㄥ叾浠栨枃浠跺崟鍏冧腑琚紩鐢?
銆銆static灞閮ㄥ彉閲忓拰鏅氬眬閮ㄥ彉閲忔湁浠涔堝尯鍒細static灞閮ㄥ彉閲忓彧琚垵濮嬪寲涓嬈★紝涓嬩竴嬈′緷鎹笂涓嬈$粨鏋滃鹼紱
static鍑芥暟涓庢櫘閫氬嚱鏁版湁浠涔堝尯鍒細static鍑芥暟鍦ㄥ唴瀛樹腑鍙湁涓浠斤紝鏅氬嚱鏁板湪姣忎釜琚皟鐢ㄤ腑緇存寔涓浠芥嫹璐?br> 鍏ㄥ眬鍙橀噺鍜岄潤鎬佸彉閲忓鏋滄病鏈夋墜宸ュ垵濮嬪寲錛屽垯鐢辯紪璇戝櫒鍒濆鍖栦負0銆傚眬閮ㄥ彉閲忕殑鍊間笉鍙煡銆?o:p>
褰撴垜浠悓鏃剁紪璇戝涓枃浠舵椂錛屾墍鏈夋湭鍔爏tatic鍓嶇紑鐨勫叏灞鍙橀噺鍜屽嚱鏁伴兘鍏鋒湁鍏ㄥ眬鍙鎬с備負鐞嗚В榪欏彞璇濓紝鎴戜婦渚嬫潵璇存槑銆傛垜浠鍚屾椂緙栬瘧涓や釜婧愭枃浠訛紝涓涓槸a.c錛屽彟涓涓槸main.c.
涓嬮潰鏄痑.c鐨勫唴瀹癸細
char a = 'A'; // global variable
void msg()
{
printf("Hello\n");
}
|
涓嬮潰鏄痬ain.c鐨勫唴瀹癸細
int main(void)
{
extern char a; // extern variable must be declared before use
printf("%c ", a);
(void)msg();
return 0;
}
|
紼嬪簭鐨勮繍琛岀粨鏋滄槸錛?/p>
A Hello
浣犲彲鑳戒細闂細涓轟粈涔堝湪a.c涓畾涔夌殑鍏ㄥ眬鍙橀噺a鍜屽嚱鏁癿sg鑳藉湪main.c涓嬌鐢紵鍓嶉潰璇磋繃錛屾墍鏈夋湭鍔爏tatic鍓嶇紑鐨勫叏灞鍙橀噺鍜屽嚱鏁伴兘鍏鋒湁鍏ㄥ眬鍙鎬э紝鍏跺畠鐨勬簮鏂囦歡涔熻兘璁塊棶銆傛渚嬩腑錛宎鏄叏灞鍙橀噺錛宮sg鏄嚱鏁幫紝騫朵笖閮芥病鏈夊姞static鍓嶇紑錛屽洜姝ゅ浜庡彟澶栫殑婧愭枃浠秏ain.c鏄彲瑙佺殑銆?/p>
濡傛灉鍔犱簡static錛屽氨浼氬鍏跺畠婧愭枃浠墮殣钘忋備緥濡傚湪a鍜宮sg鐨勫畾涔夊墠鍔犱笂static錛宮ain.c灝辯湅涓嶅埌瀹冧滑浜嗐傚埄鐢ㄨ繖涓鐗規у彲浠ュ湪涓嶅悓鐨勬枃浠朵腑瀹氫箟鍚屽悕鍑芥暟鍜屽悓鍚嶅彉閲忥紝鑰屼笉蹇呮媴蹇冨懡鍚嶅啿紿併係tatic鍙互鐢ㄤ綔鍑芥暟鍜屽彉閲忕殑鍓嶇紑錛屽浜庡嚱鏁版潵璁詫紝static鐨勪綔鐢ㄤ粎闄愪簬闅愯棌錛岃屽浜庡彉閲忥紝static榪樻湁涓嬮潰涓や釜浣滅敤銆?/p>
2.static鐨勭浜屼釜浣滅敤鏄繚鎸佸彉閲忓唴瀹圭殑鎸佷箙銆?/p>
瀛樺偍鍦ㄩ潤鎬佹暟鎹尯鐨勫彉閲忎細鍦ㄧ▼搴忓垰寮濮嬭繍琛屾椂灝卞畬鎴愬垵濮嬪寲錛屼篃鏄敮涓鐨勪竴嬈″垵濮嬪寲銆傚叡鏈変袱縐嶅彉閲忓瓨鍌ㄥ湪闈欐佸瓨鍌ㄥ尯錛氬叏灞鍙橀噺鍜宻tatic鍙橀噺錛屽彧涓嶈繃鍜屽叏灞鍙橀噺姣旇搗鏉ワ紝static鍙互鎺у埗鍙橀噺鐨勫彲瑙佽寖鍥達紝璇村埌搴晄tatic榪樻槸鐢ㄦ潵闅愯棌鐨勩傝櫧鐒惰繖縐嶇敤娉曚笉甯歌錛屼絾鎴戣繕鏄婦涓涓緥瀛愩?/p>
#include 錛渟tdio.h錛?
int fun(void){
static int count = 10; // 浜嬪疄涓婃璧嬪艱鍙ヤ粠鏉ユ病鏈夋墽琛岃繃
return count--;
}
int count = 1;
int main(void)
{
printf("global\t\tlocal static\n");
for(; count 錛? 10; ++count)
printf("%d\t\t%d\n", count, fun());
return 0;
}
|
紼嬪簭鐨勮繍琛岀粨鏋滄槸錛?br>
global local static
1 10
2 9
3 8
4 7
5 6
6 5
7 4
8 3
9 2
10 1
3.static鐨勭涓変釜浣滅敤鏄粯璁ゅ垵濮嬪寲涓?.鍏跺疄鍏ㄥ眬鍙橀噺涔熷叿澶囪繖涓灞炴э紝鍥犱負鍏ㄥ眬鍙橀噺涔熷瓨鍌ㄥ湪闈欐佹暟鎹尯銆?/p>
鍦ㄩ潤鎬佹暟鎹尯錛屽唴瀛樹腑鎵鏈夌殑瀛楄妭榛樿鍊奸兘鏄?x00錛屾煇浜涙椂鍊欒繖涓鐗圭偣鍙互鍑忓皯紼嬪簭鍛樼殑宸ヤ綔閲忋傛瘮濡傚垵濮嬪寲涓涓█鐤忕煩闃碉紝鎴戜滑鍙互涓涓竴涓湴鎶婃墍鏈夊厓绱犻兘緗?錛岀劧鍚庢妸涓嶆槸0鐨勫嚑涓厓绱犺祴鍊箋傚鏋滃畾涔夋垚闈欐佺殑錛屽氨鐪佸幓浜嗕竴寮濮嬬疆0鐨勬搷浣溿傚啀姣斿瑕佹妸涓涓瓧絎︽暟緇勫綋瀛楃涓叉潵鐢紝浣嗗張瑙夊緱姣忔鍦ㄥ瓧絎︽暟緇勬湯灝懼姞‘\0’澶夯鐑︺傚鏋滄妸瀛楃涓插畾涔夋垚闈欐佺殑錛屽氨鐪佸幓浜嗚繖涓夯鐑︼紝鍥犱負閭i噷鏈潵灝辨槸‘\0’銆備笉濡ㄥ仛涓皬瀹為獙楠岃瘉涓涓嬨?/p>
#include 錛渟tdio.h錛?
int a;
int main(void)
{
int i;
static char str[10];
printf("integer: %d; string: (begin)%s(end)", a, str);
return 0;
}
|
紼嬪簭鐨勮繍琛岀粨鏋滃涓媔nteger錛?0錛?string錛?錛坆egin錛夛紙end錛?/p>
鏈鍚庡static鐨勪笁鏉′綔鐢ㄥ仛涓鍙ヨ瘽鎬葷粨銆傞鍏坰tatic鐨勬渶涓昏鍔熻兘鏄殣钘忥紝鍏舵鍥犱負static鍙橀噺瀛樻斁鍦ㄩ潤鎬佸瓨鍌ㄥ尯錛屾墍浠ュ畠鍏峰鎸佷箙鎬у拰榛樿鍊?.
濡傛灉灝嗘潵浣犱笉鎵撶畻鍗囩駭鍒皍nicode錛岄偅涔堜篃涓嶉渶瑕乢T銆?/p>
_t("hello world")
鍦╝nsi鐨勭幆澧冧笅錛屽畠鏄痑nsi鐨勶紝濡傛灉鍦╱nicode涓嬶紝閭d箞瀹冨皢鑷姩瑙i噴涓哄弻瀛楄妭瀛楃涓詫紝鏃nicode緙栫爜銆?/p>
榪欐牱鍋氱殑濂藉錛屼笉綆℃槸ansi鐜錛岃繕鏄痷nicode鐜錛岄兘閫傜敤銆?/p>
閭d箞鍦╒C++涓紝瀛楃涓瞋T("ABC")鍜屼竴涓櫘閫氱殑瀛楃涓?ABC"鏈変粈涔堝尯鍒憿錛?/p>
_T("ABC")
濡傛灉瀹氫箟浜唘nicode錛屽畠灝嗚〃紺轟負L"ABC"錛屾瘡涓瓧絎︿負16浣嶏紝瀹藉瓧絎︿覆銆?/p>
濡傛灉娌℃湁瀹氫箟unicode錛屽畠灝辨槸ascii鐨?ABC"錛屾瘡涓瓧絎︿負8浣嶃?/p>
鐩稿綋浜?/p>
#ifdef _UNICODE
#define _T("ABC") L"ABC"
#else
#define _T("ABC") "ABC"
#endif
_T("ABC")涓殑涓涓瓧絎﹀拰姹夊瓧涓鏍鳳紝鍗犱袱涓瓧鑺傦紝鑰屽湪"ABC"涓紝鑻辨枃瀛楃鍗犱竴涓瓧鑺傦紝姹夊瓧鍗犱袱涓瓧鑺傘?/p>
涓銆?鍦ㄥ瓧絎︿覆鍓嶅姞涓涓狶浣滅敤:
濡?L"鎴戠殑瀛楃涓? 琛ㄧず灝咥NSI瀛楃涓茶漿鎹㈡垚unicode鐨勫瓧絎︿覆錛屽氨鏄瘡涓瓧絎﹀崰鐢ㄤ袱涓瓧鑺傘?/p>
strlen("asd") = 3;
strlen(L"asd") = 6;
浜屻?nbsp; _T瀹忓彲浠ユ妸涓涓紩鍙峰紩璧鋒潵鐨勫瓧絎︿覆錛屾牴鎹綘鐨勭幆澧冭緗紝浣垮緱緙栬瘧鍣ㄤ細鏍規嵁緙栬瘧鐩爣鐜閫夋嫨鍚堥傜殑錛圲nicode榪樻槸ANSI錛夊瓧絎﹀鐞嗘柟寮?/p>
濡傛灉浣犲畾涔変簡UNICODE錛岄偅涔坃T瀹忎細鎶婂瓧絎︿覆鍓嶉潰鍔犱竴涓狶銆傝繖鏃?_T("ABCD") 鐩稿綋浜?L"ABCD" 錛岃繖鏄瀛楃涓層?/p>
濡傛灉娌℃湁瀹氫箟錛岄偅涔坃T瀹忎笉浼氬湪瀛楃涓插墠闈㈠姞閭d釜L錛宊T("ABCD") 灝辯瓑浠蜂簬 "ABCD"
涓夈乀EXT,_TEXT 鍜宊T 涓鏍風殑
濡備笅闈笁璇彞錛?/p>
TCHAR szStr1[] = TEXT("str1");
char szStr2[] = "str2";
WCHAR szStr3[] = L("str3");
閭d箞絎竴鍙ヨ瘽鍦ㄥ畾涔変簡UNICODE鏃朵細瑙i噴涓虹涓夊彞璇濓紝娌℃湁瀹氫箟鏃跺氨絳変簬絎簩鍙ヨ瘽銆?nbsp;
浣嗕簩鍙ヨ瘽鏃犺鏄惁瀹氫箟浜哢NICODE閮芥槸鐢熸垚涓涓狝NSI瀛楃涓詫紝鑰岀涓夊彞璇濇繪槸鐢熸垚UNICODE瀛楃涓層?/p>
涓轟簡紼嬪簭鐨勫彲縐繪鎬э紝寤鴻閮界敤絎竴縐嶈〃紺烘柟娉曘?/p>
浣嗗湪鏌愪簺鎯呭喌涓嬶紝鏌愪釜瀛楃蹇呴』涓篈NSI鎴朥NICODE錛岄偅灝辯敤鍚庝袱縐嶆柟娉?br>
char :鍗曞瓧鑺傚彉閲忕被鍨嬶紝鏈澶氳〃紺?56涓瓧絎?/p>
wchar_t :瀹藉瓧鑺傚彉閲忕被鍨嬶紝鐢ㄤ簬琛ㄧずUnicode瀛楃
瀹冨疄闄呭畾涔夊湪<string.h>閲岋細typedef unsigned short wchar_t銆?/p>
涓轟簡璁╃紪璇戝櫒璇嗗埆Unicode瀛楃涓詫紝蹇呴』浠ュ湪鍓嶉潰鍔犱竴涓?#8220;L”,瀹氫箟瀹藉瓧鑺傜被鍨嬫柟娉曞涓嬶細
wchar_t c = `A' ;
wchar_t * p = L"Hello!" ;
wchar_t a[] = L"Hello!" ;
鍏朵腑錛屽瀛楄妭綾誨瀷姣忎釜鍙橀噺鍗犵敤2涓瓧鑺傦紝鏁呬笂榪版暟緇刟鐨剆izeof(a) = 14
TCHAR / _T( ) :
濡傛灉鍦ㄧ▼搴忎腑鏃㈠寘鎷珹NSI鍙堝寘鎷琔nicode緙栫爜錛岄渶瑕佸寘鎷ご鏂囦歡tchar.h銆俆CHAR鏄畾涔夊湪璇ュご鏂囦歡涓殑瀹忥紝瀹冭浣犳槸鍚﹀畾涔変簡
NICODE瀹忚屽畾涔夋垚錛?
瀹氫箟浜哶UNICODE錛?nbsp; typedef wchar_t TCHAR ;
娌℃湁瀹氫箟_UNICODE錛?typedef char TCHAR ;
#ifdef UNICODE
typedef char TCHAR;
#else
typede wchar_t TCHAR;
#endif
_T( )涔熸槸瀹氫箟鍦ㄨ澶存枃浠朵腑鐨勫畯錛岃鏄惁瀹氫箟浜哶UNICODE瀹忚屽畾涔夋垚錛?
瀹氫箟浜哶UNICODE錛?nbsp; #define _T(x) L##x
娌℃湁瀹氫箟_UNICODE錛?#define _T(x) x
娉ㄦ剰錛氬鏋滃湪紼嬪簭涓嬌鐢ㄤ簡TCHAR錛岄偅涔堝氨涓嶅簲璇ヤ嬌鐢ˋNSI鐨剆trXXX鍑芥暟鎴栬匲nicode鐨剋csXXX鍑芥暟浜嗭紝鑰屽繀欏諱嬌鐢╰char.h涓畾涔夌殑_tcsXXX鍑芥暟銆?/p>
浠trcpy鍑芥暟涓轟緥瀛愶紝鎬葷粨涓涓嬶細
//濡傛灉浣犳兂浣跨敤ANSI瀛楃涓詫紝閭d箞璇蜂嬌鐢ㄨ繖涓濂楀啓娉曪細
char szString[100];
strcpy(szString,"test");
//濡傛灉浣犳兂浣跨敤Unicode瀛楃涓詫紝閭d箞璇蜂嬌鐢ㄨ繖涓濂楋細
wchar_t szString[100];
wcscpy(szString,L"test");
//濡傛灉浣犳兂閫氳繃瀹氫箟_UNICODE瀹忥紝鑰岀紪璇慉NSI鎴栬匲nicode瀛楃涓蹭唬鐮侊細
TCHAR szString[100];
_tcscpy(szString,_TEXT("test"));
char鏄疌璇█鏍囧噯鏁版嵁綾誨瀷錛屽瓧絎﹀瀷錛岃嚦浜庣敱鍑犱釜瀛楄妭緇勬垚閫氬父鐢辯紪璇戝櫒鍐沖畾錛屼竴鑸竴涓瓧鑺傘俉indows涓轟簡娑堥櫎鍚?緙栬瘧鍣ㄧ殑宸埆錛岄噸鏂板畾涔変簡涓浜涙暟鎹被鍨嬶紝浣犳彁鍒頒簡鍙﹀鍑犱釜綾誨瀷閮芥槸榪欐牱銆?br>CHAR涓哄崟瀛楄妭瀛楃銆?br>榪樻湁涓猈CHAR涓篣nicode瀛楃錛屽嵆涓嶈涓嫳鏂囷紝姣?涓瓧鏈変袱涓瓧鑺傜粍鎴愩?br>濡傛灉褰撳墠緙栬瘧鏂瑰紡涓篈NSI(榛樿)鏂瑰紡錛孴CHAR絳変環浜嶤HAR錛?br>濡傛灉涓篣nicode鏂瑰紡錛孴CHAR絳変環浜嶹CHAR銆?br>鍦ㄥ綋 鍓嶇増鏈琇PCSTR鍜孡PSTR娌″尯鍒紝鍗充互闆剁粨灝劇殑瀛楃涓叉寚閽堬紝鐩稿綋浜嶤HAR *銆?br>
char :鍗曞瓧鑺傚彉閲忕被鍨嬶紝鏈澶氳〃紺?56涓瓧絎︼紝
wchar_t :瀹藉瓧鑺傚彉閲忕被鍨嬶紝鐢ㄤ簬琛ㄧずUnicode瀛楃錛?/p>
瀹冨疄闄呭畾涔夊湪<string.h>閲岋細typedef unsigned short wchar_t銆?/p>
涓轟簡璁╃紪璇戝櫒璇嗗埆Unicode瀛楃涓詫紝蹇呴』浠ュ湪鍓嶉潰鍔犱竴涓?#8220;L”,瀹氫箟瀹藉瓧鑺傜被鍨嬫柟娉曞涓嬶細
wchar_t c = `A' ;
wchar_t * p = L"Hello!" ;
wchar_t a[] = L"Hello!" ;
鍏朵腑錛屽瀛楄妭綾誨瀷姣忎釜鍙橀噺鍗犵敤2涓瓧鑺傦紝鏁呬笂榪版暟緇刟鐨剆izeof(a) = 14
TCHAR / _T( ) :
濡傛灉鍦ㄧ▼搴忎腑鏃㈠寘鎷珹NSI鍙堝寘鎷琔nicode緙栫爜錛岄渶瑕佸寘鎷ご鏂囦歡tchar.h銆俆CHAR鏄畾涔夊湪璇ュご鏂囦歡涓殑瀹忥紝瀹冭浣犳槸鍚﹀畾涔変簡_UNICODE瀹忚屽畾涔夋垚錛?
瀹氫箟浜哶UNICODE錛?nbsp; typedef wchar_t TCHAR ;
娌℃湁瀹氫箟_UNICODE錛?typedef char TCHAR ;
#ifdef UNICODE
typedef char TCHAR;
#else
typede wchar_t TCHAR;
#endif
_T( )涔熸槸瀹氫箟鍦ㄨ澶存枃浠朵腑鐨勫畯錛岃鏄惁瀹氫箟浜哶UNICODE瀹忚屽畾涔夋垚錛?
瀹氫箟浜哶UNICODE錛?nbsp; #define _T(x) L##x
娌℃湁瀹氫箟_UNICODE錛?#define _T(x) x
娉ㄦ剰錛氬鏋滃湪紼嬪簭涓嬌鐢ㄤ簡TCHAR錛岄偅涔堝氨涓嶅簲璇ヤ嬌鐢ˋNSI鐨剆trXXX鍑芥暟鎴栬匲nicode鐨剋csXXX鍑芥暟浜嗭紝鑰屽繀欏諱嬌鐢╰char.h涓畾涔夌殑_tcsXXX鍑芥暟銆?/p>
浠trcpy鍑芥暟涓轟緥瀛愶紝鎬葷粨涓涓嬶細
//濡傛灉浣犳兂浣跨敤ANSI瀛楃涓詫紝閭d箞璇蜂嬌鐢ㄨ繖涓濂楀啓娉曪細
char szString[100];
strcpy(szString,"test");
//濡傛灉浣犳兂浣跨敤Unicode瀛楃涓詫紝閭d箞璇蜂嬌鐢ㄨ繖涓濂楋細
wchar_t szString[100];
wcscpy(szString,L"test");
//濡傛灉浣犳兂閫氳繃瀹氫箟_UNICODE瀹忥紝鑰岀紪璇慉NSI鎴栬匲nicode瀛楃涓蹭唬鐮侊細
TCHAR szString[100];
_tcscpy(szString,_TEXT("test"));
CSDN:superarhow璇達細 涓嶈鍐嶄嬌鐢═CHAR鍜宊T浜嗭紒浠栧垎鏋愪簡鍘熷洜鍚庢葷粨錛氬 鏋滄偍姝e紑濮嬩竴涓柊鐨勯」鐩紝璇鋒棤璁哄浣曚篃瑕侀《浣忓帇鍔涳紝鐩存帴浣跨敤UNICODE緙栫爜錛佸垏璁幫紒鎮ㄥ彧闇瑕佸鎮ㄧ殑緇勫憳榪涜10鍒嗛挓鐨勫煿璁紝璁頒綇strcpy鐢?wcscpy錛宻printf鐢╯wprintf浠f浛錛屽父鏁板墠鍔燣錛屽氨鍙互浜嗭紒瀹冧笉浼氳姳鎮ㄥ緢澶氭椂闂寸殑錛屽甫緇欐偍鐨勬槸紼沖畾鍜屽畨鍏紒鐩鎬俊鍋訛紝娌¢敊鐨勶紒錛?/p>
涓銆?鍦ㄥ瓧絎︿覆鍓嶅姞涓涓狶浣滅敤:
濡?nbsp; L"鎴戠殑瀛楃涓? 琛ㄧず灝咥NSI瀛楃涓茶漿鎹㈡垚unicode鐨勫瓧絎︿覆錛屽氨鏄瘡涓瓧絎﹀崰鐢ㄤ袱涓瓧鑺傘?
strlen("asd") = 3;
strlen(L"asd") = 6;
浜屻?nbsp; _T瀹忓彲浠ユ妸涓涓紩鍙峰紩璧鋒潵鐨勫瓧絎︿覆錛屾牴鎹綘鐨勭幆澧冭緗紝浣垮緱緙栬瘧鍣ㄤ細鏍規嵁緙栬瘧鐩爣鐜閫夋嫨鍚堥傜殑錛圲nicode榪樻槸ANSI錛夊瓧絎﹀鐞嗘柟寮?
濡傛灉浣犲畾涔変簡UNICODE錛岄偅涔坃T瀹忎細鎶婂瓧絎︿覆鍓嶉潰鍔犱竴涓狶銆傝繖鏃?_T("ABCD") 鐩稿綋浜?L"ABCD" 錛岃繖鏄瀛楃涓層?
濡傛灉娌℃湁瀹氫箟錛岄偅涔坃T瀹忎笉浼氬湪瀛楃涓插墠闈㈠姞閭d釜L錛宊T("ABCD") 灝辯瓑浠蜂簬 "ABCD"
涓夈乀EXT,_TEXT 鍜宊T 涓鏍風殑
濡備笅闈笁璇彞錛?nbsp;
TCHAR szStr1[] = TEXT("str1");
char szStr2[] = "str2";
WCHAR szStr3[] = L("str3");
閭d箞絎竴鍙ヨ瘽鍦ㄥ畾涔変簡UNICODE鏃朵細瑙i噴涓虹涓夊彞璇濓紝娌℃湁瀹氫箟鏃跺氨絳変簬絎簩鍙ヨ瘽銆?nbsp;
浣嗕簩鍙ヨ瘽鏃犺鏄惁瀹氫箟浜哢NICODE閮芥槸鐢熸垚涓涓狝NSI瀛楃涓詫紝鑰岀涓夊彞璇濇繪槸鐢熸垚UNICODE瀛楃涓層?nbsp;
涓轟簡紼嬪簭鐨勫彲縐繪鎬э紝寤鴻閮界敤絎竴縐嶈〃紺烘柟娉曘?nbsp;
浣嗗湪鏌愪簺鎯呭喌涓嬶紝鏌愪釜瀛楃蹇呴』涓篈NSI鎴朥NICODE錛岄偅灝辯敤鍚庝袱縐嶆柟娉曘?/p>
CSDN:superarhow璇達細 涓嶈鍐嶄嬌鐢═CHAR鍜宊T浜嗭紒浠栧垎鏋愪簡鍘熷洜鍚庢葷粨錛氬 鏋滄偍姝e紑濮嬩竴涓柊鐨勯」鐩紝璇鋒棤璁哄浣曚篃瑕侀《浣忓帇鍔涳紝鐩存帴浣跨敤UNICODE緙栫爜錛佸垏璁幫紒鎮ㄥ彧闇瑕佸鎮ㄧ殑緇勫憳榪涜10鍒嗛挓鐨勫煿璁紝璁頒綇strcpy鐢?wcscpy錛宻printf鐢╯wprintf浠f浛錛屽父鏁板墠鍔燣錛屽氨鍙互浜嗭紒瀹冧笉浼氳姳鎮ㄥ緢澶氭椂闂寸殑錛屽甫緇欐偍鐨勬槸紼沖畾鍜屽畨鍏紒鐩鎬俊鍋訛紝娌¢敊鐨勶紒錛?/p>
鏂囦歡涓殑#ifndef
澶翠歡鐨勪腑鐨?ifndef錛岃繖鏄竴涓緢鍏抽敭鐨勪笢瑗褲傛瘮濡備綘鏈変袱涓狢鏂囦歡錛岃繖涓や釜C鏂囦歡閮絠nclude浜嗗悓涓涓ご鏂囦歡銆傝岀紪璇戞椂錛岃繖涓や釜C鏂囦歡瑕佷竴鍚岀紪璇戞垚涓涓彲榪愯鏂囦歡錛屼簬鏄棶棰樻潵浜嗭紝澶ч噺鐨勫0鏄庡啿紿併? 榪樻槸鎶婂ご鏂囦歡鐨勫唴瀹歸兘鏀懼湪#ifndef鍜?endif涓惂銆備笉綆′綘鐨勫ご鏂囦歡浼氫笉浼氳澶氫釜鏂囦歡寮曠敤錛屼綘閮借鍔犱笂榪欎釜銆備竴鑸牸寮忔槸榪欐牱鐨勶細 #ifndef <鏍囪瘑> ...... #endif <鏍囪瘑>鍦ㄧ悊璁轟笂鏉ヨ鍙互鏄嚜鐢卞懡鍚嶇殑錛屼絾姣忎釜澶存枃浠剁殑榪欎釜“鏍囪瘑”閮藉簲璇ユ槸鍞竴鐨勩傛爣璇嗙殑鍛藉悕瑙勫垯涓鑸槸澶存枃浠跺悕鍏ㄥぇ鍐欙紝鍓嶅悗鍔犱笅鍒掔嚎錛屽茍鎶婃枃浠跺悕涓殑“.”涔熷彉鎴愪笅鍒掔嚎錛屽錛歴tdio.h #ifndef _STDIO_H_ ...... #endif 2.鍦?ifndef涓畾涔夊彉閲忓嚭鐜扮殑闂錛堜竴鑸笉瀹氫箟鍦?ifndef涓級銆?/p>
#ifndef AAA 緇撹錛?/p>
(1).褰撲綘絎竴涓嬌鐢ㄨ繖涓ご鐨?cpp鏂囦歡鐢熸垚.obj鐨勬椂鍊欙紝int i 鍦ㄩ噷闈㈠畾涔変簡褰撳彟澶栦竴涓嬌鐢ㄨ繖涓殑.cpp鍐嶆[鍗曠嫭]鐢熸垚.obj鐨勬椂鍊欙紝int i 鍙堣瀹氫箟鐒跺悗涓や釜obj琚彟澶栦竴涓?cpp涔焛nclude 榪欎釜澶寸殑錛岃繛鎺ュ湪涓璧鳳紝灝變細鍑虹幇閲嶅瀹氫箟. (2).鎶婃簮紼嬪簭鏂囦歡鎵╁睍鍚嶆敼鎴?c鍚庯紝VC鎸夌収C璇█鐨勮娉曞婧愮▼搴忚繘琛岀紪璇戯紝鑰屼笉鏄疌++銆傚湪C璇█涓紝鑻ユ槸閬囧埌澶氫釜int i錛屽垯鑷姩璁や負鍏朵腑涓涓槸瀹氫箟錛屽叾浠栫殑鏄0鏄庛?/p>
(3).C璇█鍜孋++璇█榪炴帴緇撴灉涓嶅悓錛屽彲鑳斤紙鐚滄祴錛夋椂鍦ㄨ繘琛岀紪璇戠殑鏃跺欙紝C++璇█灝嗗叏灞 瑙e喅鏂規硶錛?/p>
(1).鎶婃簮紼嬪簭鏂囦歡鎵╁睍鍚嶆敼鎴?c銆?/p>
(2).鎺ㄨ崘瑙e喅鏂規錛?br>.h涓彧澹版槑 extern int i;鍦?cpp涓畾涔?/p>
<x.h> 娉ㄦ剰闂錛?/p>
(1).鍙橀噺涓鑸笉瑕佸畾涔夊湪.h鏂囦歡涓?/p>
------------------------------------------------------------------------------------------------------------------------------------------- 涓鑸儏鍐典笅錛屾簮紼嬪簭涓墍鏈夌殑琛岄兘鍙傚姞緙栬瘧銆備絾鏄湁鏃跺笇鏈涘鍏朵腑涓閮ㄥ垎鍐呭鍙湪婊¤凍涓瀹氭潯浠舵墠榪涜緙栬瘧錛屼篃灝辨槸瀵逛竴閮ㄥ垎鍐呭鎸囧畾緙栬瘧鐨勬潯浠訛紝榪欏氨鏄?#8220;鏉′歡緙栬瘧”銆傛湁鏃訛紝甯屾湜褰撴弧瓚蟲煇鏉′歡鏃跺涓緇勮鍙ヨ繘琛岀紪璇戯紝鑰屽綋鏉′歡涓嶆弧瓚蟲椂鍒欑紪璇戝彟涓緇勮鍙ャ? --------------------------------------------------------------------------------------------------------------------------------------- 浣滅敤鑼冨洿灝辨槸褰撳墠鏂囦歡鍟娿傚洜涓虹紪璇戞槸浠pp鎴朿鏂囦歡浣嶅崟浣嶇殑鍢涖傝繕浠ヨ繖涓負渚嬶細 #ifndef __SOMEFILE_H__ 鏂瑰紡浜岋細 #pragma once
#define <鏍囪瘑>
......
#define _STDIO_H_
#define AAA
...
int i;
...
#endif
閲岄潰鏈変竴涓彉閲忓畾涔?br>鍦╲c涓摼鎺ユ椂灝卞嚭鐜頒簡i閲嶅瀹氫箟鐨勯敊璇紝鑰屽湪c涓垚鍔熺紪璇戙?/p>
鍙橀噺榛樿涓哄己絎﹀彿錛屾墍浠ヨ繛鎺ュ嚭閿欍侰璇█鍒欎緷鐓ф槸鍚﹀垵濮嬪寲榪涜寮哄急鐨勫垽鏂殑銆傦紙鍙傝冿級
#ifndef __X_H__
#define __X_H__
extern int i;
#endif //__X_H__
<x.c>
int i;
鏉′歡緙栬瘧鍛戒護鏈甯歌鐨勫艦寮忎負錛?
#ifdef 鏍囪瘑絎?
紼嬪簭孌?
#else
紼嬪簭孌?
#endif
瀹冪殑浣滅敤鏄細褰撴爣璇嗙宸茬粡琚畾涔夎繃(涓鑸槸鐢?define鍛戒護瀹氫箟)錛屽垯瀵圭▼搴忔1榪涜緙栬瘧錛屽惁鍒欑紪璇戠▼搴忔2銆?
鍏朵腑#else閮ㄥ垎涔熷彲浠ユ病鏈夛紝鍗籌細
#ifdef
紼嬪簭孌?
#denif
榪欓噷鐨?#8220;紼嬪簭孌?#8221;鍙互鏄鍙ョ粍錛屼篃鍙互鏄懡浠よ銆傝繖縐嶆潯浠剁紪璇戝彲浠ユ彁楂楥婧愮▼搴忕殑閫氱敤鎬с傚鏋滀竴涓狢婧愮▼搴忓湪涓嶅悓璁$畻鏈虹郴緇熶笂緋葷粺涓婅繍琛岋紝鑰屼笉鍚岀殑璁$畻鏈哄張鏈変竴瀹氱殑宸紓銆備緥濡傦紝鎴戜滑鏈変竴涓暟鎹被鍨嬶紝鍦╓indows騫沖彴涓紝搴旇浣跨敤long綾誨瀷琛ㄧず錛岃屽湪鍏朵粬騫沖彴搴旇浣跨敤float琛ㄧず錛岃繖鏍峰線寰闇瑕佸婧愮▼搴忎綔蹇呰鐨勪慨鏀癸紝榪欏氨闄嶄綆浜嗙▼搴忕殑閫氱敤鎬с傚彲浠ョ敤浠ヤ笅鐨勬潯浠剁紪璇戯細
#ifdef WINDOWS
#define MYTYPE long
#else
#define MYTYPE float
#endif
濡傛灉鍦╓indows涓婄紪璇戠▼搴忥紝鍒欏彲浠ュ湪紼嬪簭鐨勫紑濮嬪姞涓?
#define WINDOWS
榪欐牱鍒欑紪璇戜笅闈㈢殑鍛戒護琛岋細
#define MYTYPE long
濡傛灉鍦ㄨ繖緇勬潯浠剁紪璇戝懡浠や箣鍓嶆浘鍑虹幇浠ヤ笅鍛戒護琛岋細
#define WINDOWS 0
鍒欓緙栬瘧鍚庣▼搴忎腑鐨凪YTYPE閮界敤float浠f浛銆傝繖鏍鳳紝婧愮▼搴忓彲浠ヤ笉蹇呬綔浠諱綍淇敼灝卞彲浠ョ敤浜庝笉鍚岀被鍨嬬殑璁$畻鏈虹郴緇熴傚綋鐒朵互涓婁粙緇嶇殑鍙槸涓縐嶇畝鍗曠殑鎯呭喌錛屽彲浠ユ牴鎹鎬濊礬璁捐鍑哄叾瀹冪殑鏉′歡緙栬瘧銆?
渚嬪錛屽湪璋冭瘯紼嬪簭鏃訛紝甯稿父甯屾湜杈撳嚭涓浜涙墍闇鐨勪俊鎭紝鑰屽湪璋冭瘯瀹屾垚鍚庝笉鍐嶈緭鍑鴻繖浜涗俊鎭傚彲浠ュ湪婧愮▼搴忎腑鎻掑叆浠ヤ笅鐨勬潯浠剁紪璇戞錛?
#ifdef DEBUG
print ("device_open(%p) ", file);
#endif
濡傛灉鍦ㄥ畠鐨勫墠闈㈡湁浠ヤ笅鍛戒護琛岋細
#define DEBUG
鍒欏湪紼嬪簭榪愯鏃惰緭鍑篺ile鎸囬拡鐨勫鹼紝浠ヤ究璋冭瘯鍒嗘瀽銆傝皟璇曞畬鎴愬悗鍙渶灝嗚繖涓猟efine鍛戒護琛屽垹闄ゅ嵆鍙傛湁浜哄彲鑳借寰椾笉鐢ㄦ潯浠剁紪璇戜篃鍙揪姝ょ洰鐨勶紝鍗沖湪璋冭瘯鏃跺姞涓鎵筽rintf璇彞錛岃皟璇曞悗涓涓灝唒rintf璇彞鍒犻櫎鍘匯傜殑紜紝榪欐槸鍙互鐨勩備絾鏄紝褰撹皟璇曟椂鍔犵殑printf璇彞姣旇緝澶氭椂錛屼慨鏀圭殑宸ヤ綔閲忔槸寰堝ぇ鐨勩傜敤鏉′歡緙栬瘧錛屽垯涓嶅繀涓涓鍒犳敼printf璇彞錛屽彧闇鍒犻櫎鍓嶉潰鐨勪竴鏉?#8220;#define DEBUG”鍛戒護鍗沖彲錛岃繖鏃舵墍鏈夌殑鐢―EBUG浣滄爣璇嗙鐨勬潯浠剁紪璇戞閮戒嬌鍏朵腑鐨刾rintf璇彞涓嶈搗浣滅敤錛屽嵆璧風粺涓鎺у埗鐨勪綔鐢紝濡傚悓涓涓?#8220;寮鍏?#8221;涓鏍楓?
鏈夋椂涔熼噰鐢ㄤ笅闈㈢殑褰㈠紡錛?
#ifndef 鏍囪瘑絎?
紼嬪簭孌?
#else
紼嬪簭孌?
#endif
鍙槸絎竴琛屼笌絎竴縐嶅艦寮忎笉鍚岋細灝?#8220;ifdef”鏀逛負“ifndef”銆傚畠鐨勪綔鐢ㄦ槸錛氳嫢鏍囪瘑絎︽湭琚畾涔夊垯緙栬瘧紼嬪簭孌?錛屽惁鍒欑紪璇戠▼搴忔2銆傝繖縐嶅艦寮忎笌絎竴縐嶅艦寮忕殑浣滅敤鐩稿弽銆?
浠ヤ笂涓ょ褰㈠紡鐢ㄦ硶宸笉澶氾紝鏍規嵁闇瑕佷換閫変竴縐嶏紝瑙嗘柟渚胯屽畾銆?
榪樻湁涓縐嶅艦寮忥紝灝辨槸#if鍚庨潰鐨勬槸涓涓〃杈懼紡錛岃屼笉鏄竴涓畝鍗曠殑鏍囪瘑絎︼細
#if 琛ㄨ揪寮?
紼嬪簭孌?
#else
紼嬪簭孌?
#endif
瀹冪殑浣滅敤鏄細褰撴寚瀹氱殑琛ㄨ揪寮忓間負鐪燂紙闈為浂錛夋椂灝辯紪璇戠▼搴忔1錛屽惁鍒欑紪璇戠▼搴忔2銆傚彲浠ヤ簨鍏堢粰瀹氫竴瀹氭潯浠訛紝浣跨▼搴忓湪涓嶅悓鐨勬潯浠朵笅鎵ц涓嶅悓鐨勫姛鑳姐?/p>
//姝e父浠g爜
#ifdef _DEBUG
TRACE("Some infomation");
#else
//Now is release version,so do nothing
#endif
//姝e父浠g爜
緙栬瘧鏃舵槸鍏堟妸鎵鏈夌殑棰勭紪璇戝鐞嗗睍寮錛堟瘮濡傚畯錛夊啀緙栬瘧錛屾墍浠ebug妯″紡涓嬶紝緙栬瘧鏃剁殑浠g爜鏄細
//姝e父浠g爜
TRACE("Some infomation");
//姝e父浠g爜
Release妯″紡涓嬬殑浠g爜鏄細
//姝e父浠g爜
//姝e父浠g爜
1 #ifndef鏂瑰紡
2 #pragma once鏂瑰紡
鍦ㄨ兘澶熸敮鎸佽繖涓ょ鏂瑰紡鐨勭紪璇戝櫒涓婏紝浜岃呭茍娌℃湁澶ぇ鐨勫尯鍒紝浣嗘槸涓よ呬粛鐒惰繕鏄湁涓浜涚粏寰殑鍖哄埆銆?br> 鏂瑰紡涓錛?/span>
#define __SOMEFILE_H__
... ... // 涓浜涘0鏄庤鍙?br> #endif
... ... // 涓浜涘0鏄庤鍙?/p>
#ifndef鐨勬柟寮忎緷璧栦簬瀹忓悕瀛椾笉鑳藉啿紿侊紝榪欎笉鍏夊彲浠ヤ繚璇佸悓涓涓枃浠朵笉浼氳鍖呭惈澶氭錛屼篃鑳戒繚璇佸唴瀹瑰畬鍏ㄧ浉鍚岀殑涓や釜鏂囦歡涓嶄細琚笉灝忓績鍚屾椂鍖呭惈銆傚綋鐒訛紝緙虹偣灝辨槸濡傛灉涓嶅悓澶存枃浠剁殑瀹忓悕涓嶅皬蹇?#8220;鎾炶濺”錛屽彲鑳藉氨浼氬鑷村ご鏂囦歡鏄庢槑瀛樺湪錛岀紪璇戝櫒鍗寸‖璇存壘涓嶅埌澹版槑鐨勭姸鍐?br>
#pragma once鍒欑敱緙栬瘧鍣ㄦ彁渚涗繚璇侊細鍚屼竴涓枃浠朵笉浼氳鍖呭惈澶氭銆傛敞鎰忚繖閲屾墍璇寸殑“鍚屼竴涓枃浠?#8221;鏄寚鐗╃悊涓婄殑涓涓枃浠訛紝鑰屼笉鏄寚鍐呭鐩稿悓鐨勪袱涓枃浠躲傚甫鏉ョ殑濂藉鏄紝浣犱笉蹇呭啀璐瑰姴鎯充釜瀹忓悕浜嗭紝褰撶劧涔熷氨涓嶄細鍑虹幇瀹忓悕紕版挒寮曞彂鐨勫鎬棶棰樸傚搴旂殑緙虹偣灝辨槸濡傛灉鏌愪釜澶存枃浠舵湁澶氫喚鎷瘋礉錛屾湰鏂規硶涓嶈兘淇濊瘉浠栦滑涓嶈閲嶅鍖呭惈銆傚綋鐒訛紝鐩告瘮瀹忓悕紕版挒寮曞彂鐨?#8220;鎵句笉鍒板0鏄?#8221;鐨勯棶棰橈紝閲嶅鍖呭惈鏇村鏄撹鍙戠幇騫朵慨姝c?br>
鏂瑰紡涓鐢辮璦鏀寔鎵浠ョЩ妞嶆уソ錛屾柟寮忎簩 鍙互閬垮厤鍚嶅瓧鍐茬獊
1. const淇グ鏅氬彉閲忓拰鎸囬拡
const淇グ鍙橀噺錛屼竴鑸湁涓ょ鍐欐硶錛?
const TYPE value;
TYPE const value;
榪欎袱縐嶅啓娉曞湪鏈川涓婃槸涓鏍風殑銆傚畠鐨勫惈涔夋槸錛歝onst淇グ鐨勭被鍨嬩負TYPE鐨勫彉閲弙alue鏄笉鍙彉鐨勩?
瀵逛簬涓涓潪鎸囬拡鐨勭被鍨婽YPE錛屾棤璁烘庝箞鍐欙紝閮芥槸涓涓惈涔夛紝鍗硋alue鍙笉鍙彉銆?
渚嬪錛?
const int nValue錛? //nValue鏄痗onst
int const nValue錛?nbsp; // nValue鏄痗onst
浣嗘槸瀵逛簬鎸囬拡綾誨瀷鐨凾YPE錛屼笉鍚岀殑鍐欐硶浼氭湁涓嶅悓鎯呭喌錛屼緥濡傦細
A. const char *pContent;
B. char * const pContent;
C. char const *pContent;
D. const char* const pContent;
瀵逛簬鍓嶄笁縐嶅啓娉曪紝鎴戜滑鍙互鎹釜鏂瑰紡錛岀粰鍏跺姞涓婃嫭鍙?
A. const (char) *pContent;
B. (char*) const pContent;
C. (char) const *pContent;
榪欐牱灝變竴鐩簡鐒躲傛牴鎹浜巆onst淇グ闈炴寚閽堝彉閲忕殑瑙勫垯錛屽緢鏄庢樉錛孉=C.
- 瀵逛簬A,C, const淇グ鐨勭被鍨嬩負char鐨勫彉閲?pContent涓哄父閲忥紝鍥犳錛宲Content鐨勫唴瀹逛負甯擱噺涓嶅彲鍙?
- 瀵逛簬B, const淇グ鐨勭被鍨嬩負char*鐨勫彉閲弍Content涓哄父閲忥紝鍥犳錛宲Content鎸囬拡鏈韓涓哄父閲忎笉鍙彉.
- 瀵逛簬D, 鍏跺疄鏄疉鍜孊鐨勬販鍚堜綋錛岃〃紺烘寚閽堟湰韜拰鎸囬拡鍐呭涓よ呯殕涓哄父閲忎笉鍙彉
鎬葷粨:
(1) 鎸囬拡鏈韓鏄父閲忎笉鍙彉
(char*) const pContent;
(2) 鎸囬拡鎵鎸囧悜鐨勫唴瀹規槸甯擱噺涓嶅彲鍙?
const (char) *pContent;
(char) const *pContent;
(3) 涓よ呴兘涓嶅彲鍙?
const char* const pContent;
榪樻湁鍏朵腑鍖哄埆鏂規硶錛?
娌跨潃*鍙峰垝涓鏉$嚎錛?
濡傛灉const浣嶄簬*鐨勫乏渚э紝鍒檆onst灝辨槸鐢ㄦ潵淇グ鎸囬拡鎵鎸囧悜鐨勫唴瀹瑰彉閲忥紝鍗蟲寚閽堟寚鍚戜負甯擱噺錛堢墿甯擱噺錛夛紱
濡傛灉const浣嶄簬*鐨勫彸渚э紝const灝辨槸淇グ鎸囬拡鏈韓錛屽嵆鎸囬拡鏈韓鏄父閲忥紙鎸囬拡甯擱噺錛夈?/span> 2. const淇グ鍑芥暟鍙傛暟 const淇グ鍑芥暟鍙傛暟鏄畠鏈騫挎硾鐨勪竴縐嶇敤閫旓紝瀹冭〃紺哄嚱鏁頒綋涓笉鑳戒慨鏀瑰弬鏁扮殑鍊?鍖呮嫭鍙傛暟鏈韓鐨勫兼垨鑰呭弬鏁板叾涓寘鍚殑鍊?銆傚畠鍙互寰堝ソ void function(const int Var); //浼犻掕繃鏉ョ殑鍙傛暟鍦ㄥ嚱鏁板唴涓嶅彲浠ユ敼鍙?鏃犳剰涔夛紝鍥犱負Var鏈韓灝辨槸褰㈠弬)
void function(const char* Var); //鍙傛暟鎸囬拡鎵鎸囧唴瀹逛負甯擱噺涓嶅彲鍙?
void function(char* const Var); //鍙傛暟鎸囬拡鏈韓涓哄父閲忎笉鍙彉(涔熸棤鎰忎箟錛?鍥犱負char* Var涔熸槸褰㈠弬)
鍙傛暟涓哄紩鐢紝涓轟簡澧炲姞鏁堢巼鍚屾椂闃叉淇敼銆?
淇グ寮曠敤鍙傛暟鏃訛細
void function(const Class& Var);//寮曠敤鍙傛暟鍦ㄥ嚱鏁板唴涓嶅彲浠ユ敼鍙?
void function(const TYPE& Var); //寮曠敤鍙傛暟鍦ㄥ嚱鏁板唴涓哄父閲忎笉鍙彉
3. const 淇グ鍑芥暟榪斿洖鍊?/p>
const淇グ鍑芥暟榪斿洖鍊煎叾瀹炵敤鐨勫茍涓嶆槸寰堝錛屽畠鐨勫惈涔夊拰const淇グ鏅氬彉閲忎互鍙婃寚閽堢殑鍚箟鍩烘湰鐩稿悓銆?
(1) const int fun1() 榪欎釜鍏跺疄鏃犳剰涔夛紝鍥犱負鍙傛暟榪斿洖鏈韓灝辨槸璧嬪箋?
(2) const int * fun2()
璋冪敤鏃?const int *pValue = fun2();
鎴戜滑鍙互鎶奻un2()鐪嬩綔鎴愪竴涓彉閲忥紝閭d箞灝辨槸鎴戜滑涓婇潰鎵璇寸殑1.(1)鐨勫啓娉曪紝鍗蟲寚閽堝唴瀹逛笉鍙彉銆?
(3) int* const fun3()
璋冪敤鏃?int * const pValue = fun2();
鎴戜滑鍙互鎶奻un2()鐪嬩綔鎴愪竴涓彉閲忥紝閭d箞灝辨槸鎴戜滑涓婇潰鎵璇寸殑1.(2)鐨勫啓娉曪紝鍗蟲寚閽堟湰韜笉鍙彉銆?
4. const淇グ綾誨璞?瀵硅薄鎸囬拡/瀵硅薄寮曠敤 const淇グ綾誨璞¤〃紺鴻瀵硅薄涓哄父閲忓璞★紝鍏朵腑鐨勪換浣曟垚鍛橀兘涓嶈兘琚慨鏀廣傚浜庡璞℃寚閽堝拰瀵硅薄寮曠敤涔熸槸涓鏍楓?
const淇グ鐨勫璞★紝璇ュ璞$殑浠諱綍闈瀋onst鎴愬憳鍑芥暟閮戒笉鑳借璋冪敤錛屽洜涓轟換浣曢潪const鎴愬憳鍑芥暟浼氭湁淇敼鎴愬憳鍙橀噺鐨勪紒鍥俱?
渚嬪錛?
class AAA
{ void func2() const;
}
const AAA aObj;
aObj.func1(); ×
aObj.func2(); 姝g‘
const AAA* aObj = new AAA();
aObj->func1(); ×
aObj->func2(); 姝g‘
5. const淇グ鎴愬憳鍙橀噺 const淇グ綾葷殑鎴愬憳鍑芥暟錛岃〃紺烘垚鍛樺父閲忥紝涓嶈兘琚慨鏀癸紝鍚屾椂瀹冨彧鑳藉湪鍒濆鍖栧垪琛ㄤ腑璧嬪箋?
class A
{
…
const int nValue; //鎴愬憳甯擱噺涓嶈兘琚慨鏀?
…
A(int x): nValue(x) {}; //鍙兘鍦ㄥ垵濮嬪寲鍒楄〃涓祴鍊?
}
6. const淇グ鎴愬憳鍑芥暟 const淇グ綾葷殑鎴愬憳鍑芥暟錛屽垯璇ユ垚鍛樺嚱鏁頒笉鑳戒慨鏀圭被涓換浣曢潪const鎴愬憳鍑芥暟銆備竴鑸啓鍦ㄥ嚱鏁扮殑鏈鍚庢潵淇グ銆?
class A
{
…
void function()const; //甯告垚鍛樺嚱鏁? 瀹冧笉鏀瑰彉瀵硅薄鐨勬垚鍛樺彉閲? 涔熶笉鑳借皟鐢ㄧ被涓換浣曢潪const鎴愬憳鍑芥暟銆?
}
瀵逛簬const綾誨璞?鎸囬拡/寮曠敤錛屽彧鑳借皟鐢ㄧ被鐨刢onst鎴愬憳鍑芥暟錛屽洜姝わ紝const淇グ鎴愬憳鍑芥暟鐨勬渶閲嶈浣滅敤灝辨槸闄愬埗瀵逛簬const瀵硅薄鐨勪嬌鐢ㄣ?
7. const甯擱噺涓巇efine瀹忓畾涔夌殑鍖哄埆 (1) 緙栬瘧鍣ㄥ鐞嗘柟寮忎笉鍚?
define瀹忔槸鍦ㄩ澶勭悊闃舵灞曞紑銆?
const甯擱噺鏄紪璇戣繍琛岄樁孌典嬌鐢ㄣ?
(2) 綾誨瀷鍜屽畨鍏ㄦ鏌ヤ笉鍚?
define瀹忔病鏈夌被鍨嬶紝涓嶅仛浠諱綍綾誨瀷媯鏌ワ紝浠呬粎鏄睍寮銆?
const甯擱噺鏈夊叿浣撶殑綾誨瀷錛屽湪緙栬瘧闃舵浼氭墽琛岀被鍨嬫鏌ャ?
(3) 瀛樺偍鏂瑰紡涓嶅悓
define瀹忎粎浠呮槸灞曞紑錛屾湁澶氬皯鍦版柟浣跨敤錛屽氨灞曞紑澶氬皯嬈★紝涓嶄細鍒嗛厤鍐呭瓨銆?
const甯擱噺浼氬湪鍐呭瓨涓垎閰?鍙互鏄爢涓篃鍙互鏄爤涓?銆?/p>
灝忎緥瀛愶細
char ch[5] = "lisi";
const char* pStr = ch;
*pStr = 'w'; //error錛岀墿甯擱噺錛屼笉鍙洿鏀瑰唴瀹?br>pStr ="wangwu"; //OK錛岀墿甯擱噺錛屽彲鏇存敼鎸囬拡
cha ch[5] = "lisi";
char * const pStr = "lisi";
pStr = "zhangsan"; //error錛屾寚閽堝父閲忥紝涓嶅彲鏇存敼鎸囬拡
*pStr = "w"; //OK 錛屾寚閽堝父閲忥紝鍙洿鏀瑰唴瀹?
void func1();
澶у閮界煡閬揅璇█涓殑闅忔満鍑芥暟random錛屽彲鏄痳andom鍑芥暟騫朵笉鏄疉NSI C鏍囧噯錛屾墍浠ヨ錛宺andom鍑芥暟涓嶈兘鍦╣cc,vc絳夌紪璇戝櫒涓嬬紪
璇戦氳繃銆傞偅涔堟庝箞瀹炵幇VC璇█涓殑闅忔満鍑芥暟鍛紵
鍏跺疄錛岄櫎浜唕andom鍑芥暟錛岃繕鏈変竴涓猺and鍑芥暟錛岃繖涓嚱鏁頒篃鏄竴涓殢鏈哄嚱鏁幫紝浠栧彲浠ヤ駭鐢熶粠0鍒皉and_max(32767)鐨勯殢鏈烘暟銆?/p>
#include<stdio.h>
#include<stdlib.h>
int main()

{
int k;
k = rand();
printf("%d\\n", k);
return 0;
}//main

澶у鍙互鎶婁互涓婄殑浠g爜緙栬瘧榪愯涓涓嬶紝鍙戠幇浠栫殑紜駭鐢熼殢鏈烘暟浜嗭紝浣嗘槸浣犱細鍙戠幇錛屾瘡嬈¤繍琛岀▼搴忎駭鐢熺殑闅忔満鏁伴兘鏄竴鏍風殑錛屼笉榪囦綘鍦ㄧ▼搴忛噷鍔犱笂for寰幆錛屾瘡嬈′駭鐢熺殑鏁頒笉涓鏍鳳紝浣嗘槸錛屽鏋滃啀榪愯榪欎釜紼嬪簭錛屽畠浜х敓鐨勬暟鎹嵈閮芥槸鐩稿悓鐨勩?/p>
閭d箞濡備綍鍐欎竴涓▼搴忥紝璁╁畠姣忔榪愯鏃朵駭鐢熺殑闅忔満鏁伴兘涓嶄竴鏍峰憿錛?璇風湅涓嬮潰鐨勪緥瀛愶細
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include<iostream>
using namespace std;
int main(void)

{
int i;
time_t t;
srand((unsigned) time(&t));
cout<<"Ten random numbers from 0 to 99\n\n";
for(i=0; i<10; i++)
printf("%d\n", rand() % 100);
return 0;
}
榪欐椂榪愯紼嬪簭錛屼細鍙戠幇姣忔浜х敓鐨勯殢鏈烘暟閮戒笉涓鏍楓?/p>
閭d箞涓轟粈涔堢涓涓▼搴忎竴鏍瘋岀浜屼釜紼嬪簭涓鏍峰憿錛?/p>
絎簩涓▼搴忕敤鍒頒簡涓涓柊鐨勫嚱鏁皊rand
榪欎釜鍑芥暟鏄粰闅忔満鏁頒駭鐢熶竴涓殢鏈虹瀛?seed)錛屽嚱鏁板師鍨嬫槸srand( (unsigned)time( NULL ) );
time鐨勫兼瘡鏃舵瘡鍒婚兘涓嶅悓銆傛墍浠ョ瀛愪笉鍚岋紝鎵浠ワ紝浜х敓鐨勯殢鏈烘暟涔熶笉鍚屻?/p>
鎵浠ヨ錛岃鎯充駭鐢熶笉鍚岀殑闅忔満鏁幫紝鍦ㄤ嬌鐢╮and涔嬪墠闇瑕佸厛璋冪敤srand
srand鍜宺and鍑芥暟閮藉寘鍚湪stdlib.h鐨勫ご鏂囦歡閲屻?/p>
鐢變簬rand浜х敓鐨勯殢鏈烘暟鏄粠0鍒皉and_max鐨勶紝鑰宺and_max錛?2767錛夋槸涓涓緢澶х殑鏁幫紝閭d箞濡備綍浜х敓浠嶺~Y鐨勬暟鍛紵
浠嶺鍒癥錛屾湁Y錛峏錛?涓暟錛屾墍浠ヨ浜х敓浠嶺鍒癥鐨勬暟錛屽彧闇瑕佽繖鏍峰啓錛?/p>
k = rand() % (Y - X + 1) +X;
榪欐牱錛屽氨鍙互浜х敓浣犳兂瑕佺殑浠諱綍鑼冨洿鍐呯殑闅忔満鏁頒簡銆?
闂錛氬浣曠敓鎴怟涓皬浜庯籍騫朵笖浜掍笉閲嶅鐨勬暣鏁?/span>
涓.棣栧厛瀵逛簬c++鐨勯殢鏈哄嚱鏁版垜浠鏈夋墍浜嗚В錛岃繖閲屽氨涓嶇瘡璧樹簡錛岃璇昏呰嚜琛実oogle涔嬶紝
鎴戜滑瑕佺敤鍒扮殑鏈?br>1. void srand(unsigned int_seed)鍑芥暟浜х敓涓涓互褰撳墠鏃墮棿寮濮嬬殑闅忔満縐嶅瓙
srand(unsigned(time(NULL))),蹇呴』鏀懼湪鐢熸垚闅忔満鏁板墠
2.int rand()鍑芥暟錛岄殢鏈轟駭鐢熶竴鏁存暟
rand()%MAX 浜х敓[0,MAX)鐨勬暣鏁?br> a+rand()%(b-a+1) 浜х敓[a,b]涔嬮棿鐨勬暣鏁?br>3.闇瑕佸ご鏂囦歡#include<time.h>
#include<iostream>
using namespace std;
#include<time.h>
#define N 100
#define K 20
int x[N];
void swap(int i,int j)

{
int temp=x[i];
x[i]=x[j];
x[j]=temp;
}
int main()

{
int i;
for(i=0;i<N;i++)
x[i]=i;
srand(unsigned(time(NULL)));
for(i=0;i<K;i++)
{
swap(i,i+rand()%(N-i));
cout<<x[i]<<" ";
}
return 0;
}
浜?鑰冭檻濡備綍璁╂暟鎹笉閲嶅
鐪嬩唬鐮佸惂銆傘傚涔犱笅鏂規硶
棣栧厛鎼炰釜涓緇濇病鏈夐噸澶嶆暟鎹殑鏁扮粍錛屽氨鏄痻[i]=i;
姝ゆ椂娉ㄦ剰閭d釜swap鍑芥暟錛屾瘡嬈$敓鎴愮殑闅忔満鏁頒綔涓烘暟緇勪笅鏍囧幓鍙栨暟錛岀劧鍚庝氦鎹紝榪欏氨淇濊瘉浜唜榪欎釜鏁扮粍緇濅笉浼氭湁閲嶅鐨勬暟鍑虹幇銆?br>緇濅簡錛侊紒
char p[5];
char* s="12345";
strcpy(p,s);
/**//*The strcpy function copies strSource, including the terminating null character, to the location specified by strDestination. No overflow checking is performed when strings are copied or appended. The behavior of strcpy is undefined if the source and destination strings overlap.*/
char * __cdecl strcpy(char * dst, const char * src) 

{
char * cp = dst; 
while( *cp++ = *src++ ) 
; /**//* Copy src over dst */ 
return( dst );
}
char p[5];
char *s = "12345678";
strcpy(p,s);
cout << p <<endl; //杈撳嚭12345678錛岃屼笉鏄垜浠墍璁炬兂鐨?2345
char p[5];
char* s = "12345";
strncpy(p,s,5);
cout << p <<endl; //12345*&^(鍚庨潰琛ㄧず涔辯爜)
/**//*The strncpy function copies the initial count characters of strSource to strDest and returns strDest. If count is less than or equal to the length of strSource, a null character is not appended automatically to the copied string. If count is greater than the length of strSource, the destination string is padded with null characters up to length count. The behavior of strncpy is undefined if the source and destination strings overlap.*/
char * __cdecl strncpy ( char * dest, const char * source, size_t count ) 

{
char *start = dest; 

while (count && (*dest++ = *source++)) /**//* copy string */
count--; 

if (count) /**//* pad out with zeroes */
while (--count)
*dest++ = '\0'; 
return(start);
}