www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Make if statement with stricter test

reply Davidl <Davidl 126.com> writes:
if(AA) <-- invalid

char[][char[]] k;
if (k) // this code should be invalid, cause it could strongly be a typo  
or some porting mistake from some
C source

I hope if(identifier) only work for Bool & Pointer types
Apr 19 2007
parent reply Dan <murpsoft hotmail.com> writes:
Davidl Wrote:

 if(AA) <-- invalid
 
 char[][char[]] k;
 if (k) // this code should be invalid, cause it could strongly be a typo  
 or some porting mistake from some
 C source
 
 I hope if(identifier) only work for Bool & Pointer types

For an AA, I believe this works out to length - the length of the char[][] keys; if(k) I believe checks k.keys.length by virtue of being at *(&k), which is 0 until you assign it a buffer. This seems like the right behavior to me for an AA. if(k) asks if k is a non-empty Associative Array.
Apr 19 2007
parent Davidl <Davidl 126.com> writes:
 if(AA) <-- invalid

 char[][char[]] k;
 if (k) // this code should be invalid, cause it could strongly be a typo
 or some porting mistake from some
 C source

 I hope if(identifier) only work for Bool & Pointer types

For an AA, I believe this works out to length - the length of the char[][] keys; if(k) I believe checks k.keys.length by virtue of being at *(&k), which is 0 until you assign it a buffer. This seems like the right behavior to me for an AA. if(k) asks if k is a non-empty Associative Array.

no if(k) doesn't indicate an empty AA, it just tests whether it has ever been used. if k has been used and then cleared, still if(k) test would pass
Apr 19 2007