ned*_*ech 0 c++ integer boolean dllexport
我正在处理一个遗留的 DLL,它有很多东西是从 DOS C 代码开始的,当时还没有布尔值的概念。但 DLL 仍在积极开发中并且仍在不断发展。许多旧的导出方法具有如下签名:
_declspec(dllexport) int IsConditionTrue();
Run Code Online (Sandbox Code Playgroud)
从名称来看,该函数应该返回TRUE
/FALSE
值,但由于它被声明为int
,程序员必须假设 API 可以返回任何内容。我正在对 DLL 进行一轮更改,并且想知道更改这些声明是否安全,BOOL
以代替澄清预期的 API 用法:
_declspec(dllexport) BOOL IsConditionTrue();
Run Code Online (Sandbox Code Playgroud)
BOOL
被声明为typedef int BOOL;
,所以我认为编译器或导出函数的已编译使用者应该没有区别,对吧?我只是不想对十几个导出函数进行更改,然后花一周的时间寻找并重新编译消耗导出版本的损坏的可执行文件int
。
BOOL
被声明为typedef int BOOL;
,所以我认为编译器或导出函数的已编译使用者应该没有区别,对吗?
是的,typedef
只是语法糖,对生成的 ABI 没有影响。
也就是说,这BOOL
并不会让代码对最终用户来说更安全,它仍然可以返回 以外的值TRUE
,FALSE
并且编译器会很乐意接受这样的代码。此外,与不祥的情况相比,用户可能会变得更加“懒惰”,不会检查这些错误int
,这有望使人们真正检查文档。
归档时间: |
|
查看次数: |
80 次 |
最近记录: |