Making intellisense acknowledge variables declared inside macros

The time-saving technology of intellisense is a real bonus for all of us who use variables with a little more meaning to their names than m_nOad. Among other things, it allows for parameter info (far less F1 inquiries) and member info. However, if the variable you are trying to use Intellisense on is not explicitly defined, but rather defined in some kind of macro (as is the case in certain MFC and ATL macros), one cannot use that variable with intellisense.

The simplest way of avoiding that problem is using Intellisense's own disadvantages to our advantage. Take for example the following MFC custom interface implementation code:


HRESULT CSomeClass::XSomeInterface::SomeMethod(long SomeParam)
{
 METHOD_PROLOGUE(CSomeClass,SomeInterface);

 // If I were to write pThis-> now, I would
 //not get the expected drop down list of members.
}
To solve this, we will actually define the variable, only make the compiler ignore it:

HRESULT CSomeClass::XSomeInterface::SomeMethod(long SomeParam)
{
 METHOD_PROLOGUE(CSomeClass,SomeInterface);
#ifdef SOMETHING_WHICH_IS_NOT_DEFINED
CSomeClass* pThis;
#endif
 // If I were to write pThis-> now, the list would
 // pop-up and give me the list of members. Problem solved.
}
Now, this will make your code a little less readable, and is a drag to write each time. Instead, we can do the same thing to define something that intellisense will recognize as a "global variable":

In your implementation code, at it's beginning, repeat that same #ifdef sequence.


#include "this.h"
#include "and_that.h"
#ifdef SOMETHING_WHICH_IS_NOT_DEFINED
CSomeClass* pThis;
#endif
Now, in your method implementation:

HRESULT CSomeClass::XSomeInterface::SomeMethod(long SomeParam)
{
 METHOD_PROLOGUE(CSomeClass,SomeInterface);

 // If I were to write pThis-> now, I would
 // get the expected drop down list of members without
 // "declaring" that variable again and again.
}
Note: The example given here was about MFC's implementation of custom interfaces, however, it's true for every place you have macros defining variables. The global method, when not applied correctly, will yield unexpected intellisense behavior.

Date Last Updated: February 4, 1999


Comments

  • Alternative to Intelisense

    Posted by Legacy on 09/28/2000 12:00am

    Originally posted by: Tony Bloomer

    This is probably not very relevant to many people, however any of you out there who are annoyed with the limitations of intellisence may be interested to know that there is an alternative that is pretty damn good. www.wholetomato.com have a product that replaces all of intellisence's functionalitly and adds a great deal more. Including macro parameters and function definitions from any library that your project is using not just the standard ones. Needs a pretty fast PC to run it without irritating delays but well worth it for Lazy people. Not sure as to the price.

    I know I can't spell intellisen(c/s)e proberly, or anything else so don't bother telling me.

    Cheers

    Tony

    Reply
  • Shark

    Posted by Legacy on 09/16/2000 12:00am

    Originally posted by: Sharon Leon

    Shahar Prish, ata pashut karish!

    Reply
  • Very helpful

    Posted by Legacy on 03/24/1999 12:00am

    Originally posted by: Michael Borysenko

    Despite that other guys (rude) comments, I found this tip quite useful. I am using smart pointers and now I can finally get IntelliSense to give me the proper tooltips on them!

    Reply
  • Whatever...

    Posted by Legacy on 02/12/1999 12:00am

    Originally posted by: Warren Marshall

    "The time-saving technology of intellisense is a real bonus for all of us who use variables with a little more meaning to their names than m_nOad."

    Yeah. Intellisense is of absolutely no use to those of us who like to know the scope and type of our variables is. Thanks for the lesson in coding style... appreciated.

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: August 20, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT When you look at natural user interfaces as a developer, it isn't just fun and games. There are some very serious, real-world usage models of how things can help make the world a better place – things like Intel® RealSense™ technology. Check out this upcoming eSeminar and join the panel of experts, both from inside and outside of Intel, as they discuss how natural user interfaces will likely be getting adopted in a wide variety …

  • Protecting business operations means shifting the priorities around availability from disaster recovery to business continuity. Enterprises are shifting their focus from recovery from a disaster to preventing the disaster in the first place. With this change in mindset, disaster recovery is no longer the first line of defense; the organizations with a smarter business continuity practice are less impacted when disasters strike. This SmartSelect will provide insight to help guide your enterprise toward better …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds