1.ÒýÑÔ
C++ÓïÑԵĴ´½¨³õÖÔÊÇ“a better
C”£¬µ«ÊÇÕâ²¢²»Òâζ×ÅC++ÖÐÀàËÆCÓïÑÔµÄÈ«¾Ö±äÁ¿ºÍº¯ÊýËù²ÉÓõıàÒëºÍÁ¬½Ó·½Ê½ÓëCÓïÑÔÍêÈ«Ïàͬ¡£×÷ΪһÖÖÓûÓëC¼æÈݵÄÓïÑÔ£¬C++±£ÁôÁËÒ»²¿·Ö¹ý³Ì
ʽÓïÑÔµÄÌØµã£¨±»ÊÀÈ˳ÆÎª“²»³¹µ×µØÃæÏò¶ÔÏ󔣩£¬Òò¶øËü¿ÉÒÔ¶¨Òå²»ÊôÓÚÈκÎÀàµÄÈ«¾Ö±äÁ¿ºÍº¯Êý¡£µ«ÊÇ£¬C++±Ï¾¹ÊÇÒ»ÖÖÃæÏò¶ÔÏóµÄ³ÌÐòÉè¼ÆÓïÑÔ£¬ÎªÁËÖ§
³Öº¯ÊýµÄÖØÔØ£¬C++¶ÔÈ«¾Öº¯ÊýµÄ´¦Àí·½Ê½ÓëCÓÐÃ÷ÏԵIJ»Í¬¡£
2.´Ó±ê׼ͷÎļþ˵Æð
ijÆóÒµÔø¾¸ø³öÈçϵÄÒ»µÀÃæÊÔÌ⣺
ÃæÊÔÌâ
Ϊʲô±ê׼ͷÎļþ¶¼ÓÐÀàËÆÒÔϵĽṹ£¿
#ifndef __INCvxWorksh
#define __INCvxWorksh
#ifdef __cplusplus
extern "C" {
#endif
/*...*/
#ifdef __cplusplus
}
#endif
#endif /* __INCvxWorksh */
·ÖÎö
ÏÔÈ»£¬Í·ÎļþÖеıàÒëºê“#ifndef __INCvxWorksh¡¢#define __INCvxWorksh¡¢#endif” ......
Ò»¡¢C/SģʽÓëB/SģʽµÄ±È½Ï·ÖÎö
¡¡¡¡C/SģʽÖ÷ÒªÓɿͻ§Ó¦ÓóÌÐò(Client)¡¢·þÎñÆ÷¹ÜÀí³ÌÐò(Server)ºÍÖмä¼þ(middleware)Èý¸ö²¿¼þ×é³É¡£¿Í»§Ó¦ÓóÌÐòÊÇϵͳÖÐÓû§ÓëÊý¾Ý½øÐн»»¥µÄ²¿¼þ¡£·þÎñÆ÷³ÌÐò¸ºÔðÓÐЧµØ¹ÜÀíϵͳ×ÊÔ´£¬Èç¹ÜÀíÒ»¸öÐÅÏ¢Êý¾Ý¿â£¬ÆäÖ÷Òª¹¤×÷Êǵ±¶à¸ö¿Í»§²¢·¢µØÇëÇó·þÎñÆ÷ÉϵÄÏàͬ×ÊԴʱ£¬¶ÔÕâЩ×ÊÔ´½øÐÐ×îÓÅ»¯¹ÜÀí¡£Öмä¼þ¸ºÔðÁª½á¿Í»§Ó¦ÓóÌÐòÓë·þÎñÆ÷¹ÜÀí³ÌÐò£¬ÐͬÍê³ÉÒ»¸ö×÷Òµ£¬ÒÔÂú×ãÓû§²éѯ¹ÜÀíÊý¾ÝµÄÒªÇó¡£
¡¡¡¡B/SģʽÊÇÒ»ÖÖÒÔWeb¼¼ÊõΪ»ù´¡µÄÐÂÐ͵ÄMISϵͳƽ̨ģʽ¡£°Ñ´«Í³C/SģʽÖеķþÎñÆ÷²¿·Ö·Ö½âΪһ¸öÊý¾Ý·þÎñÆ÷ÓëÒ»¸ö»ò¶à¸öÓ¦Ó÷þÎñÆ÷(Web·þÎñÆ÷)£¬´Ó¶ø¹¹³ÉÒ»¸öÈý²ã½á¹¹µÄ¿Í»§·þÎñÆ÷Ìåϵ¡£
¡¡¡¡µÚÒ»²ã¿Í»§»úÊÇÓû§ÓëÕû¸öϵͳµÄ½Ó¿Ú¡£¿Í»§µÄÓ¦ÓóÌÐò¾«¼òµ½Ò»¸öͨÓõÄä¯ÀÀÆ÷Èí¼þ£¬ÈçNetscape Navigator£¬Î¢Èí¹«Ë¾µÄIEµÈ¡£ä¯ÀÀÆ÷½«HTML´úÂëת»¯³ÉͼÎIJ¢Ã¯µÄÍøÒ³¡£ÍøÒ³»¹¾ß±¸Ò»¶¨µÄ½»»¥¹¦ÄÜ£¬ÔÊÐíÓû§ÔÚÍøÒ³ÌṩµÄÉêÇë±íÉÏÊäÈëÐÅÏ¢Ìá½»¸øºǫ́£¬²¢Ìá³ö´¦ÀíÇëÇó¡£Õâ¸öºǫ́¾ÍÊǵڶþ²ãµÄWeb·þÎñÆ÷¡£
¡¡¡¡µÚ¶þ²ãWeb·þÎñÆ÷½«Æô¶¯ÏàÓ¦µÄ½ø³ÌÀ´ÏìÓ¦ÕâÒ»ÇëÇ󣬲¢¶¯Ì¬Éú³ÉÒ»´®HTML´úÂ룬ÆäÖÐǶÈë´¦ÀíµÄ½á¹û£¬·µ»Ø¸ø¿Í»§»úµÄä¯ÀÀÆ÷¡£Èç¹û¿Í»§»úÌ ......
´óѧÒѾÀ´µ½ÁË×îÖØÒªµÄʱÆÚÁË£¬ÎÒ²»ÄÜÔÙÒ»ÊÂÎÞ³ÉÁË¡£¹â˵ûÓã¬ËùÒÔ¾ÍÔÚÕâÀïдÏÂÎÄÕ£¬ÒԼǼÎҵijɳ¤Àú³Ì¡£
ÕâѧÆÚ¸ÕºÃѧµ½Êý¾Ý½á¹¹£¬ÄǾͽ«ÌâÄ¿·ÖÎöµÄ¹ý³Ì¼°´úÂëдÏÂÀ´£¬¹©ÒÔºó×Ô¼ºÈ¡Éá¡£Òò±¾ÈËˮƽһ°ã£¬ËùÒÔ´úÂë²¢²»Ò»¶¨ÊÇ×îÓŵ쬵«ÊÇÎÒ»áŬÁ¦¸Ä½ø£¬×ö×îºÃµÄ×Ô¼º£¡ ......
C/C++º¯Êýµ÷ÓÃÔ¼¶¨ºÍº¯ÊýÃû³ÆÐÞÊιæÔò̽ÌÖ
×÷ÕߣºÐǹ죨oRbIt£©
ʹÓÃC/C++ÓïÑÔ¿ª·¢Èí¼þµÄ³ÌÐòÔ±¾³£Åöµ½ÕâÑùµÄÎÊÌ⣺ÓÐʱºòÊdzÌÐò±àÒëûÓÐÎÊÌ⣬µ«ÊÇÁ´½ÓµÄʱºò×ÜÊDZ¨¸æº¯Êý²»´æÔÚ£¨¾µäµÄLNK
2001´íÎ󣩣¬ÓÐʱºòÊdzÌÐò±àÒëºÍÁ´½Ó¶¼Ã»ÓдíÎ󣬵«ÊÇÖ»Òªµ÷ÓÿâÖеĺ¯Êý¾Í»á³öÏÖ¶ÑÕ»Òì³£¡£ÕâЩÏÖÏóͨ³£ÊdzöÏÖÔÚCºÍC++µÄ´úÂë»ìºÏʹÓõÄÇé¿öÏ»ò
ÔÚC++³ÌÐòÖÐʹÓõÚÈý·½µÄ¿âµÄÇé¿öÏ£¨²»ÊÇÓÃC++ÓïÑÔ¿ª·¢µÄ£©£¬ÆäʵÕâ¶¼ÊǺ¯Êýµ÷ÓÃÔ¼¶¨£¨Calling
Convention£©ºÍº¯ÊýÃûÐÞÊΣ¨Decorated
Name£©¹æÔòÈǵĻö¡£º¯Êýµ÷Ó÷½Ê½¾ö¶¨Á˺¯Êý²ÎÊýÈëÕ»µÄ˳Ðò£¬ÊÇÓɵ÷ÓÃÕߺ¯Êý»¹ÊDZ»µ÷Óú¯Êý¸ºÔðÇå³ýÕ»ÖеIJÎÊýµÈÎÊÌ⣬¶øº¯ÊýÃûÐÞÊιæÔò¾ö¶¨Á˱àÒëÆ÷ʹ
ÓúÎÖÖÃû×ÖÐÞÊη½Ê½À´Çø·Ö²»Í¬µÄº¯Êý£¬Èç¹ûº¯ÊýÖ®¼äµÄµ÷ÓÃÔ¼¶¨²»Æ¥Åä»òÕßÃû×ÖÐÞÊβ»Æ¥Åä¾Í»á²úÉúÒÔÉϵÄÎÊÌâ¡£±¾ÎÄ·Ö±ð¶ÔCºÍC++ÕâÁ½ÖÖ±à³ÌÓïÑԵĺ¯Êýµ÷
ÓÃÔ¼¶¨ºÍº¯ÊýÃûÐÞÊιæÔò½øÐÐÏêϸµÄ½âÊÍ£¬±È½ÏÁËËüÃǵÄÒì֮ͬ´¦£¬²¢¾ÙÀý˵Ã÷ÁËÒÔÉÏÎÊÌâ³öÏÖµÄÔÒò¡£
º¯Êýµ÷ÓÃÔ¼¶¨£¨Calling Convention£©
º¯Êýµ÷ÓÃÔ¼¶¨²»½ö¾ö¶¨ÁË·¢Éúº¯Êýµ÷ÓÃʱº¯Êý²ÎÊýµÄÈëջ˳Ðò£¬»¹¾ö¶¨ÁËÊÇÓɵ÷ÓÃÕߺ¯Êý»¹ÊDZ»µ÷Óú¯Êý¸ºÔðÇå³ýÕ»ÖеIJÎÊý ......
C/C++º¯Êýµ÷ÓÃÔ¼¶¨ºÍº¯ÊýÃû³ÆÐÞÊιæÔò̽ÌÖ
×÷ÕߣºÐǹ죨oRbIt£©
ʹÓÃC/C++ÓïÑÔ¿ª·¢Èí¼þµÄ³ÌÐòÔ±¾³£Åöµ½ÕâÑùµÄÎÊÌ⣺ÓÐʱºòÊdzÌÐò±àÒëûÓÐÎÊÌ⣬µ«ÊÇÁ´½ÓµÄʱºò×ÜÊDZ¨¸æº¯Êý²»´æÔÚ£¨¾µäµÄLNK
2001´íÎ󣩣¬ÓÐʱºòÊdzÌÐò±àÒëºÍÁ´½Ó¶¼Ã»ÓдíÎ󣬵«ÊÇÖ»Òªµ÷ÓÿâÖеĺ¯Êý¾Í»á³öÏÖ¶ÑÕ»Òì³£¡£ÕâЩÏÖÏóͨ³£ÊdzöÏÖÔÚCºÍC++µÄ´úÂë»ìºÏʹÓõÄÇé¿öÏ»ò
ÔÚC++³ÌÐòÖÐʹÓõÚÈý·½µÄ¿âµÄÇé¿öÏ£¨²»ÊÇÓÃC++ÓïÑÔ¿ª·¢µÄ£©£¬ÆäʵÕâ¶¼ÊǺ¯Êýµ÷ÓÃÔ¼¶¨£¨Calling
Convention£©ºÍº¯ÊýÃûÐÞÊΣ¨Decorated
Name£©¹æÔòÈǵĻö¡£º¯Êýµ÷Ó÷½Ê½¾ö¶¨Á˺¯Êý²ÎÊýÈëÕ»µÄ˳Ðò£¬ÊÇÓɵ÷ÓÃÕߺ¯Êý»¹ÊDZ»µ÷Óú¯Êý¸ºÔðÇå³ýÕ»ÖеIJÎÊýµÈÎÊÌ⣬¶øº¯ÊýÃûÐÞÊιæÔò¾ö¶¨Á˱àÒëÆ÷ʹ
ÓúÎÖÖÃû×ÖÐÞÊη½Ê½À´Çø·Ö²»Í¬µÄº¯Êý£¬Èç¹ûº¯ÊýÖ®¼äµÄµ÷ÓÃÔ¼¶¨²»Æ¥Åä»òÕßÃû×ÖÐÞÊβ»Æ¥Åä¾Í»á²úÉúÒÔÉϵÄÎÊÌâ¡£±¾ÎÄ·Ö±ð¶ÔCºÍC++ÕâÁ½ÖÖ±à³ÌÓïÑԵĺ¯Êýµ÷
ÓÃÔ¼¶¨ºÍº¯ÊýÃûÐÞÊιæÔò½øÐÐÏêϸµÄ½âÊÍ£¬±È½ÏÁËËüÃǵÄÒì֮ͬ´¦£¬²¢¾ÙÀý˵Ã÷ÁËÒÔÉÏÎÊÌâ³öÏÖµÄÔÒò¡£
º¯Êýµ÷ÓÃÔ¼¶¨£¨Calling Convention£©
º¯Êýµ÷ÓÃÔ¼¶¨²»½ö¾ö¶¨ÁË·¢Éúº¯Êýµ÷ÓÃʱº¯Êý²ÎÊýµÄÈëջ˳Ðò£¬»¹¾ö¶¨ÁËÊÇÓɵ÷ÓÃÕߺ¯Êý»¹ÊDZ»µ÷Óú¯Êý¸ºÔðÇå³ýÕ»ÖеIJÎÊý ......
ÀûÓÃ
ÏÂÔØµÄÕâ¶Î´úÂ룬³É¹¦ÊµÏÖÁËÊØ»¤½ø³Ì£¬ÔÀ´ÊØ»¤½ø³ÌÊǺܼòµ¥µÄÊÂÇé¡£
¡¡¡¡ÔÚmainº¯ÊýÖÐÖ´ÐÐ
¡¡¡¡init_daemon();//³õʼ»¯ÎªDaemon
¡¡¡¡¾Í¿ÉÒ԰ѽø³Ì±ä³ÉÊØ»¤½ø³Ì
¡¡¡¡
#include
#include
#include
#include
#include
void
init_daemon(void
)
{
int
pid;
int
i;
if
(pid=fork())
exit
(0);//ÊǸ¸½ø³Ì£¬½áÊø¸¸½ø³Ì
else
if
(pid< 0)
exit
(1);//forkʧ°Ü£¬Í˳ö
//ÊǵÚÒ»×Ó½ø³Ì£¬ºǫ́¼ÌÐøÖ´ÐÐ
setsid();//µÚÒ»×Ó½ø³Ì³ÉΪеĻỰ×鳤ºÍ½ø³Ì×鳤
//²¢Óë¿ØÖÆÖÕ¶Ë·ÖÀë
if
(pid=fork())
exit
(0);//ÊǵÚÒ»×Ó½ø³Ì£¬½áÊøµÚÒ»×Ó½ø³Ì
else
if
(pid< 0)
exit
(1);//forkʧ°Ü£¬Í˳ö
//Êǵڶþ×Ó½ø³Ì£¬¼ÌÐø
//µÚ¶þ×Ó½ø³Ì²»ÔÙÊǻỰ×鳤
for
(i=0;i< NOFILE;++i)//¹Ø±Õ´ò¿ªµÄÎļþÃèÊö·û
close
(i);
chdir("/tmp"
);//¸Ä±ä
¹¤×÷Ŀ¼µ½/tmp
umask(0);//ÖØÉèÎļþ´´½¨ÑÚÄ£
return
;
} ......
ÀûÓÃ
ÏÂÔØµÄÕâ¶Î´úÂ룬³É¹¦ÊµÏÖÁËÊØ»¤½ø³Ì£¬ÔÀ´ÊØ»¤½ø³ÌÊǺܼòµ¥µÄÊÂÇé¡£
¡¡¡¡ÔÚmainº¯ÊýÖÐÖ´ÐÐ
¡¡¡¡init_daemon();//³õʼ»¯ÎªDaemon
¡¡¡¡¾Í¿ÉÒ԰ѽø³Ì±ä³ÉÊØ»¤½ø³Ì
¡¡¡¡
#include
#include
#include
#include
#include
void
init_daemon(void
)
{
int
pid;
int
i;
if
(pid=fork())
exit
(0);//ÊǸ¸½ø³Ì£¬½áÊø¸¸½ø³Ì
else
if
(pid< 0)
exit
(1);//forkʧ°Ü£¬Í˳ö
//ÊǵÚÒ»×Ó½ø³Ì£¬ºǫ́¼ÌÐøÖ´ÐÐ
setsid();//µÚÒ»×Ó½ø³Ì³ÉΪеĻỰ×鳤ºÍ½ø³Ì×鳤
//²¢Óë¿ØÖÆÖÕ¶Ë·ÖÀë
if
(pid=fork())
exit
(0);//ÊǵÚÒ»×Ó½ø³Ì£¬½áÊøµÚÒ»×Ó½ø³Ì
else
if
(pid< 0)
exit
(1);//forkʧ°Ü£¬Í˳ö
//Êǵڶþ×Ó½ø³Ì£¬¼ÌÐø
//µÚ¶þ×Ó½ø³Ì²»ÔÙÊǻỰ×鳤
for
(i=0;i< NOFILE;++i)//¹Ø±Õ´ò¿ªµÄÎļþÃèÊö·û
close
(i);
chdir("/tmp"
);//¸Ä±ä
¹¤×÷Ŀ¼µ½/tmp
umask(0);//ÖØÉèÎļþ´´½¨ÑÚÄ£
return
;
} ......
¡¡¡¡ÔÚ×öACMÌâʱ£¬¾³£¶¼»áÓöµ½Ò»Ð©±È½Ï´óµÄÕûÊý¡£¶ø³£ÓõÄÄÚÖÃÕûÊýÀàÐͳ£³£ÏÔµÃ̫СÁË£ºÆäÖÐlong ºÍ int
·¶Î§ÊÇ[-2^31,2^31)£¬¼´-2147483648~2147483647¡£¶øunsigned·¶Î§ÊÇ[0,2^32)£¬¼´
0~4294967295¡£Ò²¾ÍÊÇ˵£¬³£¹æµÄ32λÕûÊýÖ»Äܹ»´¦Àí40ÒÚÒÔϵÄÊý¡£
¡¡¡¡ÄÇÓöµ½±È40ÒÚÒª´óµÄÊýÔõô°ìÄØ£¿Õâʱ¾ÍÒªÓõ½C++µÄ64λÀ©Õ¹ÁË¡£²»Í¬µÄ±àÒëÆ÷¶Ô64λÕûÊýµÄÀ©Õ¹ÓÐËù²»Í¬¡£»ùÓÚACMµÄÐèÒª£¬ÏÂÃæ½ö½éÉÜ
VC6.0Óëg++±àÒëÆ÷µÄÀ©Õ¹¡£
¡¡¡¡VCµÄ64λÕûÊý·Ö±ð½Ð×ö__int64Óëunsigned __int64£¬Æä·¶Î§·Ö±ðÊÇ[-2^63,
2^63)Óë[0,2^64)£¬¼´-9223372036854775808~9223372036854775807Óë
0~18446744073709551615(Ô¼1800ÒÚÒÚ)¡£¶Ô64λÕûÊýµÄÔËËãÓë32λÕûÊý»ù±¾Ïàͬ£¬¶¼Ö§³ÖËÄÔòÔËËãÓëλÔËËãµÈ¡£µ±½øÐÐ64λÓë
32λµÄ»ìºÏÔËËãʱ£¬32λÕûÊý»á±»Òþʽת»»³É64λÕûÊý¡£µ«ÊÇ£¬VCµÄÊäÈëÊä³öÓë__int64µÄ¼æÈݾͲ»ÊǺܺÃÁË£¬Èç¹ûÄãдÏÂÕâÑùÒ»¶Î´úÂ룺
1 __int64 a;
2 cin >> a;
3 cout << a;
ÄÇô£¬ÔÚµÚ2ÐлáÊÕµ½“error C2679: binary '>>' : no operator
defined which takes a right-hand operand of type '__int64' (or t ......
¡¡¡¡ÔÚ×öACMÌâʱ£¬¾³£¶¼»áÓöµ½Ò»Ð©±È½Ï´óµÄÕûÊý¡£¶ø³£ÓõÄÄÚÖÃÕûÊýÀàÐͳ£³£ÏÔµÃ̫СÁË£ºÆäÖÐlong ºÍ int
·¶Î§ÊÇ[-2^31,2^31)£¬¼´-2147483648~2147483647¡£¶øunsigned·¶Î§ÊÇ[0,2^32)£¬¼´
0~4294967295¡£Ò²¾ÍÊÇ˵£¬³£¹æµÄ32λÕûÊýÖ»Äܹ»´¦Àí40ÒÚÒÔϵÄÊý¡£
¡¡¡¡ÄÇÓöµ½±È40ÒÚÒª´óµÄÊýÔõô°ìÄØ£¿Õâʱ¾ÍÒªÓõ½C++µÄ64λÀ©Õ¹ÁË¡£²»Í¬µÄ±àÒëÆ÷¶Ô64λÕûÊýµÄÀ©Õ¹ÓÐËù²»Í¬¡£»ùÓÚACMµÄÐèÒª£¬ÏÂÃæ½ö½éÉÜ
VC6.0Óëg++±àÒëÆ÷µÄÀ©Õ¹¡£
¡¡¡¡VCµÄ64λÕûÊý·Ö±ð½Ð×ö__int64Óëunsigned __int64£¬Æä·¶Î§·Ö±ðÊÇ[-2^63,
2^63)Óë[0,2^64)£¬¼´-9223372036854775808~9223372036854775807Óë
0~18446744073709551615(Ô¼1800ÒÚÒÚ)¡£¶Ô64λÕûÊýµÄÔËËãÓë32λÕûÊý»ù±¾Ïàͬ£¬¶¼Ö§³ÖËÄÔòÔËËãÓëλÔËËãµÈ¡£µ±½øÐÐ64λÓë
32λµÄ»ìºÏÔËËãʱ£¬32λÕûÊý»á±»Òþʽת»»³É64λÕûÊý¡£µ«ÊÇ£¬VCµÄÊäÈëÊä³öÓë__int64µÄ¼æÈݾͲ»ÊǺܺÃÁË£¬Èç¹ûÄãдÏÂÕâÑùÒ»¶Î´úÂ룺
1 __int64 a;
2 cin >> a;
3 cout << a;
ÄÇô£¬ÔÚµÚ2ÐлáÊÕµ½“error C2679: binary '>>' : no operator
defined which takes a right-hand operand of type '__int64' (or t ......