??? 關(guān)于extern "C"一直在用,對其作用也算了解,但其道理或者叫工作原理卻一無所知~
??? 剛才看了《xxx的自我修養(yǎng)》中的3.5.4,才知道,用extern "C",原來是與編譯器的“符號名”相關(guān)的~下面的代碼最能說明extern "C"問題和來由~
#include?<stdio.h>
namespace?myname
{
????????int?var?=?42;
}
extern?"C"
{
????????double?_ZN6myname3varE;
}
int?main()
{
????????printf("%d\n",?_ZN6myname3varE);
????????return?0;
}
??? 上面的代碼是從書中COPY來的,書上說其運行結(jié)果是--42;
???? 但我運行的結(jié)果如下:
fire1>g++?ecp.cpp?-o?ecp
/usr/ccs/bin/as:?"/var/tmp//cctSG3Jm.s",?line?14:?error:?redefinition?of?symbol?"_ZN6myname3varE"
/usr/ccs/bin/as:?"/var/tmp//cctSG3Jm.s",?line?13:?warning:?size?of?"_ZN6myname3varE"?redefined
??? 雖然我沒有得到結(jié)果,但要說明extern "C"的目的是達到了。
??? 我的這邊的環(huán)境如下:
fire1>uname?-a
SunOS?fire1?5.8?Generic_108528-21?sun4u?sparc?SUNW,Sun-Fire-880
fire1>gcc?-v
Reading?specs?from?/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.3.2/specs
Configured?with:?../configure?--with-as=/usr/ccs/bin/as?--with-ld=/usr/ccs/bin/ld?--disable-nls
Thread?model:?posix
gcc?version?3.3.2
?? extern "C"這個問題最典型或者叫最常見的代碼樣子如下:
#ifdef?__cplusplus
extern?"C"?{
#endif
void*?memset(void*,?int,?size_t);
#ifdef?__cplusplus
}
#endif