由於C++編譯器默認都是按照C++的編譯方式來對源文件進行編譯,這樣C語言文件也會直接採用C++編譯。
對於底層的驅動等都會以使用C語言編寫的DLL等給出來,然後從中導出函數給C或C++的模塊來進行訪問,所以還是需要C++語法中能夠標識出來給編譯器,哪些需要採用C++方式編譯,哪些需要採用C方式編譯。
那麼這個編譯區分就由extern "C"來完成,下面我們就以一個例子看看如何使用的。
//FileName : main.c
#include <iostream>
#include <stdio.h>
#include "Cal.h"
int main(int argc, char** argv) {
printf("Cal(int): %d\n",Cal(5));
printf("Cal(float): %.5f\n",Cal(1.1f));
return 0;
}
//FileName : Cal.c
#include "Cal.h"
int Cal(int Val)
{
return Val*Val;
}
float Cal(float Val)
{
return Val*Val;
}
//FileName : Cal.h
#ifndef __CAL_H__
#define __CAL_H__
//extern "C"
//{
int Cal(int Val);
float Cal(float Val);
//}
#endif
以上extern 「C」注釋部分表示的就是Cal.c文件將會以C編譯方式進行,由於C++支持函數重載而C語言不支持函數重載,所以以上源碼可以直接編譯可以通過,而一旦把extern"C"注釋去掉,便會編譯失敗。