C中的结构编译器问题
Struct compiler problems in C
以下内容可以从.cpp文件中包含,编译器不会抱怨它。
typedef struct _SomeName {
char NameID[MaxSize];
UserId notUsed;
UserInstance instance;
bool operator==(const struct _SomeName& rhs) const
{
return (strncmp(NameID, rhs.NameID, MaxSize) == 0);
}
bool operator!=(const struct _SomeName& rhs) const { return !(*this == rhs); };
} SomeName;
如何重写上面的内容,以便可以从.c文件中包含它?
到目前为止发布的其他解决方案存在一个问题,即您无法在混合了C和C++的项目中使用它。从你的问题来看,我猜你可能想这么做。如果你尝试这样做,你可能会得到无声的未定义行为,因为结构在不同的翻译单元中可能有不同的布局。
我建议这个版本:
typedef struct
{
char NameID[MaxSize];
UserId notUsed;
UserInstance instance;
} SomeName;
#ifdef __cplusplus
inline bool operator==( SomeName const &lhs, SomeName const &rhs )
{
return strcmp(lhs.NameID, rhs.NameID) == 0;
}
inline bool operator!=( SomeName const &lhs, SomeName const &rhs )
{
return !operator==( lhs, rhs );
}
#endif
假设类型UserId
和UserInstance
的声明在作用域中,您应该能够编写以下内容:
typedef struct _SomeName {
char NameID[MaxSize];
UserId notUsed;
UserInstance instance;
#ifdef __cplusplus
bool operator==(const struct _SomeName& rhs) const
{
return (strncmp(NameID, rhs.NameID, MaxSize) == 0);
}
bool operator!=(const struct _SomeName& rhs) const { return !(*this == rhs); };
#endif
} SomeName;
您无法获得c++结构的确切功能,但如果使用__cplusplus
条件,则可以省略部分,c编译器将不会编译。
typedef struct _SomeName {
char NameID[MaxSize];
UserId notUsed;
UserInstance instance;
#ifdef __cplusplus
bool operator==(const struct _SomeName& rhs) const
{
return (strncmp(NameID, rhs.NameID, MaxSize) == 0);
}
bool operator!=(const struct _SomeName& rhs) const { return !(*this == rhs); };
#endif
} SomeName;
如果在c和c++中都需要equal和not equal运算符,我建议您从结构中删除运算符定义,并编写一个实现SomeNameEquals
和SomeNameNotEquals
函数的纯c接口。
相关文章:
- C++模板类中结构的编译器问题
- C++ std::function 对于类 exept 的所有实例都是空的(只有 Visual2019 编译器问题)
- 无法安装 R 包 "nloptr"(Ubuntu 16.04 上的 R3.6.2) - C++编译器问题
- 'std::filesystem::d irectory_iterator' 编译器问题
- C 代码问题?编译器问题?代码块
- 函数返回本地变量,尽管变量不超出范围,没有编译器问题,并且代码执行
- Linux Opensuse C 编译器问题.(无法初始化部分调试器的解压缩状态)
- C GCC功能模板超载编译器问题
- GCC4MBED 编译器问题 (C++)
- C 和 CXX 编译器问题 - 多个定义
- C++Cant do Loan Calculator:计算和编译器问题
- C++编译器问题
- C++编译器问题:3>cl:命令行错误 D8016:'/clr'和'/arch:SSE2'命令行选项不兼容
- 编译器问题:iostream不工作
- C中的结构编译器问题
- CodeBlocks编译器问题,C++
- Debian上的Qt Creator编译器问题
- 编译器问题或c语言代码块中的一些错误
- Ifstream在编译器问题
- c++中多态类的编译器问题