LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
123
返回列表 发新帖
楼主: sybaselu

关于这个宏定义的疑惑

[复制链接]
发表于 2006-2-20 11:15:09 | 显示全部楼层
我前面理解有误
C里面是不需要指定extern "C"的,从理论上来说是多此一举,从实际来看会报错
我上面已经做了改动

突然想起来原来的stdio.h里是这样写的
#ifdef __cplusplus
extern "C" {
#endif
原型声明
#ifdef __cplusplus
}
#endif
我忘记了有#ifdef __cplusplus这个细节
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-20 18:15:14 | 显示全部楼层
现在是不是可以总结:
1. 只要所有的函数都是在.cpp中实现的,那么就不用:extern "C" Demo()
2. 假设要在.cpp中使用ISO/POSIX的标准C库的头文件是不是都是这样:
   extern "C"
   {
         #include <sys/stdlib.h>
         ...
   }
暂时这么总结,想到了再补充。
回复 支持 反对

使用道具 举报

发表于 2006-2-20 18:24:00 | 显示全部楼层
敢问一句老兄是在写library么
如果不是,那么可以不理会extern "C"

不妨打开/usr/include/stdio.h看一看
glibc的头文件里已经有了
#ifdef __cplusplus
# define __BEGIN_DECLS extern "C" {
# define __END_DECLS }
#else
# define __BEGIN_DECLS
# define __END_DECLS
#endif
只管用好了
不用自己操心extern "C"的问题

我改了一下那个例子

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-21 08:46:08 | 显示全部楼层
不是写lib而是在修改一个项目的SDK(都是C++写的)时一直找不到被extern “C”声明的函数的实现。uClibc/glibc 已经在POSIX/ISO标准的C库中封装定义好了为C++编译器。谢了zhllg
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表