乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      宏定義VC

       喜歡站在山上 2022-03-16
      (一)剛接觸到MFC編程的人往往會被MFC 向導生成的各種宏定義和預處理指令所嚇倒,但是預處理和宏定義又是C語言的一個強大工具。使用它們可以進行簡單的源代碼控制,版本控制,預警或者完成一些特殊的功能。但常用的并不多!
      在VC.Net 普遍使用的預處理指令:
      #pragma once
      //只要在頭文件的最開始加入這條指令就能夠保證頭文件被編譯一次
      //傳統(tǒng)的解決辦法是使用#ifdef 以及#endif 來避免頭文件的重復編譯
      ## 連接符與# 符
      ## 連接符號由兩個井號組成,其功能是在帶參數(shù)的宏定義中將兩個子串(token)聯(lián)接起來,從而形成一個新的子串。但它不可以是第一個或者最后一個子串。所謂的子串(token)就是指編譯器能夠識別的最小語法單元。具體的定義在編譯原理里有詳盡的解釋,但不知道也無所謂。同時值得注意的是#符是把傳遞過來的參數(shù)當成字符串進行替代。

      (二)預編譯指令的用法

       預處理指令是以#號開頭的代碼行.。
      下面是部分預處理指令:
              指令             用途
               #           空指令,無任何效果
               #include    包含一個源代碼文件
               #define     定義宏
               #undef      取消已定義的宏
               #if         如果給定條件為真,則編譯下面代碼
               #ifdef      如果宏已經定義,則編譯下面代碼
               #ifndef     如果宏沒有定義,則編譯下面代碼
               #elif       如果前面的#if給定條件不為真,當前條件為真,則編譯下面代碼
               #endif      結束一個#if……#else條件編譯塊
               #error      停止編譯并顯示錯誤信息
      一、文件包含
          #include預處理指令的作用是在指令處展開被包含的文件。
      二、宏
          宏定義了一個代表特定內容的標識符。預處理過程會把源代碼中出現(xiàn)的宏標識符替換成宏定義時的值。
      1).宏最常見的用法是定義代表某個值的全局符號。
      2).宏的第二種用法是定義帶參數(shù)的宏,這樣的宏可以象函數(shù)一樣被調用,但它是在調用語句處展開宏,并用調用時的實際參數(shù)來代替定義中的形式參數(shù)。
          1.#define指令
              #define預處理指令是用來定義宏的。
      該指令最簡單的格式是:首先神明一個標識符,然后給出這個標識符代表的代碼。在后面的源代碼中,就用這些代碼來替代該標識符。這種宏把程序中要用到的一些全局值提取出來,賦給一些記憶標識符。     
              宏表示的值可以是一個常量表達式,其中允許包括前面已經定義的宏標識符。
              宏還可以代表一個字符串常量,例如:
                  #define VERSION 'Version 1.0 Copyright(c) 2003'
          2.帶參數(shù)的#define指令
              帶參數(shù)的宏和函數(shù)調用看起來有些相似。
          3.#運算符
              出現(xiàn)在宏定義中的#運算符把跟在其后的參數(shù)轉換成一個字符串。有時把這種用法的#稱為字符串化運算符。
          4.##運算符
              ##運算符用于把參數(shù)連接到一起。預處理程序把出現(xiàn)在##兩側的參數(shù)合并成一個符號。   

      三、條件編譯指令
          條件編譯指令將決定那些代碼被編譯,而哪些是不被編譯的??梢愿鶕?jù)表達式的值或者某個特定的宏是否被定義來確定編譯條件。
          1.#if指令
              #if指令檢測跟在制造另關鍵字后的常量表達式。如果表達式為真,則編譯后面的代碼,知道出現(xiàn)#else、#elif或#endif為止;否則就不編譯。
          2.#endif指令
              #endif用于終止#if預處理指令。
          3.#ifdef和#ifndef     
          4.#else指令
              #else指令用于某個#if指令之后,當前面的#if指令的條件不為真時,就編譯#else后面的代碼。
          5.#elif指令
              #elif預處理指令綜合了#else和#if指令的作用。
          6.其他一些標準指令
              #error指令將使編譯器顯示一條錯誤信息,然后停止編譯。
              #line指令可以改變編譯器用來指出警告和錯誤信息的文件號和行號。
              #pragma指令沒有正式的定義。編譯器可以自定義其用途。典型的用法是禁止或允許某些煩人的警告信息。
      (三)#Pragma宏
      (四)C語言頭文件聲明

      在我們查看別人的源程序的時候,經常會看到別人的源碼頭文件中有一些比較奇怪的代碼,這些代碼使用來干什么的呢?比如下面這個例子:

      • 宏定義 __C_LOG_H__
          上述代碼中的#ifndef __C_LOG_H__ 用來判斷是否我們已經定義呢宏__C_LOG_H__, 如果沒有定義則我們定義宏__C_LOG_H__,否則這個頭文件在編譯時候會變成一個空文件.由于有了這個宏判斷,我們在以后的所有源代碼中就可以重復的包含這個頭文件,而不用擔心頭文件中的一些信息的重復定義. 
      • 宏定義 __cplusplus
          上述代碼中的#ifdef __cplusplus 用來判斷當前使用的編譯器是C++編譯器還是C編譯器.如果使用C++編譯器則會自動定義這個宏,否則不會定義.如果是C++編譯器我們后面增加了 extern 'C' {以及后面的}用來表示我們的代碼是C語言代碼,這樣通過C++編譯器編譯出來的函數(shù)庫我們在C語言中也可以使用. 
      • 結構定義CLog
          上述代碼中的typedef struct _CLog CLog可以用力隱藏結構CLog的內部情況.這樣我們可以在源代碼中指明CLog的結構成員.而在其它源代碼中看不到這個結構的各個成員,起到對結構的隱藏作用

      (五)VC注釋宏的作用

      “注釋宏”是類似這樣的宏:
      //}}AFX_MSG_MAP
      VC注釋宏是給類向導用的,若要使用類向導添加成員變量和成員函數(shù),則要保留注釋宏;否則,必須手動添加。
      是用于vc編輯器自動生成代碼定位用的如果你把它刪了相應的classwizad就不能自動生成代碼了 。
      你添加消息響應的時候是不是發(fā)現(xiàn)源代碼里多了些代碼?那些代碼為什么會在那里出現(xiàn)為什么不在別的文件里出現(xiàn)就是因為那里有注釋宏它要將代碼生成在相應注釋宏之間 。
      這個注釋是讓ClassWizard能夠分辨出哪些代碼是它生成的,哪些是你自己寫的。你自己寫的代碼要在這個注釋之外,這樣ClassWizard再修改消息映射的時候就不會管你的代碼了。
      限于以前的硬件速度,ClassWizard比較傻冒,所以需要這些注釋宏來定位。從7.0(Visua Studio 2003)l開始,就不再需要了。新的屬性頁能夠自動分析你的代碼,為你添加或者刪除代碼,而無需什么特殊標記的幫忙。因此注釋宏已經是歷史產物了。

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多