PCLint选项详解
PC-LINT使用说明(newest)

PC-LINT使用说明1.概述 (2)2.如何安装PC-LINT (3)3.LINT 一个C文件 (3)3.1用命令行方式进行LINT (4)3.2 在Source Insight中集成 (4)3.3LINT选项 (6)4.LINT一个工程下的多个C文件 (7)4.1为何要LINT多个C文件 (7)4.2如何LINT一个工程下的多个C文件 (8)4.3简单的LINT多个文件 (9)5. 通过准则 (10)第一类:不能出现的警告信息 (10)第二类:需要确认的警告 (10)6. PC-LINT的配置 (11)附一 Options.lnt (12)附二 Std.lnt (14)附三 Env-si.lnt (14)LINT工具是一种软件质量保证工具,许多国外的大型专业软件公司,如微软公司,都把它作为程序检查工具,在程序合入正试版本或交付测试之前一定要保证通过了LINT检查,他们要求软件工程师在使用LINT时要打开所有的编译开关,如果一定要关闭某些开关,那么要给出关闭这些开关的正当理由。
可想而知,如果从我们编码后第一次编译程序时就使用LINT来检查程序,并且保证消除所有的LINT告警,我们就不会遇到象今天这么多的告警信息。
即使在今天,我们如果能抽出一定的精力来消除程序中的LINT告警,以后再维持这种无告警状态就是很容易的了。
我们程序质量的提高也是不言而喻的。
PC-LINT是GIMPEL SOFTWARE公司的产品,其中的内容是非常广泛的,光是选项就有300多个,涉及到程序编译及语法使用中的方方面面。
本篇培训材料旨在引导读者入门,学会PC-LINT的基本使用方法,起抛砖引玉的作用,能让读者从这里起步继续去研究如何娴熟地使用PC-LINT的各种选项,能让它充分为我们的开发工作服务。
1.概述如果要给LINT工具下一个形象点的定义,那就是:一种更加严格的编译器。
它不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。
PC-lint简明教程(CC++静态代码检查工具)

PC-lint简明教程(CC++静态代码检查⼯具)前⾔PC-lint是⼀款⼩⽽强⼤的C/C++静态代码检查⼯具,它可以检查未初始化变量,数组越界,空指针等编译器很难发现的潜在错误。
在很多专业的软件公司如Microsoft,PC-Lint检查⽆错误⽆警告是代码⾸先要过的第⼀关。
安装配置有关安装步骤,请参考附录中的⽂章“静态代码检查⼯具PC-Lint“的“4 PC-Lint软件使⽤⽅法”,不过该⽂章使⽤的是VC++ 6.0的开发环境,最新的PC-lint 9.0⽀持VS2008,可以在安装过程中⾃⼰选择。
关于PC-lint和VS2008的集成,请参考PC-Lint安装⽬录下的env-vc9.lnt⽂件,⾥⾯讲解的⾮常之详细,不必参考“静态代码检查⼯具PC-Lint”这篇⽂章中的该段内容(如果你的E⽂不是很好,那参考⼀下中⽂还是有帮助的)。
在env-vc9.lnt⽂件中的Simple Check部分,有如下⼀段内容:Arguments: -i"c:/lint" std.lnt env-vc9.lnt "$(ItemFileName)$(ItemExt)"建议使⽤以下⼀段新的Arguments:Arguments: -i"c:/lint" std.lnt env-vc9.lnt "$(ItemDir) $(ItemFileName)$(ItemExt)"作⽤是在检查代码的⽣成结果中,可以双击某⼀个检查结果直接定位到代码中的某⼀⾏,缺点是检查结果会更长⼀点,因为它使⽤了全路径。
依照env-vc9.lnt的说明配置完成后,在VS2008的Tools菜单下会有四个PC-lint的选项,如下图所⽰。
常见错误1. 在PC-lint的Configuration向导结束后,会在PC-lint的安装⽬录下⽣成std.lnt⽂件,⾥⾯有⼀⾏:options.lnt -si4 -sp4如果按照“静态代码检查⼯具PC-Lint“⾛完所有的标准配置的话,options.lnt会⾃动⽣成,但⽆内容(注释除外),如果中间某⼀步skip了,可能该⽂件就不会⽣成,这时就需要⼿动创建⼀个options.lnt⽂件,或在std.lnt中注释掉options.lnt,否则会在使⽤PC-lint时会出现找不到options.lnt的错误。
pclint 规则自定义-概述说明以及解释

