|
Bob, So if I understand right, when I declare a procedure: p Search B d Search PI 5U 0 d peArray likeds(bigDS) d dim(32767) d const d options(*varsize) And I have in the calling program a global array declared : d bigDS DS d field1 32767A d field2 32767A d ArrayToPass S likeds(bigDS) d dim(3000) That would cause the compiler to create a temporary array because ArrayToPass is a fixed length field ? TIA, Arco Simonse > -----Oorspronkelijk bericht----- > Van: rpg400-l-bounces@xxxxxxxxxxxx > [mailto:rpg400-l-bounces@xxxxxxxxxxxx] Namens Bob Cozzi > Verzonden: zaterdag 3 september 2005 17:22 > Aan: 'RPG programming on the AS400 / iSeries' > Onderwerp: RE: Constants (was: *varsize array as procedure parameter) > > Birgitta, > > When CONST is specified for a parameter and VARYING is also > specified, a copy of the input parameter's value is made if: > A) The input value is in a fixed-length field. > B) The input value is in a VARYING field and it is shorter > than the declared parameter length. > C) A literal or character-string expression is passed. > > And probably one or two other situations that I can't think of. > > My rule-of-thumb is to always use CONST for numeric > parameters and date parameters (obviously if I don't need to > modify them). And for character parameters, justify why I > don't need it, otherwise use CONST there too. > Again, the only caveat to this is when VARYING is used. > > Also, you don't want to use long return values from > procedures--this kills performance. An integer or very short > character value is fine, but returning something like a data > structure or worse data structure array or just an array is a > performance killer... Instead, pass a parameter, update it, > and return perhaps the number of value populated in the array > as an integer. > > -Bob Cozzi > www.RPGxTools.com > RPG xTools - Enjoy programming again. > > > -----Original Message----- > From: rpg400-l-bounces@xxxxxxxxxxxx > [mailto:rpg400-l-bounces@xxxxxxxxxxxx] > On Behalf Of HauserSSS > Sent: Saturday, September 03, 2005 3:54 AM > To: RPG programming on the AS400 / iSeries > Subject: AW: Constants (was: *varsize array as procedure parameter) > > Hi David, > > >>If a const is just a pointer to a variable that isn't allowed to be > >>changed ... is there any reason I couldn't take the address of that > >>pointer, assign it to another (non-const) variable, and change the > >>const's value that way? > > May be we should explain what happens if a parameter is > passed by constant > reference: > If the passed parameter has the same data type and length as > required in the prototype, the address of this parameter > field is passed to the called procedure. > If the passed parameter has a compatible data type or > different length, a temporary field with the required > definition is created and initialized with the parameter > value. After the address of this temporary field is passed to > the called procedure. > Because it cannot be determined whether the received address > is from the original field or a temporary field, and to avoid > to change some values by mistake, it's forbidden to change a > parameter field that is passed by constant reference. > The compilers already check it. > > Birgitta > DISCLAIMER: This message contains information that may be privileged or confidential and is the property of the sender. It is intended only for the person to whom it is addressed. If you are not the intended recipient, you are not authorized to read, print, retain, copy,disseminate, distribute, or use this message or any part thereof. If you receive this message in error, please notify the sender immediately and delete all copies of this message. This footnote also confirms that this email message has been swept of the presence of computer viruses
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.