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

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

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

    jasmine214--love

    只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
    posts - 731, comments - 60, trackbacks - 0, articles - 0

    從c文件源碼中熟悉C--整理1

    Posted on 2010-12-28 17:40 幻海藍夢 閱讀(331) 評論(0)  編輯  收藏 所屬分類: LinuxC語言學習

     

    第一,#define宏定義,  語法:#define 語義名 代號名,#define預編譯處理命令,主要定義常量,此常量可以為任何的字符及其組合,在編譯之前,將此常量出現的所有位置,用其代表的字符或字符組合無條件 的替換,然后進行編譯。#define CE_STT_FALSE ( 0 )

    條件編譯:#ifndef、(或者#ifndef)#def#endif等宏這幾個宏是為了進行條件編譯。一般情況下,源程序中 所有的行都參加編譯。但是有時希望對其中一部分內容只在滿足一定條件才進行編譯,也就是對一部分內容指定編譯的條件,這就是條件編譯。有時,希望當滿 足某條件時對一組語句進行編譯,而當條件不滿足時則編譯另一組語句。

    #ifdef SINGLE_PROCESS

        #define main(x) main_timer(x)

    #endif

    有人會問:不用條件編譯命令而直接用if語句也能達到要求,用條件編譯命令有什么好處呢?的確,此問題完全可以不用條件編 譯處理,但那樣做目標程序長(因為所有語句都編譯),而采用條件編譯,可以減少被編譯的語句,從而減少目標的長度。當條件編譯段比較多時,目標程序長度可 以大大減少。

     

    第二,typedef類型重命名:為了更加見名知義 ,語法:typedef 原類型 目標類型,typedef是為已知數據類型增加一個新名稱,其原理與使用int double等保留字一致。

    typedef struct

    {

        UCHAR addr[MAC_ADDR_LEN];

    }MAC_ADDR;

     

    第三,導入頭文件到.c文件中:

    #include "sys_common.h"

     

    第四,static 變量和靜態函數,

    C static有了第二種含義:用來表示不能被其它文件訪問的全局變量和函數。但為了限制全局變量/函數的作用域, 函數或變量前加static使得函數成為靜態函數。但此處“static”的含義不是指存儲方式,而是指對函數的作用域僅局限于本文件(所以又稱內部函 數)。注意此時, 對于外部(全局)變量, 不論是否有static限制, 它的存儲區域都是在靜態存儲區, 生存期都是全局的. 此時的static只是起作用域限制作用, 限定作用域在本模塊(文件)內部.
    使用內部函數的好處是:不同的人編寫不同的函數時,不用擔心自己定 義的函數,是否會與其它文件中的函數同名。

     

    第五,條件語句的使用。常量值放在前面做比較的時候

    if (SYS_OK != ret)

            {

                DHCPRELAY_LOG("HAL_SendPacket failed. ret= %d\n", (INT)ret);

            }

     

    第六,enum枚舉,在使用枚舉變量時,主要關心的不是它的值的大小,而是其表示的狀 態。在實際應用中,有的變量只有幾種可能取值。如人的性別只有兩種可能取值,星期只
    有七種可能取值。在 C 語言中對這樣取值比較特殊的變量可以定義為枚舉類型。所謂枚舉
    是指將變量的值一一列舉出來,變量只限于列舉出來的值的范圍內取值。
    定義 一個變量是枚舉類型,可以先定義一個枚舉類型名,然后再說明這個變量是該枚
    舉類型。

    例如:
    enum weekday{sun,mon,tue,wed,thu,fri,sat}

    typedef enum

    {

        DHCPV6_IF_FORMAT_NORMAL,

        DHCPV6_IF_FORMAT_CTC,

    } DHCPV6_IF_FORMAT_E;

     

    第七,break 用法。continue值 結束本次循環,而不是中止整個循環的執行.break語句則是結束整個循環過 程,不再判斷循環條件是否成立.

      switch(level)

        {

            case CLI_LEVEL_PUBLIC:

            {

                pPwd = "public";

                break;

            }

       

        }

     

    第八,externextern可以置于變量或者函數前,以標示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時在其他模塊中尋找其定義。

    extern GT_STATUS swSetForceSpeed

    (

        IN GT_LPORT     port,

        IN  GT_PORT_FORCED_SPEED_MODE  mode

    );

     

    第九,return o ;的使用,正常退出。只要一個函數的返回值是數字型的,那么就可以返回0(return 0),其實你返回多少都沒問 題。一般情況 下,C++做出來的函數都要求返回一個值,當函數執行正常,且達到了一般情況下的目的,那么就返回0表示正確的調用了該函數,這個0就是返回給主調函數以 通知沒有出錯的;如果函數調用中出錯,或者沒有按照一般情況執行,那么就返回1,以告知主調函數采取響應策略;

    INT main(void)

    {

     

        VOS_ApplStart("cli",

                                 APPL_CLI,

                                 CLI_Init,

                                 CLI_MsgHandle,

                                 CLI_Destroy); 

       

        return 0;

    }

    .

    第十,三元表達式,可見三元運算符比 if (){}else{} 快一些 

    一元運算符,~ !
    二元運算符, + - * / %
    三元運算符 ?:

    return (NULL == pListNode)?NULL:(TIMER_DATA_T *)(pListNode->data);

     

    第十一,打印輸出,-代表左對齊5表示 不足5位輸出  補足五位數;l表示long   u表示無符號

    \r表示回車,即光標回車當前行首
    \n表示回車換行,即光標前進到下一行的行首
    \0是字符串結束標志(空字符),在字符數組中遇到它就表示前面的字符串到些為止。

    printf("%-5lu %-5x %-4lu %-11lu  %-10lu\r\n",

                   pTimerData->timerId,

                   pTimerData->applyAppl,

                   pTimerData->arg,

                   pTimerData->interval,

                   pTimerData->remainTicks);

    JAVA-------------System.out.println(sort.getSortName());

     

    第十二,數組,一維數組可以使用二維數組的寫法{{}{}}

    char a[][5]={{'B','A','S','I','C',},{'d','B','A','S','E'}};

    static CLI_CMD_T g_CliCmdTable[] =

    {

        {"timer print", "timer\nprint timer", cli_TimerPrint, CLI_LEVEL_DEBUG}

    };

     

    第十三,sizeof作用,sizeof 一般形式為:sizeofobject),也可以sizeof var_char,不過大部分programer習慣用sizeof()

         對象可以是表達式或者數據類型名,當對象是表達式時,括號可省略。sizeof是單目運算符,其運算符的含義是:求出對象在計算機內存中所占用的字節數。 一般來講,不同的機器,運行不同的對象是不一樣的,當目前幾乎所有的機器都是32位,很少16位的,所以一般考試都是基于32位的window linux的。

     

    return CLI_RegCmd("Timer", VIEW_NODE, g_CliCmdTable, sizeof(g_CliCmdTable));

     

    第十四,條件語句,case 內嵌套if 表達式及break的組合使用。

    case MSG_TIMER_STOP:

            {

                TIMER_ID *pTimerId;

                pTimerId = (TIMER_ID *)pData;

     

                if (timer_ApplIdMatchingCheck(*pTimerId, srcAppl - VOS_TASK_MAX_NUM) == TRUE)

                {

                    ret = timer_Stop(*pTimerId);

                    if (SYS_OK != ret)

                    {

                        //printf("%s:timer_Stop failed, ret[%lu]\r\n", __FUNCTION__, ret);

                    }

                }

                else

                {

                    ret = TIMER_ERR_APPLID_UNMATCHED;

                }

                VOS_SyncMsgResponse(srcAppl, MSG_TIMER_STOP, (VOID *)&ret, sizeof(SYS_ERR_TYPE));

                break;

            }


    主站蜘蛛池模板: 亚洲国产精品综合久久网络| 91高清免费国产自产| 亚洲av无码专区亚洲av不卡| 亚洲熟妇成人精品一区| 亚洲国产午夜精品理论片在线播放 | 亚洲精品久久久www| 九月丁香婷婷亚洲综合色| 91天堂素人精品系列全集亚洲| 国产精品亚洲综合五月天| 大桥未久亚洲无av码在线| 免费的全黄一级录像带| 久久久久久国产精品免费免费 | 色婷婷7777免费视频在线观看| 国产男女性潮高清免费网站| 亚洲人成色7777在线观看不卡| 九九免费精品视频在这里| 永久在线观看www免费视频| 亚洲一级黄色视频| 亚洲免费福利在线视频| 中文字幕在线免费| 亚洲精品NV久久久久久久久久| 一区二区三区免费视频播放器| 久久国产亚洲精品麻豆| 99久热只有精品视频免费观看17| 国产亚洲精品不卡在线| 亚洲欧美国产日韩av野草社区| 69视频在线观看高清免费| 亚洲性无码av在线| 大地影院MV在线观看视频免费| 免费看一级做a爰片久久| 91丁香亚洲综合社区| 国产男女猛烈无遮挡免费视频网站 | 亚洲日韩精品无码专区网站| 免费人成激情视频在线观看冫 | 黄 色一级 成 人网站免费| 免费一本色道久久一区| 亚洲丶国产丶欧美一区二区三区| 亚洲免费在线观看| 久久免费精彩视频| 亚洲AV无码久久精品成人| 麻豆69堂免费视频|