pclint 规则自定义-概述说明以及解释1.引言1.1 概述PCLint是一款流行的静态代码分析工具,用于帮助开发人员提高代码质量和发现潜在的bug。
其强大的规则检测能力使得开发人员能够在编译阶段就发现一些潜在的程序错误,从而帮助节省修复成本和提高代码的健壮性。
本文将重点介绍PCLint规则的自定义功能,通过自定义规则,开发人员可以根据项目的具体需求和编码规范来定制一些特定的规则,从而更好地适应项目的实际情况,提高代码质量和开发效率。
在接下来的章节中,我们将介绍PCLint的基本概念和规则自定义的方法,以及一些实例来帮助读者更好地理解和应用PCLint规则自定义功能。
通过本文的学习,读者将能够更好地利用PCLint工具来改善代码质量,并提高软件开发的效率和质量。
1.2文章结构文章结构部分的内容:文章结构是指文章的整体框架和组织方式。
一个清晰的文章结构可以帮助读者更好地理解文章的内容。
在本文中,我们将按照以下结构来展开讨论:1. 引言部分将介绍本文的背景和意义,概述PCLint规则自定义的重要性以及本文的目的和结构。
2. 正文部分将详细介绍PCLint的简介,包括其功能和特点。
然后将介绍PCLint规则定制的方法,以及如何自定义PCLint规则来满足特定的需求。
3. 结论部分将总结本文的主要内容和观点,提出应用建议,以及展望未来可能的发展方向。
通过以上结构的安排,我们将全面而系统地介绍PCLint规则自定义的相关知识,帮助读者更好地理解和应用这一技术。
1.3 目的在本文中,我们的主要目的是介绍如何通过自定义规则来定制PCLint 的规则,以满足不同项目的代码检查需求。
通过了解PCLint 的规则定制方法和实例,读者可以更好地理解如何根据项目特点和要求,制定符合实际情况的代码规范,提高代码质量和可维护性。
同时,我们也希望通过本文的分享,促进开发团队对代码规范的重视,提高团队的整体开发效率和项目质量。
代码走查工具—PCLint

14
PC-Lint常用选项
-function(function0, function1, …)选项
这个选项一般情况下主要是用来表示function1及后面省略掉的函数 和function0有类似的行为。
如:-function(malloc, mymalloc1, mymalloc2)表示mymalloc1, mymalloc2和malloc有类似的行为,因为malloc是用来分配内存的, 所以pc-lint在检查mymalloc1和mymalloc2时也会想检查malloc一样 看是否有释放掉
象上一页里已经定义了AddNode为保存内存的函数,如果碰到还有 一个函数AddEvent也是有保存内存的功能,我们除了可以使用sem(AddEvent, custodial(2))外,也可以使用-function(AddNode, AddEvent), 效果是一样的。不过要注意的是AddEvent保存内存的参 数也要和AddNode一样是第2个。
17
PC-Lint常用选项
其他一些常用选项还有
-elib 抑制库头文件的告警 -elibsym 抑制库头文件中某个符号的告警 -wlevel 设置告警级别 -efile 用来抑制一个或多个文件里的告警 -efunc 用来抑制一个或多个函数里的告警 +rw 设置保留关键字 等等。 象-efile, -wlevel这些告警不要轻易使用 这些选项的具体用法请看pc-lint.pdf文件
15
PC-Lint常用选项
-format选项
这个选项主要是用来设置输出告警消息格式的, 以便于可以和编辑环境格式一样,便于自动定位 到告警对应的源代码
PCLint使用指南

Copyright 2008 Authors: Liu Feixiang Email : openlek@ This LICENSE page is part of An Overview on Numerical Analysis Software, You cannot remove the License page. Permission is granted to copy, distribute and/or modify this document, provided the text of this NOTICE is retained, a notice that the code was modified is included with the above COPYRIGHT NOTICE and with the COPYRIGHT NOTICE in the LICENSE file, and that the LICENSE file is distributed with the modified code. Specifically, I want to make sure that you have the right to share copies. LICENSOR MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. MAKES NO REPRESENTATIONS OR WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANYPARTICULAR PURPOSE OR THAT THE USE OF THE LICENSED SOFTWARE COMPONENTS OR DOCUMENTATION WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
Pclint选项

