gpt4 book ai didi

c++ - Windows 编程和数据类型

转载 作者:行者123 更新时间:2023-11-28 00:43:10 25 4
gpt4 key购买 nike

我目前正在处理 Windows 应用程序项目。我正在使用 Windows API 开发它,我需要设置一些标准。

重要的是:

  1. 我应该使用 Windows 数据类型(DWORD、TCHAR、LPSTR...)还是标准数据类型?
  2. 我应该在我的代码中的所有地方使用它们还是只在代码的某些部分使用它们?

谢谢。

编辑:您如何看待 SAL 注释? http://msdn.microsoft.com/en-us/library/hh916382.aspx

我应该在头文件上使用它吗?

最佳答案

这个问题的一部分只是意见,但我的建议是:

我会对像 DWORD 这样的东西说"is"。您不应为 Windows 数据类型假定特定的基础类型。你应该只假设如果函数说它需要一个 DWORD,那么你需要为它提供一个 DWORD。它确保如果 Microsoft 更改了基础类型,那么您的代码应该仍然可以工作,无需更改或更改最少。

一个很好的例子是 WPARAMLPARAM 类型,我认为它们已经改变了几次。现在它们基本上被定义为“大到足以容纳一个指针”,这意味着它们在 32 位和 64 位 Windows 之间的大小不同。

我会对 LPCTSTR 之类的东西说不,因为对我来说,说 const TCHAR* 更清楚 - 整个“长指针”东西是 16 的遗物位 Windows。但是,请注意我说的是 const TCHAR* 而不是 const wchar_t*

当谈到在任何地方使用它时,我会说绝对不要在需要可移植的代码的任何部分使用它 - 尽管您可以在编译时创建自己的 typedef,其底层类型是 Windows 数据类型对于 Windows,例如:

typedef TickCount DWORD;

如果您尝试使用可能具有“滴答计数”概念并且需要在另一个操作系统上运行的代码,但此时您需要在您的代码和 Windows API 之间建立一个抽象层,我会很烦恼, 无论如何。

已编辑问题的更新:

我自己没有任何使用 SAL 的经验,但乍一看这并不是一个糟糕的主意。它明确了如何在不依赖文档的情况下使用参数,正如 MSDN 文档所说,他们将其与静态代码分析工具一起使用。如果你有这样的工具可以确认你是否正确使用了注释,对我来说这似乎是一件好事。我的直接 react 是,它确实使声明更难阅读,但通常定义 API 最困难的事情之一是确保预期的行为得到充分记录和理解。

关于c++ - Windows 编程和数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17773647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com