Update README.md

示例常规做法及其原因。
This commit is contained in:
守望 2020-07-24 18:53:52 +08:00 committed by GitHub
parent bb139ef419
commit 0c337b49cf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -99,6 +99,21 @@ gcc -c add.c
g++ add.cpp add.o -o main
```
而通常为了C代码能够通用即既能被C调用又能被C++调用,头文件通常会有如下写法:
```c
#ifdef __cplusplus
extern "C"{
#endif
int add(int x,int y);
#ifdef __cplusplus
}
#endif
```
即在C++调用该接口时会以C接口的方式调用。这种方式使得C++者不需要额外的extern C而标准库头文件通常也是类似的做法否则你为何不需要extern C就可以直接使用stdio.h中的C函数呢
上述案例源代码见:
- [add.h](extern_c++/add.h)
@ -191,3 +206,5 @@ int add(){
extern int add();
```
不过与C++调用C接口不同C++确实是能够调用编译好的C函数而这里C调用C++不过是把C++代码当成C代码编译后调用而已。也就是说C并不能直接调用C++库函数。