Cº¯Êýµ÷ÓÃÔ¼¶¨
CÖвÉÓÃÁ˲»Í¬µÄµ÷Ó÷½Ê½À´µ÷Óú¯Êý£¬ÕâÀïµÄº¯Êýµ÷ÓøÅÄî¿ÉÄÜÓëÎÒÃÇͨ³£ËùÀí½âµÄº¯Êýµ÷ÓÃÓÐËù²»Í¬£¬ËüÃÇÖ¸µÄÊÇ´¦ÀíÆ÷ÔÚ´¦Àíº¯ÊýÉϵIJîÒì¡£Àí½âÕâЩ²»Í¬µÄ·½Ê½ÓÐÖúÓÚÎÒÃÇÀ´µ÷ÊÔ³ÌÐòºÍÁ´½ÓÎÒÃǵĴúÂë¡£ÔÚ´ËÎÒÏëÌÖÂÛÒ»ÏÂÖ÷ÒªµÄËÄÖÖº¯Êýµ÷Ó÷½·¨ÒÔ¼°Ö®¼äµÄÇø±ð£¬ËüÃÇÊÇ__stdcall¡¢__cdecl¡¢__fastcall¡¢thiscall¡£µ±È»£¬»¹ÓÐһЩ¸ü¼Ó²»³£Óõĺ¯Êýµ÷Ó÷½·¨±ÈÈçnaked callÎÒÒ²½«Ë³±ãÌá¼°¡£
²»Í¬µÄº¯Êýµ÷Ó÷½·¨Ö®¼äµÄÖ÷ÒªÓÐÒÔÏÂÒ»Ð©Çø±ð£º
¢Ù µ±²ÎÊý¸öÊý¶àÓÚÒ»¸öʱ£¬°´ÕÕʲô˳Ðò°Ñ²ÎÊýѹÈë¶ÑÕ»º¯Êýµ÷Óúó
¢Ú ËÀ´»Ö¸´¶ÑÕ»
¢Û ±àÒëºóµÄÐÞÊÎÃû¹æÔò
__stdcall£º½«²ÎÊýѹջÊǰ´PASCALÓïÑÔµÄ˳Ðò£¨´ÓÓÒµ½×󣩣¬Í¨³£ÓÃÓÚWINAPIÖС£ËüÊÇÓɱ»µ÷ÓÃÕß½«²ÎÊý´ÓÕ»ÖÐÇå³ýµÄ,ËùÒÔËüµÄ±àÒëÎļþ±È__cdeclС¡£__stdcallÊÇWindows APIº¯ÊýÖÐĬÈϵĵ÷ÓÃÔ¼¶¨£¬±»µ÷º¯Êý×Ô¼ºÔÚÍ˳öʱÇå¿Õ¶ÑÕ»¡£ÕâÖÖµ÷Ó÷½Ê½²»ÄÜʵÏÖ±ä²Îº¯Êý£¬ÒòΪ±»µ÷º¯Êý²»ÄÜÊÂÏÈÖªµÀµ¯Õ»ÊýÁ¿£¬µ«ÔÚÖ÷µ÷º¯ÊýÖÐÊÇ¿ÉÒÔ×öµ½µÄ£¬ÒòΪ²ÎÊýÊýÁ¿ÓÉÖ÷µ÷º¯ÊýÈ·¶¨¡£VC½«º¯Êý±àÒëºó»áÔÚº¯ÊýÃûÇ°Ãæ¼ÓÉÏÏ»®Ïßǰ׺£¬ÔÚº¯ÊýÃûºó¼ÓÉÏ"@"ºÍ²ÎÊýµÄ×Ö½ÚÊý¡£È纯Êýint func(int a, double b)µÄÐÞÊÎÃûÊÇ_func@12¡£
±àÒëÑ¡Ïî/Gz¡£
×¢Ò⣺ÔÚ´´½¨DLLʱ£¬Ò»°ãʹÓÃ__stdcallµ÷Óã¨Win32 Api·½Ê½£©£¬²ÉÓÃ__functionname@numberÃüÃû¹æÔò£¬Òò¶ø¸÷ÖÖÓïÑÔ¼äµÄDLLÄÜ»¥Ïàµ÷Óá£Ò²¾ÍÊÇ˵£¬DLLµÄ±àÖÆÓë¾ßÌåµÄ±à³ÌÓïÑÔ¼°±àÒëÆ÷Î޹أ¬Ö»Òª×ñÊØDLLµÄ¿ª·¢¹æ·¶ºÍ±à³Ì²ßÂÔ£¬²¢°²ÅÅÕýÈ·µÄµ÷Óýӿڣ¬²»¹ÜÓúÎÖÖ±à³ÌÓïÑÔ±àÖÆµÄDLL¶¼¾ßÓÐͨÓÃÐÔ¡£
__cdecl£ºÊÇCÓïÑÔ²ÉÓõÄĬÈϵ÷Ó÷½·¨£¬²ÎÊý°´´ÓÓÒµ½×óµÄ˳ÐòѹÈëÕ»£¬Óɵ÷ÓÃÕ߰ѲÎÊýµ¯³öÕ»£¬ËüµÄÓŵãÊÇÖ§³ÖprintfÕâÑùµÄ¿É±ä²ÎÊýµ÷Óá£Ò»°ã¿É±ä²ÎÊýº¯ÊýµÄµ÷Óö¼²ÉÓÃÕâÖÖ·½Ê½£¬±ÈÈçint __cdecl scanf (const char *format,…)¡£¶ÔÓÚ"C"£¬ÐÞÊÎÃûÊÇÔÚº¯ÊýÃûǰ¼ÓÏ»®Ïß,È纯Êývoid test(void)µÄÐÞÊÎÃûÊÇ__test¡£³ý·ÇÉùÃ÷Ϊ extern "C"£¬·ñÔò C++ º¯Êý½«Ê¹Óò»Í¬µÄÃû³ÆÐÞÊη½°¸¡£
±àÒëÑ¡Ïî/Gd¡£
×¢Ò⣺CC++ÖеÄmain(»òwmain)º¯ÊýµÄµ÷ÓÃÔ¼¶¨±ØÐëÊÇ__cdecl,²»ÔÊÐí¸ü¸Ä¡£
__fastcall£º__fastcallµ÷ÓýϿ죬Ëüͨ¹ýCPUÄÚ²¿¼Ä´æÆ÷´«µÝ²ÎÊý¡£Í·Á½¸öDWORDÀàÐÍ»òÕßÕ¼¸üÉÙ×ֽڵIJÎÊý±»·ÅÈëECXºÍEDX¼Ä´æÆ÷£¬ÆäËûʣϵIJÎÊý°´´ÓÓÒµ½×óµÄ˳ÐòѹÈëÕ»¡£Óɱ»µ÷ÓÃÕ߰ѲÎÊýµ¯³öÕ»£¬¶ÔÓÚ“C”º¯Êý»òÕß±äÁ¿£¬ÐÞÊÎÃûÒÔ“@”Ϊǰ׺£¬È»ºóÊǺ¯ÊýÃû£¬½Ó×Å
Ïà¹ØÎĵµ£º
1. ×Ö·û´®²Ù×÷º¯Êý
³ÌÐò°´¹¦ÄÜ»®·Ö¿É·ÖΪÊýÖµÔËËã¡¢·ûºÅ´¦ÀíºÍI/O²Ù×÷ÈýÀ࣬·ûºÅ´¦Àí³ÌÐòÕ¼Ï൱´óµÄ±ÈÀý£¬·ûºÅ´¦Àí³ÌÐòÎÞ´¦²»ÔÚ£¬±àÒëÆ÷¡¢ä¯ÀÀÆ÷¡¢OfficeÌ×¼þµÈ³ÌÐòµÄÖ÷Òª¹¦Äܶ¼ÊÇ·ûºÅ´¦Àí¡£ÎÞÂ۶ิÔӵķûºÅ´¦Àí¶¼ÊÇÓɸ÷ÖÖ»ù±¾µÄ×Ö·û´®²Ù×÷×é³ÉµÄ£¬±¾½Ú½éÉÜÈçºÎÓÃCÓïÑԵĿ⺯Êý×ö×Ö·û´®³õʼ»¯¡¢È¡³¤¶È¡¢¿½±´¡¢Á¬½ ......
ʲôÊÇ¿ÕÖ¸Õë³£Á¿£¨null pointer constant£©?
[6.3.2.3-3] An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.
ÕâÀï¸æËßÎÒÃÇ£º0¡¢0L¡¢'\0'¡¢3 - 3¡¢0 * 17 £¨ËüÃǶ¼ÊÇ“integer constant expression”£©ÒÔ¼° (void*)0 µÈ¶¼ÊÇ¿Õ ......
µ¥Àýģʽ£º¶ÔÓ¦Ò»¸öÀàÖ»ÄÜÉú³ÉÒ»¸ö¶ÔÏó¡£
#include <stdio.h>
class A
{
private:
int id;
A() {}//°Ñ¹¹Ô캯Êý·ÅÔÚprivate£ºÏÂÄ¿µÄÊÇÔÚÀàÍâ²»ÄÜÔÚÕ»ÉÏÖ±½Ó·ÖÅä¿Õ¼ä¶¨Òå¶ÔÏó¡£
public:
static A *pt;
static A *instance()
  ......
/*
* Exercise 2-5 Page 48
*
* Write the function any(s1,s2), which returns the first location
* in the string s1 where any character from the string s2 occurs,
* or -1 if s1 contains no characters from s2. (The standard library
* function strpbrk does the same job but returns a pointer t ......
×ÜÊDZ»Í¬Ñ§ÃÇÎʵ½£¬ÈçºÎѧϰCºÍC++²Å²»Ã£È»£¬²Å²»ÊÇÂÒѧ£¬ÏëÁËһϣ¬ÕâÀï¸ø³öÒ»¸ö×ܵĻظ´¡£
¡¡¡¡Ò»¼ÒÖ®ÑÔ£¬»¶ÓÅÄש¹þ¡£
¡¡¡¡1¡¢¿ÉÒÔ¿¼ÂÇÏÈѧϰC.
¡¡¡¡´ó¶àÊýʱºò£¬ÎÒÃÇѧϰÓïÑÔµÄÄ¿µÄ£¬²»ÊÇΪÁ˳ÉΪһ¸öÓïÑÔר¼Ò£¬¶øÊÇÏ£Íû³ÉΪһ¸ö½â¾öÎÊÌâµÄר¼Ò¡£×öÒ»¸öÓÐÓõijÌÐòÔ±£¬×öÒ»¸ö׬ǮµÄ³ÌÐòÔ±¡£ÎÒÃǵļÛÖµ£¬½«ÌåÏÖÔÚ¿Í ......