Re: [CMake] ARGVn madness?!

2009-11-13 Thread Marcel Loose
Hi Brad, Michael,

Your explanation makes sense. I hadn't run into this problem before, and
assumed I could safely access ARGVn, whether or not n = ARGC. Turns out
I was just lucky. I'll use ARGN instead.

Thanks,
Marcel Loose.

On Fri, 2009-11-13 at 07:52 -0500, Brad King wrote:
 Michael Wild wrote:
  Looks like the scoping algorithm only overwrites these automatic 
  variables only if they are associated with actual arguments, otherwise 
  it just inherits them. Same thing happens if my_macro is a function. 
  Smells like bug to me ;-)
 
 It's behaving exactly as documented.  Functions make their arguments
 available as local variables using dynamic scoping.  Macros have their
 arguments substituted into the implementation and then executed in the
 invoking context (the function's scope in this case).
 
   This probably means, always check ARGC and only use ARGN to retrieve
   optional arguments...
 
 Or, check ARGC and don't index ARGVx for x = ARGC.  This is the same
 as is needed for argc and argv[] in C.  No one blindly indexes argv[x]
 for x = argc.
 
 -Brad

___
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake


Re: [CMake] ARGVn madness?!

2009-11-13 Thread Brad King

Michael Wild wrote:
Looks like the scoping algorithm only overwrites these automatic 
variables only if they are associated with actual arguments, otherwise 
it just inherits them. Same thing happens if my_macro is a function. 
Smells like bug to me ;-)


It's behaving exactly as documented.  Functions make their arguments
available as local variables using dynamic scoping.  Macros have their
arguments substituted into the implementation and then executed in the
invoking context (the function's scope in this case).

 This probably means, always check ARGC and only use ARGN to retrieve
 optional arguments...

Or, check ARGC and don't index ARGVx for x = ARGC.  This is the same
as is needed for argc and argv[] in C.  No one blindly indexes argv[x]
for x = argc.

-Brad
___
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake