当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 请求extern "C"的例子
帖子发表于 : 2008-06-20 11:44 
头像

注册: 2008-03-31 16:12
帖子: 94
送出感谢: 0 次
接收感谢: 0 次
网上看到很多人谈extern "C",其中的代码弄下来之后不能够编译,很是郁闷,一直也对extern "C"有些思想障碍。
所以请求一个简单的extern "C"的例子,包括编译指令。
谢谢了。

我从网上弄得一个简单的例子 如下,不能编译,提示错误在后面:

查找位置:http://tech.163.com/06/0118/09/27O66HCC0009159Q.html

//f1.c
extern "C"
{
void f1()
{
return;
}
}
//-------
// test.cxx
extern "C"
{
extern void f1();
}

int main()
{
f1();
return 0;
}

提示错误:f1.c:1: 错误:expected identifier or ‘(’ before string constant

如果是我编译的问题,请帮忙指正
如果是网上这篇文章内容的错误,在此呼吁所有的热心人一定确保自己所发的内容的正确性。
或者两者都不是,类似兼容性的问题。。


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-06-20 13:02 
头像

注册: 2005-08-25 13:58
帖子: 808
地址: ustc
送出感谢: 0 次
接收感谢: 0 次
我一般这么做:

f1.h:
代码:
#ifndef _F1_H_
#define _F1_H_

#ifdef __cplusplus
extern "C" {
#endif

void f1();

#ifdef __cplusplus
}
#endif

#endif


f1.c:
代码:
#include "f1.h"

void f1()
{
return;
}


test.cxx:
代码:
#include "f1.h"

int main()
{
   f1();
   return 0;
}


代码:
$ g++ f1.c test.cxx

编译ok


_________________
爱喝真猪奶茶的夜鸣猪


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-06-20 14:07 
头像

注册: 2007-03-13 17:26
帖子: 2254
送出感谢: 0 次
接收感谢: 1
c++ 编译器才认识 extern "C" , 有 __cplusplus , 所以用这个预处理一下


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-06-20 14:35 
头像

注册: 2008-03-31 16:12
帖子: 94
送出感谢: 0 次
接收感谢: 0 次
编译通过。谢谢nobrain
是这样的:
因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++会自动调用gcc,二者等价。

原因在于链接的时候,而不是在编译的时候。
可以查看一下这个文章,个人感觉写得听详细的。
gcc g++
http://www.yuanma.org/data/2007/0406/article_2498.htm


best wishes.


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译