On Saturday 03 March 2012, 02:29:05, Robert Dailey wrote:
> Well you're really comparing apples to oranges. C++ nested scoping rules
> really have nothing to do with two separate functions sharing scoped
> variables. It doesn't even really serve as a good analogy, so I can't be
> 100% certain what you were trying to tell me ;-)
> 
> However I appreciate your response. I really just wanted to make sure this
> isn't a bug, because the way the called function inherits the calling
> function's local variables is an unusual behavior for a language, at least
> in my experience. So I had to think twice about it ;)

As Michael said: This behaviour is not at all unusual for scripting languages, 
but there is not really a One True Way: In Tcl you have to import variables 
explicitly, in bourne shell you overwrite values in the parent scope, ...
It's just a property of the language that you have to know about.

So in the CMake language you should be aware that the parent scope is visible 
inside a function, but the function does not affect the parent scope unless 
explicitly stated:

function( test1 )
  set( var_a "var_a inner1" )
  message( "test1(): var_a: ${var_a}" )
endfunction()

function( test2 )
  set( var_a "var_a inner2" PARENT_SCOPE )
  message( "test2(): var_a: ${var_a}" )
endfunction()

set( var_a "var_a outer" )
test1()
message( "var_a: ${var_a}" )
test2()
message( "var_a: ${var_a}" )

--- Output:
test1(): var_a: var_a inner1                                                    
                                                                                
                                                                                
                               
var_a: var_a outer                                                              
                                                                                
                                                                                
                               
test2(): var_a: var_a outer
var_a: var_a inner2

Disclaimer:  Actually, this was surprising to me. I was thinking that 
PARENT_SCOPE sets the value in the current scope plus the parent scope, not in 
the parent scope only. I guess this could be stated in the documentation more 
clearly...

Johannes
--

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

Reply via email to