簡體   English   中英

在預處理程序#if #else的兩種情況下高亮顯示XCode語法

[英]XCode syntax highlighting in both conditions of preprocessor #if #else

我的應用程序使用了一個不會在模擬器上構建和/或運行的庫,因此我通過使用如下預處理器指令將引用周圍的內容有效地排除了對該庫的引用:

#if !(TARGET_IPHONE_SIMULATOR)
    //Do the real implementation
#else
    //Do a dummy implementation for testing

XCode自動檢查我當前的目標是什么,並評估我認為不錯的#if /#else。 問題是,無論要編譯哪種條件,它都會關閉語法高亮顯示,自動完成等功能。 (例如,如果我當前的目標是模擬器,則實際實現中的代碼將失去突出顯示的位置)

我不好的解決方案是更改目標,以便我要編輯的任何實現都被“激活”。 有沒有辦法讓它們始終保持突出顯示,以便我可以無縫地編輯它們?

如果兩種實現都可以針對任一目標進行編譯,則可以執行以下操作:

#if !(TARGET_IPHONE_SIMULATOR)
    const bool simulator = false;
#else
    const bool simulator = true;
#endif

    if (simulator)
    {
        //Do a dummy implementation for testing
    }
    else
    {
        //Do the real implementation
    }

盡管優化器應丟棄永遠不能用於給定目標的分支,但將編譯兩個分支。

如果在目標是模擬器的情況下甚至無法使用庫構建代碼,則可以執行以下操作:

#if !TARGET_IPHONE_SIMULATOR
    if (true)
    {
        //Do the real implementation
    }
    else
#endif
    {
        //Do a dummy implementation for testing
    }

在這種情況下,以模擬器為目標時,真正的實現仍不會帶有語法顏色或不支持完成功能,但是在以設備為目標時,兩個分支都將具有這些顏色。

您也可以為模擬器實現虛擬版本的庫。 您將定義所有接口,但是所有接口都會返回失敗甚至拋出異常。 您將在所有代碼周圍使用#if TARGET_IPHONE_SIMULATOR ,以便該庫最終對於設備構建完全為空。 然后,您將對此進行鏈接並使用第一種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM