首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++程序中包含带有无效参数列表的C声明会导致编译错误(使用gcc版本6.3.0 20170406)

在C++程序中包含带有无效参数列表的C声明会导致编译错误(使用gcc版本6.3.0 20170406)
EN

Stack Overflow用户
提问于 2017-05-03 05:52:31
回答 1查看 35关注 0票数 1

我一直使用:

代码语言:javascript
复制
extern "C"{
    #include <editline.h>
}

editline.h文件包含以下两行:

代码语言:javascript
复制
extern char *readline();
extern void add_history();

在我使用的c++代码中:

代码语言:javascript
复制
char* mbs=readline((char*)"> ");

编译器问题:错误:函数'char* readline()‘的参数太多

我理解在C中,将函数声明中的参数列表留空意味着:“一些固定的参数,但未定义”。

代码在过去是有效的,所以应该有一些改变,可能是在editline.h文件中,或者是在g++版本之间。关于g++编译器的正确行为是什么?

EN

回答 1

Stack Overflow用户

发布于 2017-05-03 05:54:13

extern "C"中包装声明不会将它们转换为C代码。它只会影响名称损坏,允许两种语言之间的链接。

您正在使用的功能在C++中不存在,因此您不能在此处使用它。C++根本看不到匹配的函数。

C标头应该与C++调用者兼容,而不是将整个#include语句包装在extern "C"中并希望得到最好的结果;这类代码通常在标头本身的适当位置具有extern "C",并将避免类似这样的纯C特性。

简而言之,除非你能“修复”头部,否则你就不走运了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43747839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档