c++将导出的DLL函数从int转换为BOOL是否安全?



我正在处理一个遗留的DLL,其中有许多东西是从DOS C代码开始的,在没有布尔值概念的日子。但是DLL仍在积极发展中,仍在不断发展。许多旧的导出方法都有这样的签名:

_declspec(dllexport) int IsConditionTrue();

从名字上看,函数应该返回一个TRUE/FALSE值,但由于它被声明为int,程序员必须假设API可以返回任何值。我正在对DLL进行一轮更改,我想知道将这些声明更改为使用BOOL来澄清预期的API使用是否安全:

_declspec(dllexport) BOOL IsConditionTrue();

BOOL被声明为typedef int BOOL;,所以我认为编译器或已经编译的导出函数的消费者应该没有区别,对吗?我只是不想改变一打导出的函数,然后花一周的时间追踪和重新编译消耗导出的int版本的损坏的可执行文件。

BOOL被声明为typedef int BOOL;,所以我认为编译器或已经编译的导出函数的消费者应该没有区别,对吗?

是的,typedef只是语法糖,对生成的ABI没有影响。

也就是说,BOOL并没有使代码对最终用户更安全,它仍然可以返回TRUE,FALSE以外的值,编译器会很乐意接受这样的代码。此外,用户可能会变得更加"懒惰"。与不祥的int相比,不检查这些错误,希望能让人真正检查文档。

最新更新