HP aC++/HP C Programmer's Guide (B3901-90036; A.06.26; September 2011)

/****************************************************/
#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 245).
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. *
//**************************************************
Data Compatibility between C and C++ 239