C预处理器问题
C preproccessor problem
我有一个程序来找到一个数字的倒数,但主程序是用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函数一样。
如果你指的是 ifdef
s,它们只是允许函数被导出到C,如果头文件被编译为c++。extern
行只是为reciprocal
定义了一个函数原型。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- #定义c-预处理器常量..我做错了什么
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- 预处理器:插入结构名称中的前一个行号
- Project Euler问题4的错误解决方案
- 为什么主机不显示?(C++和代码处理器问题)
- 获取处理器相关性(linux)时出现问题
- CPP预处理器到C预处理器转换问题
- 设备驱动程序内存缓冲区处理器缓存问题
- 我在让非常基本的命令提示符文本处理器工作时遇到问题。ofstream() 的问题
- 预处理器:生成具有动态名称的函数.多个定义问题
- i7处理器和windows8操作系统上的多线程问题
- 关于c++预处理器的问题
- c++预处理器延迟扩展问题
- C预处理器问题