Skip to content

Commit 0c337b4

Browse files
authored
Update README.md
示例常规做法及其原因。
1 parent bb139ef commit 0c337b4

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

basic_content/extern/README.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,21 @@ gcc -c add.c
9999
g++ add.cpp add.o -o main
100100
```
101101

102+
而通常为了C代码能够通用,即既能被C调用,又能被C++调用,头文件通常会有如下写法:
103+
104+
```c
105+
#ifdef __cplusplus
106+
extern "C"{
107+
#endif
108+
int add(int x,int y);
109+
#ifdef __cplusplus
110+
}
111+
#endif
112+
```
113+
114+
即在C++调用该接口时,会以C接口的方式调用。这种方式使得C++者不需要额外的extern C,而标准库头文件通常也是类似的做法,否则你为何不需要extern C就可以直接使用stdio.h中的C函数呢?
115+
116+
102117
上述案例源代码见:
103118
104119
- [add.h](extern_c++/add.h)
@@ -191,3 +206,5 @@ int add(){
191206
extern int add();
192207
```
193208

209+
210+
不过与C++调用C接口不同,C++确实是能够调用编译好的C函数,而这里C调用C++,不过是把C++代码当成C代码编译后调用而已。也就是说,C并不能直接调用C++库函数。

0 commit comments

Comments
 (0)