请求extern "C"的例子

软件和网站开发以及相关技术探讨
回复
头像
zongzw
帖子: 94
注册时间: 2008-03-31 16:12
送出感谢: 0
接收感谢: 0

请求extern "C"的例子

#1

帖子 zongzw » 2008-06-20 11:44

网上看到很多人谈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

如果是我编译的问题,请帮忙指正
如果是网上这篇文章内容的错误,在此呼吁所有的热心人一定确保自己所发的内容的正确性。
或者两者都不是,类似兼容性的问题。。
头像
nobrain
帖子: 808
注册时间: 2005-08-25 13:58
来自: ustc
送出感谢: 0
接收感谢: 0
联系:

#2

帖子 nobrain » 2008-06-20 13:02

我一般这么做:

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
爱喝真猪奶茶的夜鸣猪
头像
windwiny
帖子: 2254
注册时间: 2007-03-13 17:26
送出感谢: 0
接收感谢: 1 次

#3

帖子 windwiny » 2008-06-20 14:07

c++ 编译器才认识 extern "C" , 有 __cplusplus , 所以用这个预处理一下
头像
zongzw
帖子: 94
注册时间: 2008-03-31 16:12
送出感谢: 0
接收感谢: 0

#4

帖子 zongzw » 2008-06-20 14:35

编译通过。谢谢nobrain
是这样的:
因为gcc命令不能自动和C++程序使用的库联接,所以通常使用g++来完成联接。但在编译阶段,g++会自动调用gcc,二者等价。

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


best wishes.
回复

回到 “软件/网站开发”