|
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 -- This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/rpg400-l or email: RPG400-L-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at http://archive.midrange.com/rpg400-l.
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.