Codejie's C++ Space

Using C++

读书:extern "C"


    关于extern "C"一直在用,对其作用也算了解,但其道理或者叫工作原理却一无所知~
    刚才看了《xxx的自我修养》中的3.5.4,才知道,用extern "C",原来是与编译器的“符号名”相关的~下面的代码最能说明extern "C"问题和来由~
#include <stdio.h>

namespace myname
{
        
int var = 42;
}

extern "C"
{
        
double _ZN6myname3varE;
}

int main()
{
        printf(
"%d\n", _ZN6myname3varE);

        
return 0;
}

    上面的代码是从书中COPY来的,书上说其运行结果是--42;
     但我运行的结果如下:
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
    虽然我没有得到结果,但要说明extern "C"的目的是达到了。
    我的这边的环境如下:
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




posted on 2009-08-14 17:39 codejie 阅读(245) 评论(0)  编辑 收藏 引用 所属分类: C++随笔而已


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

Using C++

导航

统计

留言簿(73)

随笔分类(513)

积分与排名

最新评论

阅读排行榜

评论排行榜