1. 程式人生 > >extern C 淺析

extern C 淺析

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