條件編譯與extern C

2021-08-04 03:54:43 字數 944 閱讀 5245

一,條件編譯

1,#ifdef如果巨集已經定義,則編譯下面**

2,#ifndef如果巨集沒有定義,則編譯下面**

3,#define定義巨集

4,#endif結束乙個#if……#else條件編譯塊

為了避免那些只能包含一次的標頭檔案被多次包含,可以在標頭檔案中用編譯時條件來進行控制。可以使用下面的形式

#ifndef _my_h_

#define _my_h_

要包含的內容,比如一些函式宣告,一些結構體定義等。

#endif

二,extern  "c"

一般的標準標頭檔案都包含下面這些結構

#ifndef __test

#define __test

#ifdef __cplusplus

extern "c"

#endif

#endif /* __test */

c++支援函式過載,而c則不支援。函式被c++編譯器編譯後在符號表中的名字與c語言的不同。例如,假設某個函式的原型為: 

void test(int a, int b);
該函式被c編譯器編譯後在符號表

中的名字為_foo,而c++編譯器則會產生像_foo_int_int之類的名字。_foo_int_int這樣的名字包含了函式名和函式的特徵標,c++就是使用這種機制來實現函式過載的。

為了實現c和c++的混合程式設計,c++提供了c連線交換指定符號extern "c"來解決名字匹配問題,函式宣告前加上extern "c"後,則編譯器就會按照c語言的方式將該函式編譯為_foo,這樣c語言中就可以呼叫c++的函式了。

條件編譯 if

1 為什麼需要條件編譯 客戶的需求在不停地發生變化,一會兒需要這個功能,一會兒不需要這個功能。我們可以使用條件編譯來方便地裁剪功能。2 條件編譯語句 if 條件編譯語句 if的形式是 1 if expression 2.3 elif expression 4.5 elif expression 6....

if 條件編譯

1.格式 if constant expressionstatements elif constant expressionstatements else statements endif 其中 constant expression 常量表示式 字面值常量,或者乙個有 define定義的符號 由預...

條件編譯 if

1 為什麼需要條件編譯 客戶的需求在不停地發生變化,一會兒需要這個功能,一會兒不需要這個功能。我們可以使用條件編譯來方便地裁剪功能。2 條件編譯語句 if 條件編譯語句 if的形式是 1 if expression 2.3 elif expression 4.5 elif expression 6....