#ifdef和#if的差別

來源:互聯網
上載者:User

最近項目要從windows平台移植到linux平台,所以做了很多相容性相關的工作。遇到一個小問題,我想通過WIN32宏來區分兩個平台,之前以外WIN32變數是自己定義到,所以我做了如下聲明:

#define WIN32 1 //1:windows, 0:linux

程式中這樣使用:

#if WIN32 1

     //do something in windows

#else

    //do something in linux

#endif

於是,把整個工程在linux平台下編譯一遍,出現了很多編譯錯誤,均來自於opencv到庫檔案,這是不能容忍的,為這個問題困擾了一天!

最終找到了答案,那是因為opencv在做相容性時,windows用的就是WIN32這個宏,而且都是這樣使用的:

#ifdef WIN32  

      //do something in windows

當程式中define了WIN32之後,就認為在linux下定義了WIN32,所以又去編譯windows相關的東西,顯然這是錯誤的。

所以,得出了結論:

1) WIN32宏是windows系統內建定義的宏,可直接使用,不用再去define

2) #ifdef的意思表示只要定義了就為真,所以使用時直接#ifdef WIN32,並且如果#define VAR 1,那麼VAR就被定義,就可直接使用#ifdef VAR,而不管VAR是多少

3) #if的意思表示如果定義到宏是否為0,這時就要看宏到定義了,具體用時就是#if VAR 1.

一個小的知識點,就可以困擾你一天,終於明白編程規範是多麼重要,謹記!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.