我正在处理一个遗留的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
相比,不检查这些错误,希望能让人真正检查文档。