C预处理器问题

C preproccessor problem

本文关键字:问题 处理器 预处理      更新时间:2023-10-16

我有一个程序来找到一个数字的倒数,但主程序是用C写的,reciprocal函数是用c++写的。接下来,我有一个头文件reciprocal.hpp,其中有一些使reciprocal函数成为外部函数的条件编译代码。谁能给我解释一下reciprocal.hpp程序里有什么?

c

#include<stdio.h>
#include<stdlib.h>
int main(int argc,char **argv)
{
int i;
i = atoi(argv[1]);
printf("nThe reciprocal of %d is %fn",i,reciprocal(i));
return 0;
}

reciprocal.cpp

#include<cassert>
#include "reciprocal.hpp"
double reciprocal(int i)
{
assert( i != 0);
return 1.0/i;
}

reciprocal.hpp

#ifdef __cplusplus
extern "C"
{
#endif
extern double reciprocal(int i);
#ifdef __cplusplus
}
#endif

我不明白reciprocal.hpp发生了什么,请帮助!!

c++编译器总是定义__cplusplus符号。header的作用是将原型包装在

extern "C" { ... }

这告诉编译器不要对包含在该块中的任何内容执行名称混淆。现在,C代码可以按照函数的原始名称引用该函数,就像它是一个C函数一样。

如果你指的是 ifdefs,它们只是允许函数被导出到C,如果头文件被编译为c++。extern行只是为reciprocal定义了一个函数原型。