Ian*_*oyd 6 c windows types boolean
Windows BOOL数据类型有多大(以位为单位)?
微软定义的布尔数据类型为:
BOOL Boolean variable (should be TRUE or FALSE).
This type is declared in WinDef.h as follows:
typedef int BOOL;
Run Code Online (Sandbox Code Playgroud)
将我的问题转换为:
int数据类型有多大(以位为单位)?
编辑:在K&R之前.
假装我们正在创建一个类型化的编程语言和编译器.您有一个类型,表示逻辑上为True或False.如果您的编译器也可以链接到Windows DLL,并且您想要调用需要BOOL数据类型的API ,那么您将使用您的语言中的哪种数据类型传递/返回?
为了与Windows BOOL数据类型互操作,您必须知道BOOL的大小.问题转换为int的大小.但这是一个C/C++ int,而不是我们假装语言中的Integer数据类型.
所以我需要找到或创建一个与int相同大小的数据类型.
注意:在我原来的问题中,我不是在创建编译器.我用非C/C++语言调用Windows,所以我需要找到一个与Windows预期相同大小的数据类型.
Ree*_*sey 31
int是正式的"整数类型,大于或等于short int类型的大小,并且短于或等于long类型的大小." 它可以是任何大小,并且是特定于实现的.
它是4字节(32位),在Microsoft的当前编译器实现上(这是特定于编译器的,而不是特定于平台的).您可以在MSDN 的基本类型(C++)页面(靠近底部)上看到这一点.
基本类型的大小
Run Code Online (Sandbox Code Playgroud)Type Size ======================= ========= int, unsigned int 4 bytes
在代码方面,您始终可以通过以下方式计算出任何类型的位大小:
#include <windows.h>
#include <limits.h>
sizeof (BOOL) * CHAR_BIT
Run Code Online (Sandbox Code Playgroud)
但是,从语义的角度来看, BOOL 中的位数应该是1。也就是说,所有 BOOL 的非零值都应该一视同仁,包括TRUE的值。FALSE(即 0)是唯一应该具有特殊含义的其他值。严格遵守这条规则实际上需要一些思考。例如,要将 BOOL 转换为字符,您可以执行以下操作:
char a_CHAR_variable = (char) (0 != b_A_BOOL_variable);
Run Code Online (Sandbox Code Playgroud)
(如果您只是直接强制转换,那么 (1 << 8) 之类的值将被解释为 FALSE 而不是 TRUE。)或者如果您只想通过以下方式完全避免多值问题:
char a_CHAR_variable = !!b_A_BOOL_variable;
Run Code Online (Sandbox Code Playgroud)
如果您尝试将 BOOL 的各种不同值用于其他目的,那么您所做的很可能是错误的,或者至少会导致无法维护的事情。
由于这些复杂性,C++ 语言实际上添加了一个真正的 bool 类型。
| 归档时间: |
|
| 查看次数: |
6607 次 |
| 最近记录: |