Qt Creator 无法用 C 不兼容的代码编译外部“C”块
Posted
技术标签:
【中文标题】Qt Creator 无法用 C 不兼容的代码编译外部“C”块【英文标题】:Qt Creator is unable to compile extern "C" block with C incompatible code 【发布时间】:2018-12-08 00:49:37 【问题描述】:我在一个 C++ 项目中使用 Qt Creator,一些头文件包含外部“C”块,其中函数声明包含 C 不兼容代码,例如默认参数和 bool/true/false 的使用。
我在 Ununtu 5.11 上使用 Qt 5.11。
这是 extern 块的 sn-p 示例:
#ifdef __cpluscplus
extern "C"
#endif
int foo (int param1, int param2, int param3=0);
bool bar(int param);
#ifdef __cpluscplus
#endif
这将分别导致以下编译错误:
file.h: expected ‘;’, ‘,’ or ‘)’ before ‘=’ token
file.h: error: unknown type name ‘bool’
使用 Makefile 编译时没有问题,但是当我将 qmake 与 Qt Creator 一起使用时,我得到了这些错误。我无法更改此标头,因为它已检入正在使用的代码中。
我有一个 Qt 项目,我正在尝试将其与无法修改的现有代码库集成。
请告诉我我的选择是什么?关闭“__cplusplus”标志?
【问题讨论】:
我试过了,还是不行。更大的问题是它位于外部“C”块中。 所以在这种情况下 __cplusplus 标志放在 extern C 打开和关闭周围。不知道为什么会这样。如您所见。 代码没有问题。正如您所说,它适用于普通的 Makefile。显然,您使用 Qt Creator 的方式有问题,它试图将代码编译为 C。您需要告诉我们更多关于您如何在 Qt Creator 中创建项目的信息,并且可能包括项目的 qmake.pro
文件。
【参考方案1】:
假设您的所有代码都是“*.cpp”文件中的 C++ 代码,请删除 extern "C"
块。
extern "C"
块的含义是告诉 C++ 编译器将块内的代码视为 C。显然函数声明 foo
和 bar
是 C++,而不是 C。
__cplusplus
宏由编译器(gcc、clang 等)定义,是 C++ 标准的一部分。
如果可能,请向编写“file.h”和现有代码库的人寻求说明。
【讨论】:
extern "C"
not 是否告诉编译器将代码视为 C。由于某些其他原因,编译器将整个文件视为 C。
从 OP 提供的信息来看,这是我能尝试的最好的方法。我无法发表评论,因为我没有足够的声誉。在这里投票有帮助吗?以上是关于Qt Creator 无法用 C 不兼容的代码编译外部“C”块的主要内容,如果未能解决你的问题,请参考以下文章
静态代码检查工具 cppcheck 的使用(可分别集成到VS和QT Creator里)
Qt Creator开发Android程序 如何调用C语言的dll