STRICT type checking 严格的类型检查

来源:互联网 发布:高通网络解锁工具 编辑:程序博客网 时间:2024/05/29 12:32
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拷贝到你的源代码中的函数声明会被改变。而你的局部声明会过时,清除你的局部声明。
原创粉丝点击