En travaillant dans des bibliothèques C++, j'ai remarqué que je ne recevais aucun intellisense à l'intérieur de blocs de directives comme "#ifndef CLIENT_DLL ... #fin si". Ceci est évidemment dû au fait que "CLIENT_DLL" a été défini. Je réalise que je peux contourner ce problème simplement en commentant les directives. Y at-il des options intellisense qui activeront intellisense indépendamment de l'évaluation de la directive?Intellisense peut être activé dans VS2008 dans les blocs de directives du préprocesseur comme #ifndef ... #endif
Répondre
En obtenant ce que vous voulez, vous perdriez beaucoup.
Visual C++ IntelliSense est basé sur quelques présomptions principales 1. que vous voulez des résultats bons/utilisables. Étant donné que votre configuration actuelle IntelliSense présente des informations relatives à la «configuration» vous êtes actuellement.
Parce que votre configuration actuelle a cette directive de préprocesseur, vous ne serez pas en mesure d'obtenir des résultats de la région #ifndef.
La raison est logique si vous y réfléchissez. Que faire si le compilateur IntelliSense a juste essayé de compiler la région dans laquelle vous étiez, sans tenir compte des régions #ifdef? Vous obtiendrez un non-sens et un code non-compilable. Il ne serait pas capable de faire la tête ou la queue de votre compiland.
Je peux imaginer une solution très complexe où il exécute une (nouvelle) analyse plus petite sur la région où vous vous trouvez, avec seulement cette région supposée faire partie de la compiland. Cependant, il y a tellement de trous dans cette approche (comme si rien dans cette région n'était déclaré/défini) que cette approche possible vous frustrerait immédiatement, sauf dans des scénarios très très simples.
Généralement, il vaut mieux éviter la logique dans les régions #ifdef, et au lieu de déléguer l'utilisation de la compilation paramétrée à des fonctions entières, de sorte que l'interface du compilateur compile toujours ces modules, mais l'éditeur de liens le bon OBJ plus tard.
Espoir qui aide, Will
Visual Studio 6.0 prend un peu mieux en charge le C++ dans certains domaines tels que celui-ci. Si vous avez besoin de l'intellisense, alors commentez-le temporairement, construisez et vous devriez avoir intellisense. Rappelez-vous juste de le recommander quand vous avez fini si c'était votre intention.
Je souhaite juste que Intellisense fonctionnerait quand il DEVRAIT dans VS2008. MS "solutions de contournement" ne fonctionnent pas (suppression des fichiers .ncb) la plupart du temps. Oooh, here's another SO discussion..., voyons ce que ça a à dire (j'adore SO)
Je suis souvent ennuyé par ça aussi ... mais je me demande si intellisense serait vraiment capable de fournir des informations utiles, en général , dans un bloc conditionné?
Le problème que je vois est que si l'utilisation d'une variable ou d'une fonction change en fonction de la valeur d'une directive du préprocesseur, sa définition peut en être la cause. Si les fonctions de recherche de code telles que "aller à la définition" étaient actives dans un bloc conditionné, souhaitez-vous qu'elles mènent à la définition actuellement activée ou à une définition désactivée par les mêmes conditions de préprocesseur que le code désactivé que vous recherchez? à?
Je pense que le «principe de la moindre surprise» dicte que le comportement actuel est le plus sûr, aussi ennuyeux soit-il.
Pourquoi vous voulez faire explicitement dans le code? Il existe déjà un paramètre de configuration dans VS et la manière dont vous pouvez activer et désactiver l'intellisense. voir le lien.
http://msdn.microsoft.com/en-us/library/ms173379(VS.80).aspx
http://msdn.microsoft.com/en-us/library/ks1ka3t6(v=VS.80).aspx
Ce lien peut vous aider.
Il n'y a pas de boutons pour modifier cela. Grande réécriture dans VS2010. –
Je réalise que ce n'est probablement pas la réponse que vous cherchez, mais les suggestions de code de Visual Assist X fonctionnent très bien à l'intérieur de #if. Ce n'est pas gratuit, mais c'est un très bon add-in dont je ne voudrais plus me passer. –