This section of the archives stores flipcode's complete Developer Toolbox collection, featuring a variety of mini-articles and source code contributions from our readers.

 

  FIXME & TODO Notes As Warnings In Compiler Output
  Submitted by



Many times you think much faster with your mind than with your fingers, so is good to put notes in code as if it were post-its, but that notes trends to end lost inside a big amount of lines of code.

A good thing would be to be advised by the compiler output as if those notes were errors or warnings, so you can have a fast look to all the notes in code and direct acces to the file and line where those are.

I do it using macros that use the #pragma message and __FILE__ __LINE__ preprocessor parameters. I have not tested with any other compiler, but it works in MSVC, and I suppose that message pragma is supported many other compilers.

//---------------------------------------------------------------------------------------------
// FIXMEs / TODOs / NOTE macros
//---------------------------------------------------------------------------------------------
#define _QUOTE(x) # x
#define QUOTE(x) _QUOTE(x)
#define __FILE__LINE__ __FILE__ "(" QUOTE(__LINE__) ") : "

#define NOTE( x ) message( x ) #define FILE_LINE message( __FILE__LINE__ )

#define TODO( x ) message( __FILE__LINE__"\n" \ " ------------------------------------------------\n" \ "| TODO : " #x "\n" \ " -------------------------------------------------\n" ) #define FIXME( x ) message( __FILE__LINE__"\n" \ " ------------------------------------------------\n" \ "| FIXME : " #x "\n" \ " -------------------------------------------------\n" ) #define todo( x ) message( __FILE__LINE__" TODO : " #x "\n" ) #define fixme( x ) message( __FILE__LINE__" FIXME: " #x "\n" )

//--------------------------------------------------------------------------------------------- // Example code //--------------------------------------------------------------------------------------------- int main(int argc, char* argv[]) { #pragma TODO( We have still to do some work here... ) #pragma FIXME( Limits are not controlled in that function or things like that )

#pragma todo( Have a look to flipcode daily ! ) #pragma todo( Sleep... )

#pragma fixme( It seems that there is some leaks in that object )

#pragma FILE_LINE #pragma NOTE( " \n\ A free format multiline, comment............\n\ So I can put a whole text here \n\ -------------------------------------------------") return 0; } //---------------------------------------------------------------------------------------------


And that's the output for the example:

Test.cpp
c:\_code\kk\test.cpp(25) : 
 ------------------------------------------------
|  TODO :   We have still to do some work here...
 -------------------------------------------------
c:\_code\kk\test.cpp(26) : 
 ------------------------------------------------
|  FIXME :  Limits are not controlled in that function or things like that
 -------------------------------------------------
c:\_code\kk\test.cpp(28) :  TODO :   Have a look to flipcode daily !
c:\_code\kk\test.cpp(29) :  TODO :   Sleep...
c:\_code\kk\test.cpp(31) :  FIXME:   It seems that there is some leaks in that object
c:\_code\kk\test.cpp(33) : 

A free format multiline, comment............ So I can put a whole text here -------------------------------------------------

Test.obj - 0 error(s), 0 warning(s)


In an integrated IDE, you can click in the message line, and go directly to the file and line of code. You can use too the NOTE and FILE_LINE macros to create some free form comments.

I think that it is a very good tip for people that are allways looking for a ZERO warnings code, because it makes easier to locate it and it's very usefull for common code of big and small projects with code in progress.

Alberto Garcia-Baquero Vega ( wisefox@jet.es )
Nebula Entertainment

The zip file viewer built into the Developer Toolbox made use of the zlib library, as well as the zlibdll source additions.

 

Copyright 1999-2008 (C) FLIPCODE.COM and/or the original content author(s). All rights reserved.
Please read our Terms, Conditions, and Privacy information.