繁体   English   中英

命名空间和 extern 'C' 编译错误

[英]namespace and extern 'C' compilation errors

我试图用谷歌搜索错误,但无济于事。 也许我正在寻找错误的方向。 我正在尝试编译一个文件,但是当我厌倦了编译它时,编译器给了我以下错误:

C2059 语法错误:';'
C2059 语法错误:'}'
C2061 语法错误:标识符“namespace_name”
C2449 语法错误:在文件范围内找到“{”(缺少标头?)

在我的 code.c 文件中:

#ifndef myclass_c
#define myclass_c

#include "classA.h"
#include "classB.h"   
#include "conversionLib.h" // no namespace is being used here

namespace namespace_name {

// ... generated codes in C....
}
#endif

在 classA.h 和 classB.h 中:

#ifndef myclassA_h // myClassB_h if in classB
#define myclassA_h // myClassB_h if in classB

#include "classC.h"  // both classA and classB include classC.h

namespace namespace_name {
#ifdef __cplusplus
extern "C" {
#endif

// ... generated codes in C....

#ifdef __cplusplus
}
#endif
}
#endif

在 classC.h 中(与 classD.h 相同)

#ifndef myclassC_h // myclassD.h for classD.h
#define myclassC_h // myclassD.h for classD.h

#include "classD.h"  // no includes in classD.h

namespace namespace_name {
#ifdef __cplusplus
extern "C" {
#endif

// ... generated codes in C....

#ifdef __cplusplus
}
#endif
}
#endif

我究竟做错了什么? 或者我错过了什么? 任何建议将不胜感激。 如果这个问题/格式令人困惑,我深表歉意。 提前致谢

主要问题似乎是,您在.c文件中使用了 c++ 语法。 C 不支持命名空间!

extern "C"函数放入命名空间没有多大意义。 在 C++ 中,编译器做了一些称为“名称管理”的事情,它实际上将标识符的命名空间(例如类名、命名空间)和附加信息(如函数或模板参数)放入其符号名称中,该名称是链接器的输入.

extern "C"告诉 C++ 编译器不要这样做。 所以你失去了与周围命名空间的绑定(以及重载函数的可能性)。

如果函数被包含在 C++ 中,那么将它们放在一个特殊的命名空间中可能是一个不错的想法,但另一方面,大多数在 C 命名空间中的构建 y 使用函数名称的特殊前缀。 所以在 C++ 中,你最终会得到显式的 C++ 命名空间和隐式函数前缀命名空间。

如果您仍然希望在 C 函数周围使用 C++ 命名空间,则必须将命名空间定义包含在#ifdef __cplusplus块中。 (但我什至不知道 C++ 标准是否允许这样做)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM