c代码和c++代码互相调用

note

不管是c代码调用c++代码,还是c++代码调用c代码,本质上都是g++兼容gcc的功能

c++代码调用c代码

c代码和c++代码互相调用_第1张图片

lib.h

#ifndef _LIB_H_

void libfun(void);

#endif

lib.c

#include 
#include "lib.h"

void libfun(void) {
	printf("this is in libfun\n");

}

main.hpp

#pragma once

#ifdef __cplusplus	// 若当前是cpp编译器
extern "C" {	// 如下是c规则的数据类型声明,函数声明
	#include "lib.h"	// 数据类型定义和函数声明放在头文件里了
#endif

#ifdef __cplusplus
}
#endif

main.cpp

#include "main.hpp"

int main() {

	libfun();
	return 0;
}

makefile

main.exe:lib.o main.o
	g++ $^ -o $@
lib.o:lib.c
	gcc -c $< -o $@
main.o:main.cpp
	g++ -c $< -o $@

.PHONY:clean
clean:
	rm -f *.o *.exe

c代码调用c++代码

c代码和c++代码互相调用_第2张图片

 fun.cpp

#include "fun.hpp"
#include 
using std::cout;

void Fun::fun(void) {
	cout << "this is in Fun::fun\n";
}


void call_me(void) {
	Fun f;
	f.fun();
}

fun.hpp


#pragma once

class Fun {
public:
	void fun(void);

};


#ifdef __cplusplus
extern "C" {
void call_me(void);	// 对外声明c接口
#endif

#ifdef __cplusplus
}
#endif

main.c

extern void call_me(void);


int main(void) {
	call_me();
	return 0;
}

makefile


# 重点:c代码调用c++代码在链接时一定要使用g++编译器,所以本质上还是g++兼容了gcc

main.exe:fun.o main.o
	g++ $^ -o $@

fun.o:fun.cpp
	g++ -std=c++11 -c $< -o $@

main.o:main.c
	gcc -c $< -o $@

.PHONY:clean
clean:
	rm -f *.o *.exe

你可能感兴趣的:(linux系统编程,c++,c语言,linux)