我正在尝试从 C 文件调用 C++ 函数,我已在 .h 文件中将函数声明为:
文件 a.h:
#ifdef __cplusplus
#define EXTERNC extern "C"
#else
#define EXTERNC
#endif
EXTERNC void func();
#undef EXTERNC
函数 func() 的定义存在于 a.cpp 文件中。
我有一个 b.c 文件,我想从中调用函数 func()。我在 b.c 中包含了 a.h 文件,并正常调用了函数 func()。但是在编译过程中出现以下错误:
编译 b.c a.h(192):错误 150:0:未启用 C++ 功能。
谁能帮我解决这个错误。
最佳答案
它看起来像是对 C 文件中的 C++ 代码的提示。您确实有一个 C 文件,因此请确保条件编译以正确的方式进行。
#ifdef __cplusplus
#ifdef COMING_FROM_B_C
#error __cplusplus is defined in inclusion from b.c
#endif
#define EXTERNC extern "C"
#else
#define EXTERNC
#endif
EXTERNC void func();
#undef EXTERNC
在 b.c
#define COMING_FROM_B_C 1
#include "a.h"
C 编译器被禁止预定义 __cplusplus
,但有些地方可能出了问题。
从您目前所说的情况来看,编译器似乎在 #ifdef __cplusplus
处停止。
尝试编译一个仅包含
#ifdef __cplusplus
#error problem
#else
#error OK
#endif
这应该在“OK”行标记错误。如果它做了任何其他事情,编译器就会(非常)有缺陷。
关于c++ - 获取错误 150 : C++ feature not enabled during compilation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18886726/