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 与 不规范的响应类型 造成的影响
  • zhuyiquan
  • zhuyiquan
  • 2016年08月10日 16:32
  • 4598

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

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

是否该使用严格模式?use strict

其实这篇文章是在2012年就写的,想想自己落后了几年了。很早一段时间我就看到过介绍严格模式的文章,但当时还是没有重视,因为两种模式下的区别还是挺大的,长年的书写习惯让我不太想去改变。但后来在我优化自己...
  • a250758092
  • a250758092
  • 2017年08月04日 12:03
  • 385

Python 3.5 终于将 Type Hint(类型提示)官方化

Python 3.5 终于将 Type Hint(类型提示)官方化很久以前,我刚接触 Python 的时候,是很喜欢的,程序库很全,语法也很简单,一些在其他语言里要写很多行的事情,Python 里很少...
  • zzdjk6
  • zzdjk6
  • 2015年06月28日 00:41
  • 3136

mysql 严格模式 Strict Mode说明

本文将介绍mysql的严格模式strict mode,及使用这种模式需要注意的和与非严格模式在使用上的区别。建议开发环境使用严格模式以提高代码的质量及对数据的严谨性。...
  • fdipzone
  • fdipzone
  • 2016年01月31日 22:12
  • 19246

LabVIEW 严格类型VI

与严格类型VI相对应的是通用VI。它们之间的区别在那里呢? 我个人理解,所谓通用类型VI应该是这样一些VI,它们能够独立完成程序执行结果(独立完成或演示一个任务),换句话说,它并不需要与其它...
  • txpp520
  • txpp520
  • 2017年06月26日 10:08
  • 453

DataNode启动优化改进:磁盘检测并行化

前言 在本篇文章中,本人打算聊一个大家平常都会遇见到的场景:HDFS中的DataNode启动的问题。DataNode启动不是一件非常迅速的事情吗?这其中能有大问题?看到这里,如果你也是这么想的话...
  • Androidlushangderen
  • Androidlushangderen
  • 2016年11月20日 10:20
  • 2089

原生JS(3)严格模式、变量声明、类型

(七)严格模式 ①ECMAScript5 引入了严格模式(strict mode)的概念。 严格模式是为JavaScript定义了一种不同的解析与执行模型,在这种模式下,ECMA3Script中的一些...
  • qq20004604
  • qq20004604
  • 2016年08月07日 03:27
  • 1409

hive严格模式

hive严格模式
  • wisgood
  • wisgood
  • 2014年02月24日 22:55
  • 10613

javacript use strict 严格模式作用及深析

严格模式(strict mod)的作用: Strict mode是JavaScript1.8.5引进的技术,今天,所有主流的浏览器都在他们的最新版本中支持了严格模式(包括IE10,Opera12和A...
  • yummy_go
  • yummy_go
  • 2016年03月07日 15:09
  • 436
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STRICT type checking 严格的类型检查
举报原因:
原因补充:

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