// co-msc.lnt // Compiler Options for Microsoft C Version 8.0 and earlier -cmsc // This file contains options to allow PC-lint to process source // files for your compiler. It is used as follows: // // lint co-msc.lnt source-file(s) // -d_M_IX86=200 // assume Intel 80286 architecture -- modify to suit // We now support __declspec directly so that the following // option is now commented out. If trouble ensues you can // once again disable __declspec through this option. // -d__declspec()= // ignore this construct -d_declspec=__declspec // the single '_' version is occasionally used // while processing compiler (library) header files ... -wlib(1) // sets the warning level within library headers to 1 // (no warnings, just syntax errors). Comment out if you // are actually linting library headers. This // option makes obsolete options of the form -elib(axxx) where // xxx >= 400 which may be retained for historical reasons. -elib(652) // suppress message about #define of earlier declared symbols -elib(762) // suppress message about multiple identical declarations and -elib(760) // suppress message about multiple identical macro defs -elib(514) // allow #if | -elib(553) // undefined preprocessor variables assumed 0 // If you're programming MS Windows set the option // +e934 to report passing short auto pointers as arguments // See Petzold, Windows 3.0, pp 897-902 // You might also want to set the option: -printf(w2,wsprintf) // It makes wsprintf like sprintf except that pointers have // to be far. // SREGS, WORDREGS, BYTEREGS are defined in both bios.h and dos.h // and accordingly you MAY get type differences based on 'origin'. // If so, use the following options: // -etd(origin) // -elib(770) -format=%(%f(%l)\s:\s%)%t\s%n:\s%m // error format similar to MSC // Note that %c can also be used to specify column -e46 // allows bit-fields to be other than int or unsigned +fan // allow anonymous unions +fdi // Use directory of the including file -fdh // do not append a .h to header names -ffb // do not establish a separate scope for declares within for clauses -esym(123,min,max) // allows users to use min, max as variables -d_MSC_VER=700 // The version number of Microsoft C, for C6 make this 600 // For Visual C++ make it 800 -u__STDC__ // Needed for C 7.00 to allow use of open, close, etc. +rw(__inline) // activate the __inline keyword -d_inline=__inline // _inline is the same as __inline -sld10 // sizeof(long double) is 10. -function(exit,_exit) // _exit() is like exit() -function(exit,_assert) // _assert() is like exit() -emacro(734,putc) // don't complain about items being too large. -emacro(415,FP_SEG) // access of out-of-bounds pointer -emacro(740,FP_SEG,FP_OFF) // unusual casts -emacro(413,offsetof) // use of NULL pointer creates a stir -emacro(545,offsetof) // addressing an array member is OK -e793 // inhibit 'ANSI limit reached' -- // limits are impractically low with MSVC headers -esym(773,L_tmpnam) // defined with an unparenthesized '+' -esym(773,va_start,va_end,SIG_ERR) // defined with exposed operators. -emacro((???),va_arg) // the va_arg() macro can yield 415, 416, 661, 662 // 796 and 797 (out-of-bounds errors). // The following functions exhibit variable return modes. // That is, they may equally-usefully be called for a value // as called just for their effects. Accordingly we inhibit // Warning 534 for these functions. // Feel free to add to or subtract from this list. -esym(534,close,creat,fclose,fflush,_flsbuf,fprintf,fputc) -esym(534,fputs,fscanf,fseek,fwrite,lseek,memcpy,memmove,memset) -esym(534,printf,puts,scanf,sprintf,sscanf,strcat,strcpy) -esym(534,strncat,strncpy,unlink,write) // The following options are required by most compilers to // noiselessly process iostream.h -elib(1717) //empty prototypes -elib(522) //function return value ignored -elib(1053) //prototypes cannot be distinguished -elib(1721) //unusual operator =() declaration -elib(1720) //assignment op has non-const parameter -elib(655) // bitwise operator combining compatible enum's -elib(641) // converting enum's to int -elib(537) // repeated include file (ios.h) -elib(1511) // member (rdbuf) hides nonvirtual member -elib(1712) // default constructor not defined for class -elib(1736) // redundant access specifier -esym(1702,operator<<,operator>>) // both a member and an ordinary function // These functions return things that are frequently ignored. -esym(534,ostream::operator<<,istream::operator>>) // The following additional options seem to be needed. -elib(620) // el or one? (some constants end in 'l' not 'L') -elib(648) // overflow in computing constant (3<<16) -elib(659) // nothing follows '}' on some line -elib(723) // suspicious use of '=' -elib(747) //significant prototype coercion -elib(740) //unusual pointer casts -elib(1007) // virtual functions within extern "C" block -elib(1029) //default argument repeated -- can't dist. char, signed char -elib(1055) //call to rdbuf() questioned? -elib(1504) // apparently useless structs -elib(1708,1709) // minor C/C++ declaration conflict -elib(1707) // operator new declared w/o 'static' -elib(1722) // assignment op does not return reference -elib(149) // default argument found in C code. -elib(578) // declaration of time hides delaration of global time(). -elib(761) // two equivalent typedef declarations -elib(1065) // same name declared as "C" and not "C" -elib(1066) // same name declared as "C" and not "C" -elib(1704) // constructor with private access declaration -elib(1735) // default parameter within virtual function -elib(1748) // non-virtual base class included twice -elib(1759) // post-fix operator returns a reference // Special Notice: You may be receiving mysterious 1058 errors // when you use "iomanipulator"s. For example: // cout << setw(4) << 4; // results in Error 1058 (assigning a const to a ref) because the // manipulator setw returns a non-lvalue which is assigned to a reference. // This reflects an oversight in the Microsoft header file: iomanip.h // Therein you may change the declaration: // friend ostream& operator<<(iostream& s, IOMANIP(T) & sm) { ... // to: // friend ostream& operator<<(iostream& s, const IOMANIP(T) & sm) { ... // to reflect the fact that sm is not modified by this function.