【问题标题】:Anyone know where a good windows constant list lives任何人都知道一个好的 Windows 常量列表在哪里
【发布时间】:2008-12-09 21:41:17
【问题描述】:

我正在尝试将无效值设置为 -1.. 但我不喜欢幻数.. 任何人都知道在哪里可以找到一组公共常量。我在 VS6 (ish) 中工作。

我正在尝试从网络中读取文件,我需要一个错误的文件总大小值,所以我知道我是否获得了有效信息。0 是有效大小,所以我不能用那个。

哈珀谢尔比一针见血.. 只是一个小拇指。 他提到了win32常量..这正是我在想的..现在找到一个链接:)

【问题讨论】:

  • 我不确定您要什么?例如,为什么不定义自己的常量?
  • 每个人都这样做.. 我可以做到.. 但我宁愿使用一些标准的东西.. 就像你 SetLastError 一样......恕我直言,使用 WINERROR.H 中的值总是更好跨度>
  • 具有讽刺意味的是,这个问题目前有 INVALID_FILE_SIZE 票。让我们保持不变。 ;-)
  • 你不能只问“嘿,我在哪里可以得到一个无效的 num 啊?”。这取决于您调用的域和特定函数。
  • 我得到了答案!我不明白对问题的否定投票。它是明确的、具体的和可回答的。我想要一个 VS 中可用的一些常量的一般列表。我使用 -1 作为示例,一个用例。也许我的下一个问题应该是最好学什么语言,或者你最喜欢的彩色咖啡杯。

标签: c++ mfc constants visual-c++-6 numerical


【解决方案1】:
#define BAD_VALUE -1

编辑:原始问题没有上下文。修改后的问题表明您想要一个无效的文件大小,因此正在寻找 win32 常量。看看windows.h,我认为您寻求的常数可能在windows.h 或其子包含之一中。 grep 你的 windows 包含目录 ;-)

【讨论】:

    【解决方案2】:

    如果 -1 是系统中返回值的无效值,则应在内部定义它:

    const int INVALID_FOO = -1
    

    除非需要 C 兼容性,在这种情况下

    #define INVALID_FOO -1
    

    将是首选。如果它是标准 MFC 或 Windows 资源,请使用 INVALID_HANDLE 或其他 Win32 定义的常量之一。

    【讨论】:

    • 我在寻找 win32 定义的常量列表。
    • 我喜欢枚举 { INVALID_FOO = -1 };
    • @litb:如果我要定义一个枚举,我喜欢给它起一个相关的名称,但如果你不小心,这可能会有点冗长。
    【解决方案3】:

    您想使用自己的幻数 -1 伪装成 Windows 常量。这是非常具有误导性的。

    假设我碰巧知道 INVALID_HANDLE 为 0。可以用 INVALID_HANDLE 初始化我的指针吗?

    char *myMessage = INVALID_HANDLE;
    

    这让你印象如何?

    【讨论】:

    • 可读.. mymessage 中有什么.. 哦,句柄无效.. 我不应该使用它。地狱谁在乎它是什么.. INVALID_HANDLE 可能是 43264 .. 如果我测试。 if(myMessage == INVALID_HANDEL) printf("消息没有被初始化");为我工作...
    【解决方案4】:

    在 VS 中,创建一个新的 windows 控制台应用程序项目。进入项目设置并打开浏览支持。创建一个 C++ 文件并将其添加到项目中。类型:

    #include <windows.h>
    void main(void) {}
    

    进入文件。编译它。现在在文件中输入 INVALID_FILE_SIZE。右键单击它并转到 INVALID_FILE_SIZE 的定义。 VS 将打开许多包含已定义值的 Windows 头文件之一。享受吧。

    【讨论】:

      【解决方案5】:

      首先你应该使用无符号整数作为文件大小,因为文件大小永远不会是负数。现在无效的文件大小通常是最大 int,因此在使用 32 位无符号 int 的情况下,它将是 0xFFFFFFFF

      const unsigned int INVALID_FILESIZE = 0xFFFFFFFF;
      

      另外,如果这是在 windows 上,windows.h 定义了无效的文件大小(INVALID_FILE_SIZE)

      【讨论】:

        【解决方案6】:

        如果您想使用 WinApi 使用的常量,请查看 WinError.h、WinUser.h 和 WinNT.h 文件。

        【讨论】:

          【解决方案7】:

          一般认为 0 和 1(正负)可以直接使用。

          事实上,改用变量可能会让你的代码更加混乱。

          更新:好的,您在我写完答案后更新了您的问题。如果您以算术方式使用“-1”,则只需“-1”即可。如果您返回错误代码(并且代码恰好是 -1),那么您应该使用 const。

           const int INVALID_VALUE = -1;
          

          【讨论】:

          • 这真的不是使用什么的问题,但是谢谢。我的意思是我将使用一个 const/define 变量。我只是在寻找一些 Windows 编程附带的标准变量。像 MB_OK 或 ID_YES、VK_ENTER……它们易于阅读且可用……这更像是一种好奇心。
          • 有趣的是,每当我问一个真正的问题时,我都会投下反对票,没有人会在评论上说“你能详细说明一下吗”或任何其他内容。我不是最有经验的程序员,但是,嘿,我的问题引出了某个地方。
          【解决方案8】:
          If bytes_read < 0
              // error
          EndIf
          

          【讨论】:

          • A.我在那里没有看到一个列表,B。我在那里没有看到一个常数。 C. 由于 bytes_read 是一个无符号变量,它永远不会小于 0(假设与问题有关)
          • @baash05:“我正在尝试从网络中读取文件,我需要一个错误的文件总大小值,所以我知道我是否获得了有效信息.. 0是有效尺寸,所以我不能使用它。”看起来像一些 fread() 风格的函数,它返回读取的字节数,或者错误时返回 -1(
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-21
          • 1970-01-01
          • 2010-10-20
          • 1970-01-01
          • 2011-06-10
          • 2011-02-28
          相关资源
          最近更新 更多