Declaring IBM i Pointer Variables in C and C++

Pointers to *PGM objects (programs) can be declared in either of the following ways:
  • By declaring a pointer to a typedef that has been specified to have OS-linkage with the #pragma linkage directive or extern OS linkage.
  • By declaring a system pointer (_SYSPTR).
You can declare variables of the other IBM i pointer types by using the type definitions (typedefs) that are provided by the ILE C <pointer.h> header file.

Figure 1 shows IBM® i C pointer declarations. Figure 2 shows IBM i C++ pointer declarations.

Figure 1. ILE C Source to Declare Pointer Variables
#include <pointer.h>   /* The pointer header file.                  */
_SYSPTR sysp;          /* A system pointer.                         */
_SPCPTR spcp;          /* A space pointer.                          */
_INVPTR invp;          /* An invocation pointer.                    */
_OPENPTR opnp;         /* An open pointer.                          */
_LBLPTR lblp;          /* A label pointer.                          */
void (*fp) (int);      /* A function pointer.                       */
#pragma datamodel (p128)
#pragma linkage (OS_FN_T, OS)
#pragma datamodel(pop)
typedef void (OS_FN_T) (int);  /* Typedef of an OS-linkage function.*/
OS_FN_T * os_fn_p;             /* An OS-linkage function pointer.   */
int * ip;                      /* A pointer to a data object.       */
Figure 2. ILE C++ Source to Declare Pointer Variables
#include <pointer.h>   /* The pointer header file.                  */
_SYSPTR sysp;          /* A system pointer.                         */
_SPCPTR spcp;          /* A space pointer.                          */
_INVPTR invp;          /* An invocation pointer.                    */
_OPENPTR opnp;         /* An open pointer.                          */
_LBLPTR lblp;          /* A label pointer.                          */
void (*fp) (int);      /* A function pointer.                       */
#pragma datamodel (p128)
/* Typedef of an OS-linkage function.                               */
extern "OS" typedef void (OS_FN_T) (int);
#pragma datamodel(pop)
int * ip;                      /* A pointer to a data object.       */