lint and enumerated types
    utzoo!duke!decvax!ucbvax!saks at LL-XN 
    utzoo!duke!decvax!ucbvax!saks at LL-XN
       
    Tue Jul 14 11:41:47 AEST 1981
    
    
  
From: Joft Saks <saks at LL-XN>
For some reason or another, our lint does not seem to like some things about
enumerated types.  I have included below two (unrelated) C-source files which
use enumerated types.
Note that in the first, I have used the feature which allows one to set a
particular value in the enum - list.  (Let's forget for a moment any qualms
we may have about said feature.)  Applications of lint to this program yield
the following message:
	"puterr.c", line 35: warning: nonportable character comparison
Applications of lint to the second program yield the message:
	stuff value used inconsistently "test.c"(12)  ::  "test.c"(20)
Ken Schroder (schroder at ll-asg) thinks older versions of lint may have trouble
with functions which return enumerated types.  If anyone else has encountered
troubles, or has some ideas/suggestions/comments/anything at all useful to say
about this, please let me know.  Many thanks.
--------------------------------------------------------------------------------
puterr.c
--------
/*
 * print an error message
 */
#include <stdio.h>
typedef enum
	{
	ERRNONE = -1,
	ERRNOTFOUND,
	ERRNOTPLAIN,
	ERRDIRACC,
	ERRNAMELONG,
	ERRREADACC,
	ERRWRITEACC,
	ERRCHNGSACC,
	ERRDIFFEXEC
	}
	tpserror;
tpserror puterr(e, progname, s)
	tpserror e;
	char *progname, *s;
	{
	static char *format[] =
		{
		"%s: can't find %s\n",
		"%s: %s is special file or directory\n",
		"%s: can't access containing directory %s\n",
		"%s: file name too long %s\n",
		"%s: no read privileges on %s\n",
		"%s: no write privileges on %s\n",
		"%s: can't access changes file for %s\n",
		"%s: can't execute 'diff' for %s\n"
		};
	if (e != ERRNONE)
		fprintf(stderr, format[(int)e], progname, s);
	return (e);
	}
--------------------------------------------------------------------------------
test.c:
-------
#include <stdio.h>
typedef enum
	{
	RED,
	GREEN,
	BLUE
	}
	color;
color stuff()
	{
	return (RED);
	}
main()
	{
	if (stuff() == RED)
		fprintf(stderr, "stuff == RED\n");
	else
		fprintf(stderr, "stuff != RED\n");
	exit(0);
	}
    
    
More information about the Comp.unix.wizards
mailing list