Re: Typechecking integral types, retaining most access.
In article [EMAIL PROTECTED] of Wed, 21 Aug 2002 10:19:27 in , David Evans [EMAIL PROTECTED] writes You could fake this by making them enum types: # ifdef S_SPLINT_S typedef enum { S_JUNK1 } seconds; typedef enum { S_JUNK2 } minutes; # else typedef int seconds; typedef int minutes; # endif If you used the -enumint flag, then you'll get the warnings you want for this. --- Dave On Wed, 21 Aug 2002, Simon Hosie wrote: Was searching the archives and found the post about using /*@abstract@*/ in a typedef. That's almost what I'm after, but it's much too obstructive for me. What I'd like is something along these lines: typedef /*@abstract@*/ int seconds; typedef /*@abstract@*/ int minutes; void test(void) { seconds tod_sec = (seconds)5; // legal minutes tod_min = (minutes)7; // legal tod_min++; // legal tod_sec = tod_min; // illegal tod_min = 10; // illegal if (tod_min tod_sec) // illegal ; } 'tod_min = 10' may be clear in context, but it could easily be obfuscated by macros or less obvious variable names... so I'd be happy to see it trapped. I suggest you look at Strong Type Checking introduced to the www.gimpel.com PC/Flexelint range in 1991. I recently posted news:[EMAIL PROTECTED] It shows errors given assignment type mismatches. The following shows the controls and the types; The controls could be in an initialisation file or on a command line. /*lint -strong(AXJ) -fhd Be fussy about typedef mismatches */ typedef signed long fruit; typedef fruit orange; typedef fruit banana; Of course, those products cost money. I am a BETA tester and no longer pay for my copies. -- Walter Briscoe
Typechecking integral types, retaining most access.
Was searching the archives and found the post about using /*@abstract*/ in a typedef. That's almost what I'm after, but it's much too obstructive for me. What I'd like is something along these lines: typedef /*@abstract*/ int seconds; typedef /*@abstract*/ int minutes; void test(void) { seconds tod_sec = (seconds)5; // legal minutes tod_min = (minutes)7; // legal tod_min++; // legal tod_sec = tod_min; // illegal tod_min = 10; // illegal if (tod_min tod_sec) // illegal ; } 'tod_min = 10' may be clear in context, but it could easily be obfuscated by macros or less obvious variable names... so I'd be happy to see it trapped.
Re: Typechecking integral types, retaining most access.
You could fake this by making them enum types: # ifdef S_SPLINT_S typedef enum { S_JUNK1 } seconds; typedef enum { S_JUNK2 } minutes; # else typedef int seconds; typedef int minutes; # endif If you used the -enumint flag, then you'll get the warnings you want for this. --- Dave On Wed, 21 Aug 2002, Simon Hosie wrote: Was searching the archives and found the post about using /*@abstract*/ in a typedef. That's almost what I'm after, but it's much too obstructive for me. What I'd like is something along these lines: typedef /*@abstract*/ int seconds; typedef /*@abstract*/ int minutes; void test(void) { seconds tod_sec = (seconds)5; // legal minutes tod_min = (minutes)7; // legal tod_min++; // legal tod_sec = tod_min; // illegal tod_min = 10; // illegal if (tod_min tod_sec) // illegal ; } 'tod_min = 10' may be clear in context, but it could easily be obfuscated by macros or less obvious variable names... so I'd be happy to see it trapped.