我正在围绕 C++ 库创建 C 包装器。 执行此操作时常犯的一个错误是函数声明和定义由于某种原因(拼写错误、重命名、添加/删除参数等)不匹配。
例如:
// enabledata.h
MDS_C_API const char* motek_mds_enable_data_get_enable_command_name();
// enabledata.cpp
const char* motek_mds_enable_data_enable_command_name() { ... }
名称不匹配,但由于缺少这些函数的作用域,不会导致任何编译错误,只会在稍后显示为链接错误。
我希望编译器通过使用全局作用域运算符来帮助我找到这些错误:
const char* ::motek_mds_enable_data_get_disable_command_name() { ... }
如果函数尚未声明,这将显示为编译错误,这正是我想要的。
但是,当函数返回 typedef 时,这不起作用:
int32_t ::motek_mds_enable_data_is_enabled(const Data* a_Data) { ... }
这将导致尝试使用
int32_t
作为范围,这当然会导致错误:
left of '::' must be a class/struct/union
有什么办法可以做到这一点?当然也欢迎更好的选择。
我目前正在使用 Visual Studio 2015 Update 2.
你总是可以用括号括起declarator-id:
int32_t (::motek_mds_enable_data_is_enabled)(const Data* a_Data) { ... }
// ^ ^
另一种延迟指定返回类型的解决方案:
auto ::motek_mds_enable_data_is_enabled(const Data* a_Data) -> int32_t { ... }