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。显然函数声明 foobar 是 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

Qt Creator调用VS2008生成的DLL注意事项 good

Qt Creator - calloc 因内存大而失败

Qt creator 如何设置静态编译

qt creator 中 ui文件 怎么用编译界面修改?