/* | 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++
•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
•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