<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 閱讀(615) 評論(0)  編輯  收藏 所屬分類: gcc小試牛力
    主站蜘蛛池模板: 亚洲av片一区二区三区| 亚洲激情视频网站| 99视频有精品视频免费观看| 亚洲a级在线观看| 亚洲成人国产精品| 最近免费字幕中文大全视频| 国产av无码专区亚洲av毛片搜 | 亚洲国产精品无码久久九九| 黄页免费在线观看| 亚洲hairy多毛pics大全| 久久亚洲国产中v天仙www| 在线观看成人免费| 免费视频一区二区| 国产AV日韩A∨亚洲AV电影| 亚洲综合免费视频| 久久久久无码专区亚洲av| 免费无码AV电影在线观看| 最近免费mv在线观看动漫| 久久人午夜亚洲精品无码区| 777亚洲精品乱码久久久久久| 亚洲国产成人乱码精品女人久久久不卡 | 精品免费久久久久久成人影院| 99在线热播精品免费99热| 亚洲男人的天堂网站| 亚洲综合在线观看视频| 亚洲福利精品一区二区三区| 永久免费毛片在线播放| 免费视频精品一区二区三区| 日日狠狠久久偷偷色综合免费| 亚洲a级在线观看| 中文字幕亚洲综合精品一区| 国产亚洲色视频在线| 国产小视频免费观看| 91在线手机精品免费观看| 中国好声音第二季免费播放| 国产精品自拍亚洲| 一区二区亚洲精品精华液| 亚洲成无码人在线观看| 亚洲欧洲第一a在线观看| 亚洲色婷婷一区二区三区| 亚洲午夜无码片在线观看影院猛 |