<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ivaneeo's blog

    自由的力量,自由的生活。

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
    1.關于可移植性
    #ifdef __STRICT_ANSI__
    /* use ANSI/ISO C only here */
    #else
    /* use GNU extensions here */
    #endif
    如果用戶或是ANSI兼容的編譯器定義了__STRICT_ANSI__宏,則表明需施加ANSI兼容的環境,并編譯#ifdef語句塊的第一部分代碼.否則,編譯#else后面的代碼.
    2.GNU擴展
      gcc使用long long 類型來提供64位儲存單元:
      long long long_int_var;
    內聯函數
      要使用內聯函數,需在函數的返回類型前面插入關鍵字inline,如下面的代碼片段所示,還要在編譯時使用-O優化選項.
      inline void swap(int *a, int *b)
      {
        int tmp = *a;
        *a = *b;
        *b = tmp;
      }
    函數和變量屬性
      關鍵字attribute通過向gcc指明有關代碼的更多信息來幫助代碼優化工作進行得更好.例如,標準庫函數exit和 abort都不返回調用它們的函數.編譯器如果知道它們不返回就能生成效率稍高的代碼.當然用戶程序也能定義不返回的函數.gcc允許為這些函數指定 noreturn屬性,作為編譯器在優化該函數時的提示.
      
    例如,假設有個沒有返回的函數die_on_error.為了使用函數屬性,可以在函數聲明后面加上__attribute__((attribute_name)).于是函數die_on_error的聲明如下:
      void die_on_error(void) __attribute__ ((noreturn));
    函數還和平常一樣來定義:
      #include <stdlib.h>
      void die_on_error(void)
      {
        /* your code here */
        exit(EXIT_FAILURE);
      }

    也可以對變量指定屬性.例如,aligned屬性指示編譯器在為變量分配內存空間時按指定字節數對齊邊界.下列語句:
      int int_var __attribute__ ((aligned 16)) = 0;
    使gcc讓變量int_var的邊界按16字節對齊.packed屬性告訴gcc為變量或結構分配最小的內存空間.

    如果想要關閉對未用變量發出的所有警告,那么可以對變量使用unused屬性,它告訴編譯器該變量不準備使用.下面的變量聲明會消除警告:
      float big_salary __attribute__ ((unused));

    使用case區間
    case區間是一個非常有用的擴展.其語法如下:
      case LOWVAL ... LOWVAL:
    注意,在省略號前后必須有空格.在switch語句中,case區間指定了落在LOWVAL和HIVAL區間內的那些整數值.例如:
      switch(int_var) {
      case 0 ... 2:
        /* your code here */
        break;
      case 3 ... 5:
        /* more code here */
        break;
      default:
        /* default code here */
      }

    構造函數名稱
      把函數名用作字符串是GNU的擴展,它能極大地簡化調試工作.gcc預先定義了變量__FUNCTION__為當前函數(控制流程當前所在的位置)的名字,就好像它被寫在源代碼里去了一樣.

    使用__FUNCTION__變量
    /*
    *  showit.c - Illustrate using the __FUNCTION__ variable
    */
    #include <stdio.h>

    void foo(void);

    int main(void)
    {
      printf("The current function is %s\n", __FUNCTION__);
      foo();
      return 0;
    }

    void foo(void)
    {
      printf("The current function is %s\n", __FUNCTION__);
    }
    posted on 2005-08-04 21:55 ivaneeo 閱讀(625) 評論(0)  編輯  收藏 所屬分類: gcc小試牛力
    主站蜘蛛池模板: 免费国产在线观看| 免费观看美女裸体网站| 亚洲中文字幕无码久久2017| 香蕉视频免费在线播放| 亚洲Aⅴ无码一区二区二三区软件| 亚洲成a人无码亚洲成www牛牛| 啦啦啦中文在线观看电视剧免费版| 亚洲一级免费毛片| 九九精品免费视频| 亚洲熟妇AV一区二区三区宅男| 全免费a级毛片免费看无码| 亚洲国产成人久久综合| 国产网站免费观看| a级毛片免费观看网站| 亚洲成a人片77777kkkk| 69av免费观看| 亚洲最大天堂无码精品区| 国产极品粉嫩泬免费观看| 色视频在线观看免费| 国产亚洲精品影视在线产品| 精品四虎免费观看国产高清午夜| 亚洲综合在线观看视频| 免费影院未满十八勿进网站| 亚洲精品国产av成拍色拍| 亚洲高清国产拍精品青青草原| 中文字幕无线码中文字幕免费 | 日韩在线视频线视频免费网站| 久久久久亚洲精品男人的天堂| 水蜜桃视频在线观看免费播放高清| 亚洲综合日韩中文字幕v在线| 免费av欧美国产在钱| 九九视频高清视频免费观看| 国产亚洲一区二区三区在线| 午夜性色一区二区三区免费不卡视频| 中文字幕在线观看亚洲日韩| 亚洲国产天堂久久久久久| 99视频免费观看| 在线观看亚洲专区| 亚洲人成电影亚洲人成9999网| 免费视频中文字幕| 欧洲人成在线免费|