C語言學習筆記(11)

來源:互聯網
上載者:User

1. 條件編譯

條件編譯是指預先處理根據測試的結果來包含或排除程式的片段。

2. #if和#endif

也不多說,舉個例子就懂了。

#define DEBUG    1int main (void){#if DEBUG    printf("Hello world");#endif    return 0;}

其實效果就是類似於這樣的代碼:

int main (void){    int debug=1;    if(debug)        printf("Hello world");    return 0;}

不同的是:預先處理命令是由前置處理器來處理。#if指令會測試DEBUG的值,如果DEBUG的值是0,那麼這個printf就不會儲存在目標程式中佔用空間,也不會消耗程式的運行時時間。因此,我們在測試時可以將這段代碼儲存到最終代碼中。

3. 一些相似的條件編譯符號

defined運算子通常與#if聯合使用,來判斷某宏定義是否被定義。

#define DEBUG    1int main (void){#if defined DEBUG    printf("Hello world");#endif    return 0;}

與其同樣語義的還可以這樣來寫:

#define DEBUG    1int main (void){#ifdef DEBUG    printf("Hello world");#endif    return 0;}

當然,還有#ifndef代表if not defined的語義。

#elif:else if

#else。

這些都是可以與#if配合使用的,和一般的條件判斷語義一樣。不再重複舉例子。

4. 條件編譯的用處

A. 調試。

B. 編寫不同作業系統,不同平台,不同編譯器使用的程式。

例如:

#define WINDOWSint main (void){#if defined WINDOWS    printf("WINDOWS");#elif defined LINUX    printf("LINUX");#else     printf("ELSE");#endif    return 0;}

C. 臨時屏蔽代碼

5. #error指令

遇到#error意味著遇到了比較嚴重的錯誤,編譯器會立即終止程式,例如:

int main (void){#if defined WINDOWS    printf("WINDOWS");#elif defined LINUX    printf("LINUX");#else     #error Not Support#endif    return 0;}

6. 託管式實現和獨立式實現

這是一個基礎的概念。

大部分程式都是託管式實現,這些程式都需要底層的作業系統來提供輸入輸出以及其他的一些基本服務,而C的獨立式實現用於不需要作業系統的程式。

一般來說,獨立式程式用於編寫作業系統核心以及嵌入式程式。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.