【56】UINT类型的函数返回return (UINT)-1;有什么意义?用return 0;或 return 1 替换行吗?

文章目录

  • 1 问题描述
  • 2 解释
    • 2.1 相当于return 0xffffffff
    • 2.2 return -1 非法
    • 2.3 反映一个函数运行状态

1 问题描述

UINT类型的函数返回return (UINT)-1; 有什么意义?

1.用return 0;或 return 1 顶替行吗?

2.为什么要把 -1 转化成UINT? 是不是想得到每个bit都是1的一个整数?

3.应用举例

//新线程
UINT MyThreadProc( LPVOID pParam )
{

	CMyObject* pObject = (CMyObject*)pParam;// 用pObject对象来完成某项工作

	if (pObject == NULL || !pObject->IsKindOf(RUNTIME_CLASS(CMyObject)))
	          return (UINT)-1;	////创建失败
	          
	return 0; // 线程正常结束

}

2 解释

2.1 相当于return 0xffffffff

含义:

  • (UINT)-1 会将 -1 转换为无符号整型,结果是最大的无符号整数值(0xFFFFFFFF);
  • 这是一种常见的错误码约定,特别是在Windows API中常用非零值表示错误;

return (UINT)-1;相当于return 0xffffffff;,但这样写一是麻烦二是容易出错

很多c/c++程序假定UINT(-1) == 0xffffffff 是个常识,所以很多地方都这么使用。

2.2 return -1 非法

因返回值是 UINT 类型, return -1; 非法

那问题来了 :用return 0;或 return 1 不行吗?

  • 可以用 return 1; 替换,因为任何非零值通常都表示失败;
  • 不建议用 return 0; 替换,因为 0 通常表示成功,会与错误处理的语义冲突;
  • 虽然可以用其他非零值替代,但保持使用-1是更规范的做法;

2.3 反映一个函数运行状态

觉这边好像不是返回一个值,好像是反映一个函数运行状态。

你可能感兴趣的:(C/C++,C++,MFC入门到精通,单片机,嵌入式硬件,C++,return,UINT-1)