STRICT type checking 严格的类型检查

翻译 2006年05月27日 20:55:00
STRICT Type Checking
Windows.h头文件包含了定义,宏,和结构体帮助你写出可以在windows的不同版本中移植的源代码。当你在编译应用程序时定义了STRICT符号的时候,这些功能中的一些将被激活。下面的几个主题说明了STRICT功能的好处以及怎样使用它们来影响代码的编写。
Using STRICT使用严格类型检查-----------------
当你定义了STRICT符号,你就打开了需要在定义和使用类型时更加谨慎的功能(you enable features that require more care in declaring and using types)。这会帮助你写出更加易于移植的代码。这些额外的考虑也会减少你调试的时间。打开STRICT将会重新定义某些数据类型因此编译器将不允许没有显示转换(explicit cast)的赋值。这对windows代码尤其有用。传递数据类型错误会在编译的时候报告出来,而不是在运行时导致严重的错误。
当STRICT被定义,以下数据类型定义被改变:
特殊的句柄类型被定义为互斥的;比如:你不能将一个HWND传递到一个需要HDC类型参数的地方。如果没有STRICT,所有的句柄被定义为整形,因此编译器无法防止你在需要一种类型的句柄时使用另一种类型
所有的回调函数类型(比如对话框过程,窗口过程,和钩子过程)以完整的原型定义,这防止你定义回调函数时使用不正确的参数列表。
需要使用通用指针的参数和返回类型被正确的声明为LPVOID而不是像LPSTR或其它的指针类型。
COMSTAT结构体依照ANSI标准声明。
Disabling STRICT关闭严格类型检查--------------
在Visual C++中,严格类型检查缺省被定义
要关闭STRICT,定义符号"NO_STRICT".在6.0版本中打开工程设置(project settings)对话框,选择C/C++标签,在分类(Categories)里选择常规(general),在预处理定义(Preprocessor Definition)里键入NO_STRICT.你也可以在命令行指定定义,或者在组建中指定/DNO_STRICT作为编译选项。
To define NO_STRICT on a file-by-file basis (supported by C but not C++, as explained in the note that follows),在包含windows.h之前插入一句#define语句.
#define NO_STRICT
#include <windows.h>
为了产生最好的结果,你也需要设置错误消息警告级别到最小/W3.这对windows程序总是可行的,因为一个导致警告的编程实践如果不正确通常会导致运行时的严重错误。比如传递错误的数字作为参数。
STRICT Compliance遵从地规则------
一些源代码在打开严格类型检查时可能会编译出错。下面的片断讲述了使你的代码在严格类型检查时编译通过的最低条件。推荐做这些额外的步骤,尤其是在需要产生可移植代码的时候。
一般要求
最主要的要求是你必须声明正确的句柄类型和函数指针而不是更多的依靠通用类型。你不能在需要一种句柄类型的地方使用另一种类型。这也意味着你必须改变函数声明和使用更多的类型转换。为了达到最好的结果通用的HANDLE类型只在必要时使用。
声明你的程序中的函数
确保所有的应用程序函数被声明,推荐你将所有的函数声明放入一个包含文件中这样你可以容易的查看声明和寻找需要改变得参数和返回值。
如果你使用/Zg编译选项为你的函数产生头文件,请记住是否打开STRICT将会产生不同的结果。如果STRICT关闭所有的句柄类型被产生为相同的基类型。
任何你从windows.h拷贝到你的源代码中的函数声明会被改变。而你的局部声明会过时,清除你的局部声明。

相关文章推荐

生产环境浏览器Strict MIME TYPE Checking问题解决

X-Content-Type-Options: nosniff 与 不规范的响应类型 造成的影响

python 函数定义和内置函数isinstance以及数据类型检查type的使用

参考: http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013747384331...

Javascript 严格模式详解 "use strict"

[转] Javascript 严格模式详解 作者: 阮一峰 一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这...
  • dxjing
  • dxjing
  • 2016年01月19日 11:17
  • 174

javascript 严格模式 use strict

虽然很久之前就知道 javascript 的严格模式,但还是很少用到它。今天再好好学习一下。 大神阮一峰的日志有一篇博客: http://www.ruanyifeng.com/blog/2013/...

Javascript 严格模式use strict详解

一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:”严格模式”(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。二、.为什么用严格模...

Kotlin-28.类型检查和转换(Type Cast)

1.is和!is操作符(Operators),kotlin在运行时,可用is或!is操作符来检查对象类型是否符合要求;2.智能转换(Smart Casts),与java不同,Kotlin一般不需要显式...

JavaScript: 严格模式(use strict)

1、使用 "use strict" 指令    "use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。它不是一条语句,但是是一个字面量表达式,在 Ja...

"use strict"; ----Javascript 严格模式详解

一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。 设立"严格模...
  • wujiyue
  • wujiyue
  • 2015年09月12日 20:49
  • 305

JavaScript之严格模式 "use strict";

严格模式就是在代码片段的顶部加上一个字符串常量的语句"use strict";(也可以用单引号),它可以是全局的,也可以是局部的(function和eval两种局部作用域)。但是它必须是代码的第一...

Javascript 严格模式(use strict)详解

一、概述除了正常运行模式,ECMAscript 5添加了第二种运行模式:”严格模式”(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。 设立”严格模式”的目...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STRICT type checking 严格的类型检查
举报原因:
原因补充:

(最多只允许输入30个字)