PC Review


Reply
Thread Tools Rate Thread

Optional arguments

 
 
KD
Guest
Posts: n/a
 
      21st Aug 2012
I found some code by Chip Pearson which is mostly self-explanatory
except this portion:

"Optional ByVal LB As Long = -1&, _"

What does the "&" after the -1 mean?
 
Reply With Quote
 
 
 
 
joeu2004
Guest
Posts: n/a
 
      21st Aug 2012
"KD" <(E-Mail Removed)> wrote:
> "Optional ByVal LB As Long = -1&, _"
> What does the "&" after the -1 mean?


It is completely unnecessary in this context.

For every data type, there is a character that implicitly assigns a type to
a variable name or number when used as a prefix.

-1& says -1 should be treated as type Long. It is unnecessary here because
you are simply assigning -1 to a type Long variable.

It is also unnecessary if you specify a number larger than 32767, e.g.
33000. VBA knows to treat that as Long since it is larger than type
Integer.

The "&" suffix becomes important when the data type of an expression is
ambiguous. For example:

Dim n As Long
n = 30000 + 1000

results in an overflow error since 30000 and 1000 are both interpreted as
type Integer. Consequently, VBA tries to perform type Integer arithmetic
(addition). The following fixes the problem:

n = 30000& + 1000

In contrast, the following works without the use of "&":

n = 33000 + 1000

because 33000 is type Long; ergo, 1000 is "converted" to type Long, and type
Long arithmetic is performed.

 
Reply With Quote
 
 
 
 
Peter T
Guest
Posts: n/a
 
      21st Aug 2012
As joeu2004 has explained the & defines the value -1 as a Long.

Also as explained in this context it's not necessary, however predefining as
a Long reserves matching 32bit/4-byte spaces in memory which means
ultimately no coercion is required in assigning the value to the variable.

In theory it makes the code more efficient though in practice unlikely to be
noticeable in modern machines. Even if only by convention it's normal to
fully define constants, eg

Const cNum as Long = 123&

Chip Pearson is a stickler for detail :-)

Regards,
Peter T


"KD" <(E-Mail Removed)> wrote in message
>I found some code by Chip Pearson which is mostly self-explanatory
> except this portion:
>
> "Optional ByVal LB As Long = -1&, _"
>
> What does the "&" after the -1 mean?


 
Reply With Quote
 
Auric__
Guest
Posts: n/a
 
      21st Aug 2012
joeu2004 wrote:

> The "&" suffix becomes important when the data type of an expression is
> ambiguous. For example:
>
> Dim n As Long
> n = 30000 + 1000
>
> results in an overflow error since 30000 and 1000 are both interpreted
> as type Integer. Consequently, VBA tries to perform type Integer
> arithmetic (addition).


Minor detail: 30000 + 1000 won't (normally) result in overflow (unless you're
using a data type that can't handle the result, i.e. Byte, and then only when
assigning the result to the variable, not during the actual addition). Max
value of an Integer is 32767, and 32767 > (30000 + 1000). The overflow *does*
occur with 32000 + 1000 (or any equation that adds up to more than &h7FFF).

--
He'd like you to think he's got a heart of stone,
but really, he's got a heart of marshmallow.
 
Reply With Quote
 
joeu2004
Guest
Posts: n/a
 
      21st Aug 2012
"Auric__" <(E-Mail Removed)> wrote:
> joeu2004 wrote:
>> Dim n As Long
>> n = 30000 + 1000

[....]
> 30000 + 1000 won't (normally) result in overflow

[....]
> The overflow *does* occur with 32000 + 1000


Yes, and that was my intent. A typo. Thanks for catching it.
 
Reply With Quote
 
KD
Guest
Posts: n/a
 
      22nd Aug 2012
Thks guys!
 
Reply With Quote
 
KD
Guest
Posts: n/a
 
      22nd Aug 2012
Thanks guys!
 
Reply With Quote
 
 
 
Reply

Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Microsoft Optional Hardware (Optional) Update ulysses hardy Windows XP General 5 30th Aug 2008 10:36 PM
Cannot use function with optional arguments =?Utf-8?B?VGhvbWFzQUo=?= Microsoft Access Form Coding 2 18th Feb 2005 05:20 AM
optional hard drive vs. optional memory Dennis Printers 1 2nd Dec 2004 10:37 PM
C# optional parameters? Is it possible to make a perl's hashref-like optional list? =?Utf-8?B?TWFnaWNHdXJ1?= Microsoft C# .NET 3 19th Mar 2004 03:24 AM
Optional arguments Jens Thiel Microsoft Dot NET Framework 1 8th Mar 2004 09:44 PM


Features
 

Advertising
 

Newsgroups
 


All times are GMT +1. The time now is 05:46 PM.