标签:#ifdef __cplusplus extern “c”{}与c和c++
#ifdef __cplusplus extern C{}与C和C++间的关系
1.1 问题是什么
解决在 1.在一个系统中.cpp文件的函数需要调用.c文件的函数,及需要gcc和g++编译的文件或文件的部分函数在同一个头文件中。
的情况下,如何正确的编译、链接。
1.2 基础知识
Compile the C code like this:
gcc -c -o somecode.o somecode.c
Then the C++ code like this:
g++ -c -o othercode.o othercode.cpp
Then link them together, with the C++ linker:
g++ -o yourprogram somecode.o othercode.o
You also have to tell the C++ compiler a C header is coming when you include the declaration for the C function.
在Linux中.c/.cpp文件分别使用不同的编译方式进行编译,但因为c语言先于c++问世,所以g++的编译、链接兼容.c/.cpp文件;而gcc编译不支持c++函数重定义语法。使用g++编译.c文件时需要通知它,某文件xx.h(xx.h中声明的函数都定义在xx.c文件中)需要gcc编译的或者某文件的某部分需要gcc编译。
1.如果一个project中有.c/.cpp两种文件,那么.c(gcc)/.cpp(g++)分开编译之后使用g++进行链接;
2.如果一个project中的.cpp调用的头文件中含有需要gcc编译的部分,那么需要使用extern “C”{}配合g++编译、链接;
1.3 解决问题的原理
1.__cplusplus是g++编译器中自动默认定义过了,用于说明正在使用g++编译;(也可以在Makefile中重新宏定义 -D cplusplus xx)
2.extern “C” {}的大括号内的code,g++默认识别为需要使用gcc编译。
综合这两点就可以完全的解决1.1中的问题。
#main.h
#ifdef __cplusplus
extern "C" {
#endif
c_function();//需要gcc编译的函数
#ifdef __cplusplus
}
#endif
这样就可以将c_function()函数放入.cpp文件中,使用g++编译该.cpp,c_function()会被按照c语言的语法进行编译。
1.4 参考链接: http://stackoverflow.com/questions/16850992/call-a-c-function-from-c-code?lq=1
http://stackoverflow.com/questions/3789340/combining-c-and-c-how-does-ifdef-cplusplus-work
本文出自 “秋峰少落叶” 博客,请务必保留此出处http://aaroncao.blog.51cto.com/8009152/1582420
#ifdef __cplusplus extern C{}与C和C++间的关系
标签:#ifdef __cplusplus extern “c”{}与c和c++
原文地址:http://aaroncao.blog.51cto.com/8009152/1582420