C/C++ µÄÈ«¾Ö±äÁ¿³õʼ»¯Óë²»³õʼ»¯µÄÇø±ð
ÔÚCÓïÑÔÀȫ¾Ö±äÁ¿Èç¹û²»³õʼ»¯µÄ»°£¬Ä¬ÈÏΪ0£¬Ò²¾ÍÊÇ˵ÔÚÈ«¾Ö¿Õ¼äÀ
int x =0; ¸ú int x; µÄЧ¹û¿´ÆðÀ´ÊÇÒ»ÑùµÄ¡£µ«ÆäʵÕâÀïÃæµÄ²î±ðºÜ´ó£¬Ç¿ÁÒ½¨Òé´ó¼ÒËùÓеÄÈ«¾Ö±äÁ¿¶¼Òª³õʼ»¯£¬ËûÃǵÄÖ÷Òª²î±ðÈçÏ£º
±àÒëÆ÷ÔÚ±àÒëµÄʱºòÕë¶ÔÕâÁ½ÖÖÇé¿ö»á²úÉúÁ½ÖÖ·ûºÅ·ÅÔÚÄ¿±êÎļþµÄ·ûºÅ±íÖУ¬¶ÔÓÚ³õʼ»¯µÄ£¬½ÐÇ¿·ûºÅ£¬Î´³õʼ»¯µÄ£¬½ÐÈõ·ûºÅ¡£
Á¬½ÓÆ÷ÔÚÁ¬½ÓÄ¿±êÎļþµÄʱºò£¬Èç¹ûÓöµ½Á½¸öÖØÃû·ûºÅ£¬»áÓÐÒÔÏ´¦Àí¹æÔò£º
1¡¢Èç¹ûÓжà¸öÖØÃûµÄÇ¿·ûºÅ£¬Ôò±¨´í¡£
2¡¢Èç¹ûÓÐÒ»¸öÇ¿·ûºÅ£¬¶à¸öÈõ·ûºÅ£¬ÔòÒÔÇ¿·ûºÅΪ׼¡£
3¡¢Èç¹ûûÓÐÇ¿·ûºÅ£¬µ«Óжà¸öÖØÃûµÄÈõ·ûºÅ£¬ÔòÈÎÑ¡Ò»¸öÈõ·ûºÅ¡£
»ùÓÚÒÔÉϹæÔò¿´ÏÂÃæµÄ³ÌÐò£º£¨±àÒëÆ÷Ϊgcc 3.4.6£¬ VCϽá¹û²»Ò»Ñù£©
main.cpp
int x;
void foo();
int main(int argc, char* argv[])
{
printf("x1:%d\n", x);
foo();
printf("x2:%d\n", x);
return 0;
}
var.cpp
int x;
void foo()
{
x = 2;
}
ÒòΪÁ½¸öÎļþÀïÃæµÄx¶¼±»³õʼ»¯ÁË£¬ËùÒÔ±àÒë³öÀ´µÄÁ½¸öÄ¿±êÎļþÀïx¶¼ÊÇÇ¿·ûºÅ£¬Á¬½ÓµÄʱºò»á±¨´í£º
multiple definition of `x'
·ûºÏ¹æÔò1¡£
°Ñvar.cppÀïÃæµÄint x = 0;¸Ä³É int x; ²»×ö³õʼ»¯£¬±àÒë¡¢Á¬½ÓÎÞÈκξ¯¸æ£¬ÔËÐнá¹ûΪ£º
x:1
x:2
˵Ã÷Á¬½ÓµÄʱºòÒÔmain.cppÖеÄxΪ׼£¬fooº¯ÊýÐ޸ĵÄÊÇmain.cppÖж¨ÒåµÄx¡£·ûºÏ¹æÔò2¡£
°Ñmain.cppÖеijõʼ»¯Ò²È¥µô£¬¸Ä³É int x; ±àÒë¡¢Á¬½ÓÈÔÈ»ºÜ˳Àû£¬ÔËÐнá¹ûΪ£º
x:1
x:2
˵Ã÷mainº¯ÊýºÍfooº¯ÊýÐ޸ĵÄÊÇͬһ¸öx£¬Á¬½ÓÆ÷×Ô¼ºÑ¡ÔñÁËÒ»¸öx£¬·ûºÏ¹æÔò3.
´ó²¿·ÖÇé¿öÏ£¬ÎÒÃDz»Ï£ÍûÁ¬½ÓÆ÷ΪÎÒÃÇ×ö¾ö¶¨£¬ËùÒÔÎÒ²»ÊǺÜÈÏͬºóÁ½¸ö¹æÔò£¬ÖÁÉÙÓ¦¸Ã¸ø¸ö¾¯¸æ£¬¶ø²»Ó¦¸Ã°²¾²µØͨ¹ý¡£
Ò²Ðíдvar.cppµÄÈ˸ù±¾²»ÖªµÀmain.cppÀïÃæÒ²ÓÐÒ»¸öxÄØ£¬fooº¯ÊýµÄ±¾ÒâÒ²Ðí²¢²»ÊÇÒªÐÞ¸Ämain.cppÖеÄx¡£ÒòΪÕâÖÖÎÊÌâÒýÆðµÄbug»áºÜÄѲ顣
ËùÒÔÎÒÃÇÒª¾¡Á¿°ÑÈ«¾Ö±äÁ¿³õʼ»¯£¬¶ÔÓÚ²»Ïë¸ø±ðµÄÎļþÒýÓõıäÁ¿£¬Ò²¾¡Á¿ÓÃstaticÐÞÊΡ£
³ýÁËÁ¬½ÓʱµÄ±íÏÖ²»Ò»ÑùÍ⣬Ϊ³õʼ»¯µÄ·ûºÅÔÚÄ¿±êÎļþµÄbss¶ÎÖУ¬¶ø³õʼ»¯µÄ·ûºÅÔÚdata¶ÎÖС£
Ïà¹ØÎĵµ£º
1.Çø±ð(Ö÷ÒªµÄ):Ö¸ÕëÐèÒªÔö¼ÓÒ»´Î¶îÍâµÄÌáÈ¡²Ù×÷
±àÒëÆ÷Ϊÿ¸ö±äÁ¿·ÖÅäÒ»¸öµØÖ·(×óÖµ)¡£Õâ¸öµØÖ·±àÒëʱ¿ÉÖª£¬¶øÇҸñäÁ¿ÔÚÔËÐÐʱһֱ±£´æÓÚÕâ¸öµØÖ·¡£Ïà·´£¬´æ´¢ÓÚ±äÁ¿ÖеÄÖµ(ËüµÄÓÒÖµ)Ö»ÓÐÔÚÔËÐÐʱ²Å¿ÉÖª¡£Èç¹ûÐèÒªÓõ½±äÁ¿Öд洢µÄÖµ£¬±àÒëÆ÷¾Í·¢³öÖ¸Áî´ÓµØÖ·¶ÁÈë±äÁ¿Öµ²¢½«Ëü´æÓڼĴæÆ÷ÖС£
  ......
ͨ³££¬ÔÚCÓïÑÔµÄÍ·ÎļþÖо³£¿ÉÒÔ¿´µ½ÀàËÆÏÂÃæÕâÖÖÐÎʽµÄ´úÂ룺
#ifdef __cplusplus
extern "C" {
#endif
/**** some declaration or so *****/
#ifdef __cplusplus
}
#endif /* end of __cplusplus */
ÄÇô£¬ÕâÖÖд·¨Ê²Ã´ÓÃÄØ£¿Êµ¼ÊÉÏ£¬ÕâÊÇΪÁËÈÃCPPÄܹ»ÓëC½Ó¿Ú¶ø²ÉÓõÄÒ»ÖÖÓï·¨ÐÎʽ¡£Ö®ËùÒÔ²ÉÓÃÕâÖÖ·½Ê½ ......
±¾ÎĵÄÄÚÈÝÊÇ Win32 API£¨ÌرðÊǽø³Ì¡¢Ï̺߳͹²ÏíÄÚ´æ·þÎñ£©µ½ POWER ÉÏ Linux µÄÓ³Éä¡£±¾ÎÄ¿ÉÒÔ°ïÖúÄúÈ·¶¨ÄÄÖÖÓ³Éä·þÎñ×îÊʺÏÄúµÄÐèÒª¡£×÷ÕßÏòÄúÏêϸ½éÉÜÁËËûÔÚÒÆÖ² Win32 C/C++ Ó¦ÓóÌÐòʱÓöµ½µÄ API Ó³Éä¡£
¸ÅÊö
Óкܶ෽ʽ¿ÉÒÔ½« Win32 C/C++ Ó¦ÓóÌÐòÒÆÖ²ºÍǨÒƵ½ pSeries ƽ̨¡£Äú¿ÉÒÔʹÓÃÃâ·ÑÈí¼þ»òÕßµÚÈý·½¹¤¾ßÀ´ ......
VCÖÐÏÂÃ漸¸ö½á¹¹Ìå´óС·Ö±ðÊǶàÉÙÄØ
struct MyStruct
{
double m4;
char m1;
int m3£»
};
struct MyStruct {
char m1;
double m4;
int m3;
};
#pragma pack(push)   ......
ΪʲôÐèҪʹÓÃextern "C"ÄØ£¿C++Ö®¸¸ÔÚÉè¼ÆC++֮ʱ£¬¿¼Âǵ½µ±Ê±ÒѾ´æÔÚÁË´óÁ¿µÄC´úÂ룬ΪÁËÖ§³ÖÔÀ´µÄC´úÂëºÍÒѾдºÃC¿â£¬ÐèÒªÔÚC++Öо¡¿ÉÄܵÄÖ§³ÖC£¬¶øextern "C"¾ÍÊÇÆäÖеÄÒ»¸ö²ßÂÔ¡£
¡¡¡¡ÊÔÏëÕâÑùµÄÇé¿ö:Ò»¸ö¿âÎļþÒѾÓÃCдºÃÁ˶øÇÒÔËÐеúÜÁ¼ºÃ£¬Õâ¸öʱºòÎÒÃÇÐèҪʹÓÃÕâ¸ö¿âÎļþ£ ......