C語言編程之extern "C"
1.被extern 「C」限定的函數或變數是extern類型的;
2.被extern 「C」修飾的函數或變數是按照C語言編譯和鏈接的。
C++和C在編譯時的區別:
C++支持函數重載,而C不支持。
例如:函數 viod foo(int x, inty);在C++中編譯后在符號庫中的名字是_foo_int_int,而C編譯後生成的名字是_foo.
一句話概括extern 「C」的目的:
實現C++和C及其他語言的混合編程。
具體用法:
1.在C++中引用C語言中的函數和變數,在包含C語言頭文件是,需進行下列處理:
extern "C"
{
#include "cExample.h"
}
2.在C中引用C++語言中的函數和變數,C++頭文件中需添加extern 「C」,而在C語言中不能直接引用聲明了extern「C」的頭文件,而應該僅將C文件中在C++中定義的extern 「C」函數聲明為extern類型
Advertisements
例如:
C++頭文件
#ifndef CPP_EXAMPLE_H
#define CPP_EXAMPLE_H
extern "C" int add(int x, int y);
#endif
C++實現文件cpp_Example.cpp
#include "cppExample.h"
int add(int x, int y)
{
return x + y;
}
C 實現函數Cfile.c
extern int add(int x, int y)
int main(int argc, char* argv[])
{
add(2, 3);return 0;;
}