User's Guide

/* by compiling the calling_c.C module must be */
/* linked to create an executable file. */
/****************************************************/
#include <stdio.h>
#include string.h
char* get_name()
{
static char name[80];
printf(Enter the name: );
scanf(%s,name);
return name;
}
/****************************************************/
Running the Example
Following is a sample run of the executable file that results when you link the object modules
generated by compiling calling_c.C and get_name.c:
Enter the name:Joann
Joann has a balance of 0
HP C Calling HP aC++
If you mix C++ modules with C modules, refer to “Linking Your HP aC++ Libraries with Other
Languages” (page 196).
Since most C++ programs use the HP aC++ run-time libraries, you can call a C++ module from a
C module using the following procedure:
To prevent a function name from being mangled, the function definition and all declarations
used by the C++ code must use extern "C".
You cannot call member functions of classes in C++ from C. When a member function routine
is needed, call a non-member function in C++. This in turn calls the member function.
Since the C program cannot directly create or destroy C++ objects, it is the responsibility of
the writer of the C++ class library to define interface routines that call constructors and
destructors, and it is the responsibility of the C user to call these interface routines to create
such objects before using them and to destroy them afterwards.
The C user should not try to define an equivalent struct definition for the class definition in
C++. The class definition may contain bookkeeping information that is not guaranteed to work
on every architecture. All access to members must be done in the C++ module.
The following examples illustrate some of these points, as well as reference parameters in the
interface routine to the constructor.
//**************************************************
// C++ module that manipulates object obj. *
//**************************************************
#include <iostream.h>
typedef class obj* obj_ptr;
extern C void initialize_obj (obj_ptr& p);
extern C void delete_obj (obj_ptr p);
extern C void print_obj (obj_ptr p);
struct obj {
private:
int x;
public:
obj() {x = 7;}
friend void print_obj(obj_ptr p);
};
Data Compatibility between C and C++ 191