下面是从《GCC:the Complete Reference》中摘出来的。
Calling C from C++
The following example is a C++ program that calls a C function named csayhello().
This call can be made directly because the function is declared in the C++ program as
extern "C":

/* cpp2c.cpp */
#include <iostream>
extern "C" void csayhello(char *str);
int main(int argc,char *argv[])
{
csayhello("Hello from cpp to c");
return(0);
}
The C function requires no special declaration and appears as follows:
/* csayhello.c */
#include <stdio.h>
void csayhello(char *str)
{
printf("%s\n",str);
}
The following three commands compile the two programs and link them into an
executable. The flexibility of g++ and gcc allow this to be done in different ways, but
this set of commands is probably the most straightforward:
$ g++ -c cpp2c.cpp -o cpp2c.o
$ gcc -c csayhello.c -o csayhello.o
$ gcc cpp2c.o csayhello.o -lstdc++ -o cpp2c
Notice that it is necessary to specify the standard C++ library in the final link because
the gcc command is used to invoke the linker instead of the g++ command. If g++ had
been used, the C++ library would have been implied.
It is most common to have the function declarations in a header file and to have the
entire contents of the header file included as the extern "C" declaration. The syntax
for this is standard C++ and looks like the following:
extern "C" {
int mlimitav(int lowend, int highend);
void updatedesc(char *newdesc);
double getpct(char *name);
};
对于库函数,应该是直接调用。

对于自定义函数,可能需要改一下头文件。
在所有宏定义和函数说明之加入:
#ifdef __cplusplus
extern "C" {
#endif

在所有宏定义和函数说明之加入:
#ifdef __cplusplus
}
#endif


例如:以下是我自己写得一个头文件
typedef struct{
    int year;
    int month;
    int day;
}date;

int GetWeekNo(date);

修改后就变成
#ifdef __cplusplus
extern "C" {
#endif

typedef struct{
    int year;
    int month;
    int day;
}date;

int GetWeekNo(date);
#ifdef __cplusplus
}
#endif


注意大小写,以及cplusplus前面是两条下划线。