天天看點

C筆記

1、#if 0/#if 1 ... #endif

        C标準不提供C++裡的“//”這樣的單行風格注釋而隻提供“”這樣的塊注釋功能,我們通常使用它寫代碼中說明性的注釋文字(注釋作用)以及在調試時關閉某段代碼對編譯器的可見性(屏蔽作用),當然,這裡所謂的“注釋作用”和“屏蔽作用”是我們從功能上下的主觀定義,對預處理器而言,兩者并無任何差別。對于前者,因為“注釋”中不會再出現“注釋”和“需要屏蔽的代碼段”,是以不會有嵌套的需求,是以通常不會有問題;而對于後者,當我們在調試程式時需要“屏蔽”某段代碼時,該段代碼中可能包含着前述的“注釋”和/或“已被屏蔽的代碼段”,這時就産生了“”嵌套使用的需求,但C标準恰恰不允許我們這麼幹。當你試圖使用嵌套的塊注釋功能時,會發現預處理器把最外層注釋的開始和最内層注釋的結尾這兩者之間的内容處理成了注釋,而其後一直到最外層注釋結尾的内容被當作了“有效代碼”——這顯然會引起若幹文法錯誤而導緻編譯中止。高手們開動腦筋想到了“#if 0 ... #endif”,它同樣由預處理器進行處理,同樣可以“屏蔽”一段代碼,你想把說明文字寫在裡面也可以,這些和“”都一樣,但不一樣的是:第一它允許嵌套(層數上限由預處理器決定)、第二你随時可以把“#if 0”改成“#if 1”來取消對某段代碼的“屏蔽”——很卓越的特性,快抛棄笨拙的“”吧!它唯一的缺點就是在編輯器中沒有“注釋”該有的文本顯示樣式

摘自:https://www.cnblogs.com/MichaelOwen/articles/2128733.html

2、#ifdef __cplusplus

        extern "C" {

        #endif

               n個函數;

      #ifdef __cplusplus

      }

      #endif

個人了解,如有問題請更正:

  • 如果在C項目中引用,則不需要用extern “c”,可以了解為下列意思

    #ifdef 0

        extern "C" {

        #endif

               n個函數;

      #ifdef 0

      }

      #endif     此時n個函數裸露在外邊,全等于: n個函數;

  • 如果在C++項目中,此時__cplusplus可以了解為1,則 extern "C" {    與    }   同時生效:

    #ifdef 1

        extern "C" {

    #endif

               n個函數;

      #ifdef 1

      }

      #endif                                              全等于:  extern "C" { n個函數;}

3、怕結構體變量或其他變量在其他檔案中重定義,解決辦法:

         #ifndef  DEFINED_TYPEDEF_FOR_大寫變量名

         #define DEFINED_TYPEDEF_FOR_大寫變量名

         #endif

     例如: 結構體 typedef struct _tag_Student{ 

                                                                            int  num

                                                                            int  Age

                                                                            int  ID}

                可以這樣定義:

                                         #ifndef DEFINED_TYPEDEF_FOR_STUDENT

                                         #define DEFINED_TYPEDEF_FOR_STUDENT

                                         typedef struct _tag_Student{ 

                                                                            int  num

                                                                            int  Age

                                                                            int  ID}

                                            #endif