HP aC++/HP C A.06.25 Programmer's Guide
{
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 258).
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);
Data Compatibility between C and C++ 251