extern C 淺析
阿新 • • 發佈:2018-12-22
one.h檔案
#pragma once #include<stdio.h> void show();
one.c檔案
#include"one.h" void show() { printf("我是C語言中實現的show函式\n"); }
main.cpp檔案
#include<iostream> #include"one.h" using namespace std; int main() { show(); //呼叫C語言中的函式 return 0; }
會報錯,“無法解析的外部符號 "void __cdecl show(void)" (
[email protected]@YAXXZ),該符號在函式 _main 中被引用”。在C++中函式是可以發生過載的,編譯器會將這個函式名偷偷換掉,但是C語言沒有函式過載這個機制,就導致C++檔案呼叫C檔案中的方法出現問題
解決辦法1:,改動main.cpp檔案
#include<iostream> //#include"one.h" using namespace std; extern "C" void show();//加上這樣一行程式碼 int main() { show(); //呼叫C語言中的函式 return 0; }
解決辦法2,修改one.h檔案
#pragma once #ifdef __cplusplus extern "C" { #endif #include<stdio.h> void show(); #ifdef __cplusplus } #endif