C 原始檔包含C原始檔(C 中如何使用C)

2021-08-07 11:36:38 字數 1218 閱讀 2896

如下**:

/*c語言標頭檔案:max.h*/

#ifndef _max_h_

#define _max_h_

int max(int na,int nb)

#endif

/*c語言實現檔案:max.c*/

#include "max.h"

int max(int na,int nb)

/*c++語言呼叫檔案*/

#include "max.h"

int _tmain(int argc,char* argv)

上述**在visual c++中編譯會出錯(error lnk2019:無法解析的外部符號"int __cdecl max(int,int)"(?max@@yahhh@z),該符號在函式_wmain中被引用

如果把上述的max.h**修改如下:

/*c語言標頭檔案*/

#ifndef __max_h__

#define __max_h__

#ifdef __cplusplus

extern "c";

#endif

#endif

編譯通過

結論:在c++中呼叫c的**必須把原來的c語言宣告放到extern "c"中,否則在c++中無法編譯通過

例如:假如某一函式原型為:int func(int na,int nb)

c語言編譯器把函式編譯成類似_func的符號,c鏈結器只要找到這個符號就可以連線成功,實現呼叫。而在c++語言中,編譯器會檢查引數型別和作用域資訊,上述函式原型會編譯成_z_func_int_int這樣的符號。在鏈結過程中,c++鏈結器會在函式原型所在模組生成的目標檔案中查詢__z_func_int_int.

總結:c++中呼叫c**的3種具體實現方式

1.修改c**的標頭檔案,當其被用於c++**時,在宣告中加入exter "c" 上例中在max.h中加入extern "c" int max(int na,int nb);

2.在c++**中(main.cpp)重新宣告一下c函式,在重新宣告時新增extern "c".

#include "max.h"

extern "c" int max(int na,int nb);

3.在包含c標頭檔案(main.cpp)時,新增extern "c".

extern "c"

注意:extern "c" 一定要加在c++的**檔案中才起作用

C 資源檔案

獲取資源檔案 using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.text using system...

c 資源檔案

參考 system.resources命名空間支援三種資源檔案 1 txt檔案,只能有字串資源。因為不能被嵌入到assembly中,所以很容易暴露,被窗戶修改。不可以直接呼叫,得先將其轉換成resources檔案才能使用 2 resx檔案,由xml組成,可以加入任何資源,包括二進位制,同樣不能被嵌入...

c原始檔中要包含自己的標頭檔案

我們經常在c工程中發現,原始檔中要包含自己的標頭檔案。一直以來,都不知道為什麼這樣做。現在,我知道了。我認為,c檔案沒有必要包含自己的.h檔案。h檔案包含.c檔案中定義的函式和全域性變數的宣告,h檔案就是.c檔案提供的對外介面檔案。既然.h檔案就是.c檔案提供的對外介面檔案,那麼.c檔案就沒必要包含...