董祖雄-e1551 //析构函数必须catch所有的Exceptions-e1540 //析构函数中必须对所有指针型的成员变量赋值成NULL-e1740 //析构函数中必须对所有指针型的成员变量赋值成NULL-e731 //两个布尔表达式比较,例如 ( false != ...) 或者 ( false == ... )-e1775 //捕获异常通用语句, catch(...)-e737 //赋值语句中, int赋给unsigned int, 导致符号丢失-e713 //调用函数中, 形参是unsigned int, 调用者给予的是int, 导致符号丢失-e732 //调用函数中, 形参是unsigned int, 调用者给予的是long, 导致符号丢失-e740 //强制结构体指针类型转化齐新征// Syntax Errors-e40 // 不再查找NULL-e1058 // Initializing a non-const reference 'struct __rb_tree_base_iterator &' with a non-lvalue// Internal Errors// Fatal Errors// Warnings-e641 //把enum作为int类型使用-e661 //检查数组是否越界,该选项默认应该打开,这里检查单个文件时可以关闭// Informational-e1776 //Converting a string literal to char * is not const safe -e818 //Pointer parameter 'infoPtr' (line 152) could be declared as pointing to const-e1762 //Member function 'McbApsHaMgr::ProcBBackupBegin(void)' could be made const-e1764 //Reference parameter 'msg' (line 1354) could be declared const ref-e715 //检查是否冗余参数,默认打开,检查单个文件时可以关闭// Elective Notes-e1904 //C风格注释不再检查指针类型的强制转换,pclint不允许这样,但是我们有很多代码都用到了,所以建议关闭赵雪山////zhaoxsh added-w3 //设置告警级别1-4,检查时可从1开始,逐步排除,建议检查到Level 3 即可-esym(40,__null) //it says __null is undeclared//my own filter-e30 //Error -- Expected a constant//-esym(429,pOmMo) //pointer pOmMo can't be free until it is unregistered from all-emacro(740,feof) /* ignore errors in macro */-e611 //arning -- Suspicious cast-e661 //Warning -- Possible access of out-of-bounds pointer-e662-e796//end of my own filter-e537 //warning -- Repeated include file-e574 //Signed-unsigned mix with relational-e578 //Warning -- Declaration of symbol hides symbol-e620 //Warning -- Suspicious constant (L or one?))-e1512 //destructor for base class is not virtual-e668 //Warning -- Possibly passing a null pointer to function-e671 //Possibly passing to function 'memcpy(void *, const void *, unsigned int)' a negative value//out put in level 3-e650 //Warning -- Constant out of range for operator *-e613 //Warning -- Possible use of null pointer in left argument to operator -e716 //while(1) is allowed-e766 //Info -- Header file not used in module-e785 //Info -- Too few initializers for aggregate//such as char* myarray[10] = {NULL};-e1774 //Info --Could use dynamic_cast to downcast polymorphic type-e1926 //Note --class member's default constructor implicitly called --Effective C++ #12-e1927 //Note -- Symbol did not appear in the constructor initializer list -e1928 //Note --Base Class did not appear in the constructor initializer list) -- Effective C++ #12wql-e1904 //C风格注释-e1926 //构造函数中初始化成员-e1927 //构造函数中初始化成员。
实验一 单元静态测试工具pclint的使用(1)

