#ifdef _WIN32
...
#elif __APPLE__
#include
...
#endif
後來感覺#elif部分怪怪,查了一下,發現#ifdef其實是#if defined的方便寫法,而原本的#elif部分並不是檢查有無define,而是做條件判斷。
隨便寫個C++程式測試:
...
#ifdef NOT_DEFINED
...
#elif ALSO_NOT_DEFINED
std::cout << "print for test" << std::endl;
...
可編譯,不輸出
...
#define DEFINED
...
#elif DEFINE
std::cout << "print for test" << std::endl;
...
無法編譯,"error: expected value in expression"
...
#define DEFINED_AS_ZERO 0
...
#elif DEFINED_AS_ZERO
std::cout << "print for test" << std::endl;
...
可編譯,不輸出
...
#define DEFINED_AS_ONE 1
...
#elif DEFINED_AS_ONE
std::cout << "print for test" << std::endl;
...
可編譯,有輸出
改用#elif defined,皆可編譯,除ALSO_NOT_DEFINED外皆有輸出
白目想說cout __APPLE__看看,輸出1,無怪乎原本用#elif也能順利include。但#elif define(__APPLE__)感覺較良好,還是改吧。
沒有留言:
張貼留言