C 語言幾個絕招

來源:互聯網
上載者:User

1.        符號展開串連:

#define  CAT_TOKEN_1(t1, t2)  t1##t2

#define  CAT_TOKEN(t1, t2)  CAT_TOKEN_1(t1,t2)

CAT_TOKEN_1 直接將 t1和t2串連成 t1t2,而

CAT_TOKEN 將t1和t2展開後再串連,如:

#define  t1  I_am_

#define  t2  lei_peng

CAT_TOKEN_1(t1, t2) 的結果是  t1t2

CAT_TOKEN(t1, t2) 的結果是  I_am_leipeng

CAT_TOKEN 相當有用。

2.        將0轉化為0,而將非零轉化為 1,可以轉化指標

#define convert_bool(x) (!!(x))

3.        編譯時間斷言:

#define COMPILE_ASSERT(x)  /

enum { CAT_TOKEN (comp_assert_, __LINE__) = 1 / !!(x) };

// 或者

#define COMPILE_ASSERT_2(x)  /

void CAT_TOKEN(comp_assert_fun_,__LINE__)  (int x[][x]);

4.        定義 Handle類型

#define  DEFINE_HANDLE_TYPE(handle_type)  /

struct param_##handle_type;     /

typedef  void  (*handle_type )(struct param_##handle_type);

將 Handle 定義為函數指標主要有一個好處:就是禁止了對 Handle 的加減,防止了一些小錯誤的發生。

5.        定義union中的匿名 struct

struct  my_type {

union {

        struct {   ….} u1;

        struct {   ….} u2;

        struct {   ….} u3;

     };

};

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.