使用用于 C++ 代码的标头编译 C 代码时未知类型名称 char16_t

Posted

技术标签:

【中文标题】使用用于 C++ 代码的标头编译 C 代码时未知类型名称 char16_t【英文标题】:Unknown Type name char16_t while compiling C code using a header that is used for C++ code 【发布时间】:2019-06-17 18:28:56 【问题描述】:

这是我的头文件,

样本.h

#pragma

#ifndef BASETYPES
#define BASETYPES

typedef char16_t WCHAR

#endif

这是我的 C 代码,

样本.c

WCHAR *name;
int main() 

上述头文件最初仅由 C++ 代码使用。现在我有一个 C 代码要编译,它使用相同的头文件。

当我使用 GCC 编译 C 代码时,出现以下错误,

"error G5688306C: unknown type name char16_t"

我读到了这个this,它看起来并不是一个真正的错误。

我面临的问题是否有任何解决方法或解决方法?请提出建议。

【问题讨论】:

如何编译代码? gcc -std=c++ sample.c 在使用char16_t之前尝试#include <uchar.h> 是的。但在 C++ 中,它已经是预定义的内置类型。只有C,我必须包含头文件对吗? @ShaikSyedAli 好吧,它需要至少使用-std=c++11 构建。 【参考方案1】:

char16_t 不是内置的 C 类型。它是由C++11 在uchar.h 标头中引入的。通过-std=c++11 启用通过 GCC 使用 C++11 功能。

如果不能使用 C++11,则必须使用其他类型。wchar_tuint16_t 可能有用。

【讨论】:

以上是关于使用用于 C++ 代码的标头编译 C 代码时未知类型名称 char16_t的主要内容,如果未能解决你的问题,请参考以下文章

当我使用标头时,C++ 函数会引发错误,但如果我在源代码中定义它则不会?

C++:当包含从类模板派生的类的标头时,编译器警告 C4505

在 C++ 共享库的标头中声明“外部“C””有啥影响?

用于类和结构之间交互的 C++ 语法

未知的 C++ 语句

哪些编译器选项用于在 Visual Studio 中编译 C++ STL 类/函数?