Chinaunix

标题: 请教在头文件中加入extern "C" {} 是什么意思? [打印本页]

作者: lylzp    时间: 2004-01-08 14:50
标题: 请教在头文件中加入extern "C" {} 是什么意思?
我有一个朋友在VC++下搞开发。

在他的工程里有.c为后缀的文件(即c文件),他在.ccp的文件中调用这个c文件中的函数(包含.c的头文件,然后用里面的函数),编译的时候可以通过,但链接的时候会提示”unresolved external symbol 函数名“(即没有找到c中的函数体)。

后面我叫他在c的头,用下面的方式来定义函数,就通过了:



  1. #ifdef  __cplusplus
  2. extern "C" {
  3. #endif

  4. //在此处定义函数

  5. #ifdef  __cplusplus
  6. }
  7. #endif
复制代码


现在我虽知道这样用,但我并不知道是什么意思,那位大侠能说说吗?
作者: lenovo    时间: 2004-01-08 14:53
标题: 请教在头文件中加入extern "C" {} 是什么意思?
就是为了在c++中引用c的库函数,才这样定义的。
因为c++的编译器会对函数名和变量名做一些修正,
如果也对c中的函数名和变量名也做修正,就会出现上述问题。
这样定义后,c++编译器知道这是c中的函数名和变量名,不会
对它们做修正,就可以正常使用了。
作者: lonemoon    时间: 2004-01-08 14:58
标题: 请教在头文件中加入extern "C" {} 是什么意思?
高,实在是高
我也明白个大概的意思,可就是不知道该怎么叙述,结果被联想兄几句话就搞定了,看来联想兄的语文水平也很高!
作者: lylzp    时间: 2004-01-08 15:01
标题: 请教在头文件中加入extern "C" {} 是什么意思?
原帖由 "lenovo" 发表:
就是为了在c++中引用c的库函数,才这样定义的。
因为c++的编译器会对函数名和变量名做一些修正,
如果也对c中的函数名和变量名也做修正,就会出现上述问题。
这样定义后,c++编译器知道这是c中的函数名和变量名,..........


谢谢lenovo!

我刚才翻了一下书,还发现__cplusplus是用来判断用的是c还是c++编译器的。



  1. #ifdef _cplusplus
  2.   //是表示用C++编译器
  3. #else
  4.   //是表示用C编译器
  5. #endif
复制代码

作者: lenovo    时间: 2004-01-08 15:03
标题: 请教在头文件中加入extern "C" {} 是什么意思?
原帖由 "lonemoon" 发表:
高,实在是高
我也明白个大概的意思,可就是不知道该怎么叙述,结果被联想兄几句话就搞定了,看来联想兄的语文水平也很高!

过奖过奖,感觉还是没书上说得清楚。
其实你去看看/usr/include下的头文件,就会发现
有这样的声明形式。
#ifdef  __cplusplus
extern "C" {
#endif

//在此处定义函数

#ifdef  __cplusplus
}
#endif
所以标准库的函数不用我们自己做这样的声明的。
作者: 蓝色键盘    时间: 2004-01-08 16:14
标题: 请教在头文件中加入extern "C" {} 是什么意思?
回答的很不错

鼓励一下
作者: lenovo    时间: 2004-01-08 16:16
标题: 请教在头文件中加入extern "C" {} 是什么意思?
原帖由 "蓝色键盘" 发表:
回答的很不错

鼓励一下

谢谢鼓励!   
作者: 五月    时间: 2004-01-08 21:35
标题: 请教在头文件中加入extern "C" {} 是什么意思?
感情是书看的不够仔细,C++的书不会不说这件事
作者: lylzp    时间: 2004-01-09 11:36
标题: 请教在头文件中加入extern "C" {} 是什么意思?
[quote]原帖由 "五月"]感情是书看的不够仔细,C++的书不会不说这件事[/quote 发表:


你说的也没错,我身边也有C++的书,并且MSDN上也有这个资料。

我发表出来问并不只为我自己,也想让更多的人知道这个东西而已!
作者: lenovo    时间: 2004-01-09 11:43
标题: 请教在头文件中加入extern "C" {} 是什么意思?
嘿嘿,有些书不会说这些事情的。
作者: zhhui2000    时间: 2004-01-09 14:45
标题: 请教在头文件中加入extern "C" {} 是什么意思?
Thanks!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2