C/C++ 語言裡extern “C” 的作用介紹

C/C++ 語言裡extern “C” 的作用介紹

C/C++ 語言裡extern “C” 的作用介紹


資料來源: https://mp.weixin.qq.com/s?__biz=MzA3MTU1MzMzNQ==&mid=2247486572&idx=1&sn=33c46d72b483acae3172bd9fe7fdaeb7&chksm=9f2a9434a85d1d22bbf452f1406d0c210c9b025e1a3b530913e8b1b4a36c344b3a7bba294384&scene=126&sessionid=1598833135&key=baed9475c9f7eb8b2406512a3c70d1a64ed2190f9d3e54a96c5a26e55dd591ade5a6056107ab835e6eaa1f288a70db19d4ba2d210fd83a7cf648da6cf429c7e4920ae545ee2e2e4e53a8ee715d4e7e7d6395b15473d59da217d199f00fb683c1ddb3d7f6e639fcfd2f43032422dc2afea9db55a4483900fabada943b9b0d58e8&ascene=1&uin=MjIwODk2NDgxNw%3D%3D&devicetype=Windows+10+x64&version=62090529&lang=zh_TW&exportkey=Ajpuh5l14B5mHmev9YXaZNM%3D&pass_ticket=HWH0ihBWA2sCHd8WHMJN93RqHaWxZZ8W9JwPA6FItqxvyh%2BDmBkh5j9TDdMo8G6c

特性:

C    函數名可以作為唯一ID和代碼段的程序建立聯繫

C++  因為重載的關係,函數名符號會被破壞,從而會根據函數的參數不同而重新生成函數符號


未使用extern語法

test.h

#ifndef TEST_H
#define TEST_H

void foo1(void);
void foo2(void);
void foo3(int i);

#endif

test.c

void foo1(void){}
void foo2(void) {}
void foo3(int i){}

int main(int argc,char** argv)
{
	foo1();
	foo2();
	foo3(1); 
	return 0;
}

使用C++編譯

g++ -c test.c test.h
objdump -t test.o


——–


使用extern語法

test.h

#ifndef TEST_H
#define TEST_H

#ifdef __cplusplus
extern "C" {
#endif

void foo1(void);
void foo2(void);
void foo3(int i);

#ifdef __cplusplus
}
#endif

#endif

test.c


#ifdef __cplusplus
extern "C" {
#endif

void foo1(void){}
void foo2(void) {}
void foo3(int i){}

#ifdef __cplusplus
}
#endif

int main(int argc,char** argv){
 
	foo1();
	foo2();
	foo3(1); 
	return 0;
}

使用C++編譯

g++ -c test.c test.h
objdump -t test.o

2 thoughts on “C/C++ 語言裡extern “C” 的作用介紹

  1. 終於知道開發C/C++開發 DLL(SO) 函示庫
    為何一定都要使用extern “C”語法了

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *