Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

INMOS C compiler Version 2.01.10 pitfall

44 views
Skip to first unread message

Mike B.

unread,
Feb 6, 2023, 5:58:47 PM2/6/23
to
Hi!

I like to reuse the arguments of a C function passed by value. Why waste space. BUT - don't do that with the function arguments for a process!

#include <process.h>
#include <stdlib.h>
#include <stdio.h>

void newproc( Process *p, int arg1, int arg2, int arg3 ) {
p = p;
printf( "arg1=%d, arg2=%d, arg3=%d\n", arg1, arg2, arg3 );
arg3--;
arg2++; /* don't change process arguments even they were passed by value !!! */
}

int main( void ) {

Process *x;
int pa1 = 1, pa2 = 2, pa3 = 3;

if (( x = ProcAlloc( newproc, 0, 3, pa1, pa2, pa3 )) == NULL ) abort();

ProcPar( x, NULL );
ProcPar( x, NULL );
ProcPar( x, NULL );

return 0;
}

ubuntu@kria:~$ $ISERVER -sb proc.btl
arg1=1, arg2=2, arg3=3
arg1=1, arg2=3, arg3=2
arg1=1, arg2=4, arg3=1

-Mike

cpm

unread,
Feb 7, 2023, 4:16:46 PM2/7/23
to
Hi Mike,

I agree that ProcAlloc and ProcPar may not be what a C programmer would expect.
ProcAlloc allocates and initializes the process according to the documentation. The function creates the process structure and sets the initial values.
ProcPar runs the process. In your case, you ran it three times in sequence without re-initializing.
The result we see seems reasonable.
If you want to reuse the process, you can reinitialize it with ProcInit.

Claus
0 new messages