程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c++如何調用c函數

c++如何調用c函數

編輯:關於C語言
 

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前面是兩條下劃線。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved