簡體   English   中英

可以在VS2008中在#ifndef ... #endif之類的預處理器指令塊中啟用智能感知

[英]Can intellisense be enabled in VS2008 within preprocessor directive blocks like #ifndef … #endif

在C ++庫中工作時,我注意到在“#ifndef CLIENT_DLL ... #endif”這樣的指令塊內部時,我沒有被授予任何智能感知。 這顯然是由於已經定義了“CLIENT_DLL”。 我意識到我可以通過簡單地評論指令來解決這個問題。

是否存在智能感知選項,無論指令評估如何都能實現智能感知?

得到你想要的東西,你會失去很多。

Visual C ++ IntelliSense基於幾個主要假設1.您希望獲得良好/可用的結果。 2.您當前的IntelliSense compiland將顯示與您當前所處的“配置”相關的信息。

由於您當前的配置具有該預處理程序指令,因此您將無法從#ifndef區域獲取結果。

如果你仔細考慮,理由是有道理的。 如果IntelliSense編譯器只是嘗試編譯您所在的區域,而不管#ifdef區域怎么辦? 你會得到無意義和不可編譯的代碼。 它無法使你的compiland的頭或尾。

我可以想象一個非常復雜的解決方案,它在你所在的區域運行一個較小的(新的)解析,只假設該區域是compiland的一部分。 但是,這種方法有很多漏洞(就像聲明/定義的那個區域一樣)這種可能的方法會立即讓你感到沮喪,除非是非常簡單的場景。

通常,最好避免#ifdef區域中的邏輯,而是將參數化編譯的用法委托給整個函數,以便編譯器的前端始終編譯這些模塊,但鏈接器/優化器將在以后選擇正確的OBJ上。

希望有所幫助,威爾

在某些領域,Visual Studio 6.0對C ++有一些更好的支持。 如果你需要intellisense然后暫時將它評論出來,構建然后你應該有intellisense。 如果這是你的意圖,請記得在你通過時重新推薦它。

我只是希望Intellisense在VS2008中應該會運行。 MS“變通辦法”大部分時間都不起作用(刪除.ncb文件)。 噢, 這是另一個SO討論...... ,讓我們看看IT有什么要說的(我只是喜歡這樣)

我也經常對此感到惱火......但我想知道intellisense是否真的能夠提供任何有用的信息,一般來說,在條件限制的區塊內?

我看到的問題是,如果變量或函數的使用根據預處理器指令的值而改變,那么它的定義也是如此。 如果代碼瀏覽功能(如“轉到定義”)在條件化塊中處於活動狀態,您是否希望它們導致當前啟用的定義或者與您正在查看的禁用代碼相同的預處理器條件禁用的定義在?

我認為“最少驚喜的原則”規定當前的行為是最安全的,盡管它很煩人。

為什么要在代碼中明確地執行? VS中已經存在cofiguration設置以及啟用和解除智能感知的方式。 看到鏈接。

http://msdn.microsoft.com/en-us/library/ms173379(VS.80).aspx

http://msdn.microsoft.com/en-us/library/ks1ka3t6(v=VS.80).aspx

這個鏈接可以幫到你。

暫無
暫無

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

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