2.在下面填入command:C:\lint\lint-nt.exe
3.arguments:-u -ic:\lint std.lnt $(FileName)
4.initial directory:$(FileDir)
e Output Window打上勾
6.close完成。
shiyan2.c(51) : Info 716: while(1) ...
_
2、Delay();
shiyan2.c(56) : Warning 522: Highest operation, function 'Delay', lacks
side-effects、
intscoreMath;
intscoreMusic;
};
void main()
{
struct STUDENT stu[30] = {{1,"杨过","男",{1999,12,20},90,83,72,82},{2,"郭靖","男",{1999,07,06},78,92,88,78},
{3,"小龙女","女",{1999,07,06},89,72,98,66},{4,"郭襄","女",{1999,07,06},78,95,87,90}};
{
t->second=0;
t->minute++;
}
if (t->minute==60)
{
t->minute =0;
t->hour++;
}
PC-Lint选项详解

-spFP# :
-spD# :
-spP#
:
-smp# :
-smpD# :
-smpP# :
-smpNP# :
-smpFP# :
-sw#
:
PCLint选项详解
size of far data pointer,缺省值为6 size of far prog pointer,缺省值为6 size of data ptrs,缺省值为4和6 size of program ptrs,缺省值为4和6,near为4,far为6 size of all member ptrs,缺省值为4 size of member ptr (data),缺省值为4 size of member ptrs (prog),缺省值为4 size of member ptr (Near Prog),缺省值为4 size of member ptr (Far Prog),缺省值为4 size of wide char,缺省值为2
-efile(#,<File>) 对指定文件禁止输出告警号为#的消息 -efunc(#,<Func>) 对于函数Func,禁止输出告警号为#的消息 -elib(#) : 对于库头文件禁止输出告警号为#的消息 -elibsym(#) : 对于所有库头文件中的符号禁止输出告警号为#的消息,此告警不同于
elib之处在于-elib(#)仅仅当分析头文件时不输出相应的告警,如果你在源程 序中使用了会导致告警#的变量等,在分析源程序时还是会告警的,因此要 想完全的关闭该告警,使其在头文件和源文件中均不出现,请使用本选项
第3页,共19页
PCLint选项详解
-emacro(#,Symbol) 对于宏Symbol,当其展开时禁止输出告警号为#的消息
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PCLint选项详解目录1 错误信息禁止选项 32 变量类型大小选项 43 冗余信息选项 54 标志选项 55 格式输出选项86 其它选项97 编译器相关选项138 各种使用说明148.1 库模块文件的使用148.2 汇编(非C、C++)文件的处理158.3 强类型158.4 PCLint的预处理符178.5 选项的处理顺序178.6 使告警最大化179 附录:PCLint在Source Insight中的使用189.1 Source Insight的正规表达式18以下为PC-lint for C/C++ (NT) Ver. 7.50v版本配置参数的详细解释及用法举例。
LINT选项可以放在注释中,例如:/*lint option1 option2 ... optional commentary */ 选项可以有多行//lint option1 option2 ... optional commentary 选项仅为一行选项间要以空格分开,lint命令一定要小写,并且紧跟在/*或//后面,不能有空格。
如果选项由类似于操作符和操作数的部分组成,例如-esym(534, printf, scanf, operator new),其中最后一个选项是operator new,那么在operator和new中间只能有一个空格。
选项还可以放在宏定义中,当宏被展开时选项才生效。
例如:#define DIVZERO(x) /*lint -save -e54 */ ((x) /0) /*lint -restore */ 允许除数为0而不告警LINT的选项很多共有300多种,大体可分为以下几类:I. 错误信息禁止选项说明:“-”:表示禁止输出相应的错误消息“+”:表示允许输出相应的错误消息“#”:允许使用通配符“?”和“*”除了900级别(900-999)和1900(1900-1999)级别的告警消息缺省是关闭的外,其它的告警消息缺省均是打开的。
-e# :禁止输出告警号为#的消息-e(#) :对于下一个表达式禁止输出告警号为#的消息!e# :在本行禁止输出告警号为#的消息--e(#) :对当前的整个表达式禁止输出告警号为#的消息-eai :整型数子类参数不一致,如:char/short vs. int-ean :名义上的参数不一致,如:字节数相同(都是32位)的int和long等-eas :参数大小相同,如:如果int和pointer字节数相同,那么如果f()的参数应该是pointer的话,用f(3)整型数调用就会报错,设置此项可以关闭告警-eau :参数类型一致,但是符号类型不一致,如:unsigned int和int以上四个选项主要用于非原型的旧风格的C语言程序。
其中eas涵盖了ean和eau。
-efile(#,<File>) 对指定文件禁止输出告警号为#的消息-efunc(#,<Func>) 对于函数Func,禁止输出告警号为#的消息-elib(#) :对于库头文件禁止输出告警号为#的消息-elibsym(#) :对于所有库头文件中的符号禁止输出告警号为#的消息,此告警不同于elib之处在于-elib(#)仅仅当分析头文件时不输出相应的告警,如果你在源程序中使用了会导致告警#的变量等,在分析源程序时还是会告警的,因此要想完全的关闭该告警,使其在头文件和源文件中均不出现,请使用本选项-emacro(#,Symbol) 对于宏Symbol,当其展开时禁止输出告警号为#的消息-emacro((#),Symbol)对于宏Symbol,当其展开时禁止输出告警号为#的消息,与上一个选项的区别是它会先将宏加上一对括号再判断,如:#define DIVIDE( n , m ) n / m那么它会在宏展开时将n / m看作( n / m )来处理。
用处不是很大。
-epn :名义上的指针不一致,如:对于指向字节数大小相同的变量的指针-eps :指针指向的类型不同,但大小字节数相同-epu :指针指向的类型仅仅符号不一致-epp :指针指向的类型不确定-epuc :指针指向的字符串类型,其符号不一致-epnc :指针指向的字符串类型,仅仅名义上不同-esym(#,Symbol) 对于指定的符号Symbol(可以是变量名、函数名等),禁止输出告警号为#的消息,符号Symbol中可以使用通配符*和?。
-e#的级别比较高,因此对于-e714 +esym( 714,alpha ),后一个选项将不起作用-etd(<TypeDiff>) 对于TypeDiff类型,忽略不同地方对其的类型定义不同,用于旧风格C-w<Lev> :设置告警级别(0,1,2,3,4),0表示不打印任何告警消息,用于先关闭所有告警,然后打开部分告警-wlib(<Lev>) 对库(文件)设置告警级别II. 变量类型大小选项说明:不同的目标机、编译系统变量类型的的大小(如短整型变量、整型变量等)会有所不同,该类选项用于为目标机设置变量类型的大小。
-sb# :设置一个字节的比特数,缺省值为8-sc# :sizeof(char),缺省值为1-slc# :sizeof(long char),缺省值为2-ss# :sizeof(short),缺省值为2-si# :sizeof(int),缺省值为4-sl# :sizeof(long),缺省值为4-sll# :sizeof(long long),缺省值为8-sf# :sizeof(float),缺省值为4-sd# :sizeof(double),缺省值为8-sld# :sizeof(long double),缺省值为16-sp# :sizeof(all pointers),缺省值为4和6-spN# :size of near ptrs,缺省值为4-spF# :size of far ptrs ,缺省值为6-spND# :size of near data pointer,缺省值为4-spNP# :size of near prog pointer,缺省值为4-spFD# :size of far data pointer,缺省值为6-spFP# :size of far prog pointer,缺省值为6-spD# :size of data ptrs,缺省值为4和6-spP# :size of program ptrs,缺省值为4和6,near为4,far为6-smp# :size of all member ptrs,缺省值为4-smpD# :size of member ptr (data),缺省值为4-smpP# :size of member ptrs (prog),缺省值为4-smpNP# :size of member ptr (Near Prog),缺省值为4-smpFP# :size of member ptr (Far Prog),缺省值为4-sw# :size of wide char,缺省值为2III. 冗余信息选项说明:“-”:表示仅输出到文件stdout“+”:表示同时输出到文件stdout和stderr使用格式:{-+}v[oish#][mf<int>]冗余信息指的是LINT过程中产生的一些与编译过程有关的信息,而不是指真正的告警信息、错误信息等。
是否生成这些信息可以通过-v和+v选项来决定。
+v是生成这些信息,-v 是关闭这些信息,这组选项中除+v外,其它所有选项都可以关闭+v选项。
以下选项可以出现0或多个:o :输出命令行和注释行中包含的配置i :输出所使用的配置文件名(lnt文件)s :输出内存消耗数量h :输出严格的类型层次图(输出结果类似于DOS命令tree的结果)# :附加文件ID,用于判断文件是否相同以下选项一次只能出现一个:m :输出模块名(缺省就是输出模块名)f :输出所有文件名(此选项包含m选项)<int> :每条消息打印为int行(此选项包含f选项)IV. 标志选项说明:“+”:表示打开该开关(即设置标志为1)“-”:表示关闭该开关(即设置标志为0)“++”:表示增1“--”:表示减1标志选项用于打开或关闭对某类语法情况的处理。
后面两个选项(++和--)用于你想在局部改变开关取值,而不影响全局设置的情况。
例如你可以这样使用:/*lint ++flb */int printf( );/*lint --flb */fab :支持缩略式结构,如:s.a.b如果不会引起歧义的话,可以缩写为s.b。
很少有编译器支持这种功能。
缺省值为OFFfai :指针参数是否初始化(不初始化将告警),缺省值为ONfan :是否支持匿名联合,用于结构变量的说明,对C缺省值为OFF,C++为ON fas :是否支持匿名结构,类似于fan,缺省值同上fba :Bit位寻址能力(可访问性),缺省值为OFFfbc :是否支持布尔类型常量0b...,缺省值为OFFfbo :是否允许bool, true, false关键字,缺省值为ONfbu :是否强制比特位域为无符号数,缺省值为OFFfcd :是否区分cdecl说明符,缺省值为OFFfce :遇到#error时是否继续运行,缺省值为OFFfcp :强制使用C++处理方式,缺省值为OFF+fcp表示其后的模块文件将被强制作为C++程序对待处理。
-fcp表示按照扩展名使用缺省的处理方式。
例如:lin +fcp a1.c a2.c a3.c -fcp a4.c a5.cpp,其中a1.c、a2.c和a3.c将被作为C++程序进行Lint,而a4.c和a5.cpp按照缺省的方式(C和C++)进行Lint。
fct :生成标签(说明:结构名、枚举名就是一种标签Tag),缺省值为OFF fcu :char型总是作为unsigned,缺省值为OFFfdc :C++中是否区分char、unsigned char、signed char,缺省值为ONfdh :是否为头文件名附加'.h',缺省值为OFFfdi :是否从头文件目录(而非当前目录)开始搜索头文件,缺省值为OFF fdl :是否指针之差为long型数,缺省值为OFF,即int型数fdr :检查函数的返回模式(返回值是否被使用等,旧风格的C),缺省值为OFF feb :是否允许枚举类型做位域,缺省值为ONfem :是否支持非紧靠式修饰符,如:pascal int f();和int pascal f();对于某些编译器只支持后一种紧靠式说明,缺省值为OFFffb :For语句生成代码块(Block),缺省值为ONffd :是否使float拓宽为等于double,缺省值为OFFffn :输出文件的全路径名,缺省值为OFFffo :在生成每条告警后是否调用fflush()立即存入文件,缺省值为ONfhd :是否采用增强型类型定义层次判断,缺省值为ONfhg :是使用图形字符(ON)还是ASCII字符(OFF)来显示类型层次图,缺省值为ONfhs :是否自动将基于typedef的强类型形成类型层次,缺省值为ONfhx :强索引类型是否通过类型层次相关,缺省值为ONfie :等同枚举类型和整型,缺省值为OFFfil :是否对标号进行缩排检查,缺省值为OFFfim :能否使用-i包含多个包含路径,缺省值为ONfiq :忽略缺省的限定词,如Large模式下的far就是可忽略的,缺省值为OFF fis :整型常量是否有符号,如对常量0xFFFF,此标志为On时解释为负数,Off时解释为正数,缺省值为OFFfkp :是否使用K&R预处理方式(非ANSI的C标准),缺省值为OFFflb :是否强制将其作为库程序代码对待,缺省值为OFFflc :是否允许使用long char类型变量,缺省值为OFFflf :是否分析库函数定义(C++),缺省值为OFFfll :是否允许使用long long int类型变量,缺省值为OFFfln :是否不忽略#line命令,缺省值为ONfmd :是否允许多次重复定义,缺省值为OFFfna :(C++)是否允许使用操作符new[],缺省值为ONfnc :是否允许使用嵌套注释,缺省值为OFFfnt :(C++)class类中是否允许嵌套使用struct,union等,缺省值为ONfod :生成Lob文件时是否输出所有对象声明用于模块间检查,缺省值为OFF fol :生成Lob文件时是否输出所有库中对象,缺省值为OFFfpa :退出前是否暂停,缺省值为OFFfpc :指针强制类型转换后是否保留左值特性,缺省值为OFF例如:使int指针pi指向下一个字节的地址,标准用法是( * ( char ** ) &pi ) ++;一种普遍的简化方法是(( char * ) pi ) ++;但是后面一种用法对于标准C来说强制类型转化使pi失去了左值特性,因此无法对其进行++操作,如果你的编译器支持后一种写法,请将本开关置为ON。