× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



You are correct Kevin except for the "undefined" part.

Basically passing a variable by reference and passing a pointer to that variable by value result in the same thing - a pointer on the stack and therefore are interchangeable.

As a result I sometimes "lie" to the compiler in cases such as C style functions such as qsort. Actually I do code the qsort proto correctly but the compare routines are custom to the code I am writing and it is far cleaner to write the compare routine as receiving parms by reference and not pointers by value. Much cleaner code as you can see here:

dcl-proc SeqNameCityState;
dcl-pi *N int(10);
elementA LikeDS(customerData);
elementB LikeDS(customerData);
end-pi;

If elementA.state > elementB.state;
Return HIGH;
ElseIf elementA.state < elementB.state;
Return LOW;
ElseIf elementA.city > elementB.city;
Return HIGH;
ElseIf elementA.city < elementB.city;
Return LOW;
ElseIf elementA.name > elementB.name;
Return HIGH;
ElseIf elementA.name < elementB.name;
Return LOW;
Else;
Return EQUAL;
EndIf;

Makes the code easier to understand for regular RPGers as there is no need for based variables etc.


On Mar 11, 2020, at 5:25 PM, Kevin Wright <kevin.wright@xxxxxxxxxxxx> wrote:

Jon? wrote:
In which case, the variabkle is copied to a new location and *pointer to
new location* is passed to procedure.
In the end, you always passed a pointer under covert...

Dave wrote:
I used to think that. But then I ran into the situation where one

program was passing a parameter by reference (by default) but the called
program expected the parameter to be passed by value (explicitly) and the
called program couldn't see the passed value at all. Explain to me why is

that? Thanks for the education.

I (Kevin) write:
A *program* *always* receives its parameters by reference.
A *procedure* can receive its parameters either by value or by reference.
If it is expecting by value but actually gets by reference then what
occurs is probably undefined. There must be a mismatch between the caller
and the called, ie "lying" to the compiler / binder at one point or the
other.

Hope this helps.

Kevin Wright
--
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxx for any subscription related questions.

Help support midrange.com by shopping at amazon.com with our affiliate link: https://amazon.midrange.com


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

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.