一個C語言文件p.cios
#include <stdio.h> void print(int a,int b) { printf("這裏調用的是C語言的函數:%d,%d\n",a,b); }
一個頭文件p.hshell
#ifndef _P_H #define _P_H void print(int a,int b); #endif
C++文件調用C函數函數
#include <iostream> using namespace std; #include "p.h" int main() { cout<<"如今調用C語言函數\n"; print(3,4); return 0; }
執行命令spa
gcc -c p.c g++ -o main main.cpp p.o
編譯後連接出錯:main.cpp對print(int, int)未定義的引用。code
編譯後連接出錯:main.cpp對print(int, int)未定義的引用。blog
緣由分析圖片
總結編譯器
修改p.h文件io
#ifndef _P_H #define _P_H extern "C"{ void print(int a,int b); } #endif
修改後再次執行命令編譯
gcc -c p.c g++ -o main main.cpp p.o ./main
運行無報錯
實驗:定義main,c函數以下
#include <stdio.h> #include "p.h" int main() { printf("如今調用C語言函數\n"); print(3,4); return 0; }
從新執行命令以下
gcc -c p.c gcc -o mian main.c p.o
報錯:C語言裏面沒有extern 「C「這種寫法
爲了使得p.c代碼既能被C++調用又能被C調用
將p.h修改以下
#ifndef _P_H #define _P_H #ifdef __cplusplus #if __cplusplus extern "C"{ #endif #endif /* __cplusplus */ void print(int a,int b); #ifdef __cplusplus #if __cplusplus } #endif #endif /* __cplusplus */ #endif /* __P_H */
再次執行命令
gcc -c p.c gcc -o mian main.c p.o ./mian
結果示意: