此函數該如何搞懂?

1. CTRL_info CTRL_sendResponse (char_prt respDataBuf)

typedef enum CTRL_info_tag

{

CTRL_SUCCESS = 0 ,

.

.

.

}CTRL_info;

2. CTRL_info trn = CTRL_SUCCESS ;

其中 char_prt 已經 typedef 掉了.

我想請教的是 1. 的 CTRL_info 放在函式前 這是什麼用法呢?

接著是 2. 放在變數前 又是什麼用法呢?

已更新項目:

謝謝 淡藍色大大的回答

我可以把您的意思解釋成, CTRL_info 放在 trn變數/函數 的前面是用於限制住 trn/回傳值 的範圍嗎?

1 個解答

評分
  • 1 0 年前
    最佳解答

    假設您的 CTRL_Info 列舉型態完整實作如下:

    typedef enum CTRL_info_tag

    {

    CTRL_SUCCESS = 0

    ,CTRL_PENDING

    ,CTRL_FAIL

    }CTRL_info;

    首先 enum CTRL_info_tag 為一個列舉型態,具有三個具名列舉 CTRL_SUCCESS、CTRL_PENDING 與 CTRL_FAIL,其列舉值分別為 0、1 與 2。

    再來為 enum CTRL_info_tag 取一個別名為 CTRL_Info,也就是說

     enum CTRL_info_tag a;

    宣告與下列宣告完全等義:

     CTRL_info a;

    回頭看看您的第一個問題:

     CTRL_info CTRL_sendResponse (char_prt respDataBuf);

    回傳值為 CTRL_info 型態,也就是回傳值只有可能是三種值,分別為 CTRL_SUCCESS、CTRL_PENDING 與 CTRL_FAIL(以數字看來,分別為 0、1 與 2)。函數本體的 return 陳述,在合乎邏輯意義的前提,只可能有下列三種形式:

     return CTRL_SUCCESS;

     return CTRL_PENDING;

     return CTRL_FAIL;

    再來,您的第二個問題:

     CTRL_info trn = CTRL_SUCCESS;

    表示以 CTRL_info 型態宣告一個 trn 變數,並且定義 trn 的值為 CTRL_SUCCESS。trn 的型態為 CTRL_info,所以 trn 的值只有可能為 CTRL_SUCCESS、CTRL_PENDING 與 CTRL_FAIL 三種。

    就 C 語言發展歷史,enum 陳述的出現,目的是為了取代以 #define 所定義的符號常數(Symbolic Constant),以期符號常數在使用上能夠嚴謹地執行型態檢查,以避免前置編譯(Pre-compiler)時期,因文字替換而產生的混淆不清(Ambiguous)甚至邏輯錯誤。

    2007-07-03 15:58:46 補充:

    針對您的補充內容,如果拿真實的數值來看,此例確實被限制在 0~2 範圍之間的整數值;但是就邏輯上的意義,應該視為限制於 CTRL_SUCCESS、CTRL_PENDING 與 CTRL_FAIL 三種狀態。

    C/C++ 語言有多種具數值運算能力的型態,但如果您將列舉型態的變數視為數值資料,應用於「檢查狀態」以外的數學運算,那麼就失去列舉型態存在的意義了。

    參考資料: 無, 無
還有問題?馬上發問,尋求解答。