Re: C coding
Marc Hunter <marc-G5HfMHItY0AlJZD/[email protected]>
| Newsgroups | gmane.comp.lang.as400.c |
|---|---|
| Message-ID | <[email protected]> |
ouch.
Something you could try is defining the string parm in the RPG procedure
definition as follows:
D Parm * value options(*STRING)
Then in the C/C++ code you can do this:
extern "C" int DoSomething(char * szParm)
{
string myStringParm = szParm;
// move on into OOP world here...
It keeps the RPG relatively simple, and the char *'s are converted to
strings as early as possible. A few extra copies of the data, but in
most cases the simplicity is worth it (imo).
Marc
On 2/13/2014 9:43 AM, Tim Bronski wrote:
> Yes, but the statement was the attempt to create a c++ string from a
> parameter passed from....an RPG program!
>
> On 2/13/2014 6:36 PM, Marc Hunter wrote:
>> While I empathize, and certainly C++ also allows you to shoot yourself
>> in the foot, the code shown is philosophically (imo) a mix of C and C++
>> in that it uses char *s. Assuming both variables are strings then I
>> would code it as follows and avoid dipping into 'dangerous' char *
>> territory.
>>
>> partName.insert(0, userName.substr(start, len));
>>
>> (If I'm understanding the objective correctly)
>>
>> Marc
>>
>> On 2/13/2014 9:02 AM, Tim Bronski wrote:
>>> On 2/13/2014 5:23 PM, Jon Paris wrote:
>>>> I would have said that C was brilliant if your aim was to shoot yourself in the foot and C++ does a better job of protecting you.
>>> Hi Jon, I would have let that slide but I've just finished tracking down
>>> a bug where c++ was using a different overloaded string function than
>>> the one intended. Here's what the statement should have been:
>>> partName.insert(0, &userName[start], len);
>>> but instead it was
>>> partName.insert(0, userName[start], len);
>>>
>>> This compiles fine but the result was heinous...the c compiler would
>>> have caught that one.
--
This is the Bare Metal Programming IBM i (AS/400 and iSeries) (C400-L) mailing list
To post a message email: C400-L-Zwy7GipZuJhWk0Htik3J/[email protected]
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/c400-l
or email: C400-L-request-Zwy7GipZuJhWk0Htik3J/[email protected]
Before posting, please take a moment to review the archives
at http://archive.midrange.com/c400-l.