Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Marcin Grzegorczyk <mgrzegor@poczta.onet.pl> |
|---|---|
| Newsgroups | comp.std.c |
| Subject | Re: PRI* considered harmful |
| Date | 2011-07-11 23:29 +0200 |
| Organization | Just me |
| Message-ID | <ivfpvs$ie1$1@dont-email.me> (permalink) |
| References | (3 earlier) <lnhb6ux57t.fsf@nuthaus.mib.org> <ivfg2r$ej7$1@dont-email.me> <lnpqlgve7z.fsf@nuthaus.mib.org> <ivfjj2$74j$1@dont-email.me> <lnliw4vaic.fsf@nuthaus.mib.org> |
Keith Thompson wrote:
> Marcin Grzegorczyk<mgrzegor@poczta.onet.pl> writes:
>> Keith Thompson wrote:
>>> Marcin Grzegorczyk<mgrzegor@poczta.onet.pl> writes:
>> [...]
>>>> That's why I'd rather propose, instead of size, an enumeration with
>>>> distinct (implementation-defined) values for each valid type supported
>>>> by the implementation. A standardized macro could then map expression
>>>> type to an enumeration constant via the C1X generic selection construct
>>>> (i.e. no compiler magic needed); as an added benefit, the macro would
>>>> catch cases when a completely wrong type, like a floating-point or
>>>> structure type, is passed to a specifier that expects only integer types.
>>>
>>> But that wouldn't handle user-defined integer types, something that
>>> Greg's original proposal was *intended* to do.
>>
>> What user-defined types wouldn't it handle? Typedefs are just aliases
>> for existing types.
>
> The point is that you don't know *which* existing type a given type is
> an alias for.
But the whole point is to make it possible to pass information about
argument types to printf without knowing what the types are, isn't it?
[...]
>>> I'm not sure I see the benefit of the enumeration. It seems like
>>> just another set of semi-arbitrary names associated with each
>>> integer type.
>>
>> Yes, hence the standard would not need to list those names, just define
>> a macro to map, in an implementation-defined manner, types to values
>> expected by *printf(). In fact, you're right that enumeration is not
>> necessary; a plain int would suffice.
>
> I don't see how such a macro would work (unless it uses compiler magic,
> but in that case it isn't really a macro). Or am I missing something?
The macro could be defined like this:
#define TYPE_ID(expr) _Generic((expr), \
int : 0, \
unsigned int : 1, \
long : 2, \
unsigned long : 3, \
/* etc. */ )
That's the C1X generic selection construct. Of course, a real
implementation would use an enumeration or a set of #defines instead of
plain 0, 1, 2, 3 etc.
Then the new 'S' printf modifier (hmm, perhaps 'T' would match the
semantics better) could be used like this:
#define INTPARAM(arg) TYPE_ID(arg), arg
printf("%Ti", INTPARAM(foo));
>> [...]
>>> Ada, for example, has something called "attributes", whose syntax
>>> is a prefix, followed by an apostrophe, followed by a predefined
>>> attribute name. The maximum values of types Character, Integer, and
>>> Float are Character'Last, Integer'Last, and Float'Last, respectively.
>>
>> D has something similar called properties, with a much more C-like syntax:
>>
>> int foo;
>> long bar;
>> /* ... */
>> if (bar> foo.max) /* ... */
>>
>> But then, D actually is intended to be C designed from scratch :-)
>
> That could work. Of course you'd have to avoid collisions between
> property names and struct/union member names. Are the property
> names reserved? It could be confusing for "foo.max" to mean the
> maximum value of foo's type (when foo is an integer expression)
> and the "max" member (when foo is a struct expression).
AFAICT they are reserved only if they apply to the type (for example,
all types have .sizeof and .alignof properties, but only floating-point
types have an .epsilon property). Yes, it can be confusing.
--
Marcin Grzegorczyk
Back to comp.std.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
PRI* considered harmful "Greg A. Woods" <woods@robohack.org> - 2011-07-06 19:58 -0700
Re: PRI* considered harmful William Ahern <william@wilbur.25thandClement.com> - 2011-07-06 20:38 -0700
Re: PRI* considered harmful "Greg A. Woods" <woods@robohack.org> - 2011-07-06 22:26 -0700
Re: PRI* considered harmful Jens Gustedt <Jens.Gustedt@loria.fr> - 2011-07-07 08:52 +0200
Re: PRI* considered harmful "Greg A. Woods" <woods@robohack.org> - 2011-07-07 14:11 -0700
Re: PRI* considered harmful Jens Gustedt <Jens.Gustedt@loria.fr> - 2011-07-08 11:58 +0200
Re: PRI* considered harmful lawrence.jones@siemens.com - 2011-07-07 17:58 -0400
Re: PRI* considered harmful Jens Gustedt <Jens.Gustedt@loria.fr> - 2011-07-08 12:02 +0200
Re: PRI* considered harmful lawrence.jones@siemens.com - 2011-07-07 17:57 -0400
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-07 15:42 -0700
Re: PRI* considered harmful lawrence.jones@siemens.com - 2011-07-08 08:56 -0400
Re: PRI* considered harmful James Kuyper <jameskuyper@verizon.net> - 2011-07-07 06:36 -0400
Re: PRI* considered harmful "Greg A. Woods" <woods@robohack.org> - 2011-07-07 12:59 -0700
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-07 14:12 -0700
Re: PRI* considered harmful "Greg A. Woods" <woods@robohack.org> - 2011-07-07 15:49 -0700
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-07 16:46 -0700
Re: PRI* considered harmful "Greg A. Woods" <woods@robohack.org> - 2011-07-07 18:26 -0700
Re: PRI* considered harmful James Kuyper <jameskuyper@verizon.net> - 2011-07-07 22:35 -0400
Re: PRI* considered harmful "Greg A. Woods" <woods@robohack.org> - 2011-07-07 20:58 -0700
Re: PRI* considered harmful Wojtek Lerch <wojtek_l@yahoo.ca> - 2011-07-08 00:28 -0400
Re: PRI* considered harmful James Kuyper <jameskuyper@verizon.net> - 2011-07-08 07:41 -0400
Re: PRI* considered harmful "Greg A. Woods" <woods@robohack.org> - 2011-07-08 23:05 -0700
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-09 00:50 -0700
Re: [incorrectly implementd] PRI* considered harmful James Kuyper <jameskuyper@verizon.net> - 2011-07-09 06:38 -0400
Re: PRI* considered harmful Hans-Bernhard Bröker <HBBroeker@t-online.de> - 2011-07-09 21:07 +0200
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-08 09:52 -0700
Re: PRI* considered harmful Richard Kettlewell <rjk@greenend.org.uk> - 2011-07-08 11:45 +0100
Re: PRI* considered harmful "Greg A. Woods" <woods@robohack.org> - 2011-07-08 23:14 -0700
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-09 00:47 -0700
Re: PRI* considered harmful Richard Kettlewell <rjk@greenend.org.uk> - 2011-07-09 10:51 +0100
Re: PRI* considered harmful James Kuyper <jameskuyper@verizon.net> - 2011-07-09 06:43 -0400
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-08 09:49 -0700
Re: PRI* considered harmful "Greg A. Woods" <woods@robohack.org> - 2011-07-08 23:24 -0700
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-09 00:45 -0700
Re: PRI* considered harmful "Greg A. Woods" <woods@robohack.org> - 2011-07-09 16:18 -0700
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-09 18:57 -0700
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-13 09:37 -0700
Re: PRI* considered harmful James Kuyper <jameskuyper@verizon.net> - 2011-07-09 06:46 -0400
Re: PRI* considered harmful Harald van Dijk <truedfx@gmail.com> - 2011-07-09 08:09 -0700
Re: PRI* considered harmful Phil Carmody <thefatphil_demunged@yahoo.co.uk> - 2011-07-11 16:00 +0300
Re: PRI* considered harmful Hans-Bernhard Bröker <HBBroeker@t-online.de> - 2011-07-09 20:59 +0200
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-09 12:22 -0700
Re: PRI* considered harmful Hans-Bernhard Bröker <HBBroeker@t-online.de> - 2011-07-09 21:32 +0200
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-09 12:54 -0700
Re: PRI* considered harmful Marcin Grzegorczyk <mgrzegor@poczta.onet.pl> - 2011-07-09 23:39 +0200
Re: PRI* considered harmful "Greg A. Woods" <woods@robohack.org> - 2011-07-09 16:56 -0700
Re: PRI* considered harmful "Greg A. Woods" <woods@robohack.org> - 2011-07-09 16:52 -0700
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-09 18:53 -0700
Re: PRI* considered harmful Jens Gustedt <Jens.Gustedt@loria.fr> - 2011-07-10 14:12 +0200
Re: PRI* considered harmful Marcin Grzegorczyk <mgrzegor@poczta.onet.pl> - 2011-07-11 20:22 +0200
Re: PRI* considered harmful Jens Gustedt <Jens.Gustedt@loria.fr> - 2011-07-10 13:57 +0200
Re: PRI* considered harmful "Greg A. Woods" <woods@robohack.org> - 2011-07-09 16:49 -0700
Re: PRI* considered harmful Jens Schweikhardt <usenet@schweikhardt.net> - 2011-07-19 19:28 +0000
Re: PRI* considered harmful Tim Rentsch <txr@alumni.caltech.edu> - 2011-07-07 14:13 -0700
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-09 01:04 -0700
Re: PRI* considered harmful "Greg A. Woods" <woods@robohack.org> - 2011-07-09 17:23 -0700
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-09 19:03 -0700
Re: PRI* considered harmful Marcin Grzegorczyk <mgrzegor@poczta.onet.pl> - 2011-07-11 20:40 +0200
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-11 11:56 -0700
Re: PRI* considered harmful Marcin Grzegorczyk <mgrzegor@poczta.onet.pl> - 2011-07-11 21:40 +0200
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-11 13:16 -0700
Re: PRI* considered harmful Marcin Grzegorczyk <mgrzegor@poczta.onet.pl> - 2011-07-11 23:29 +0200
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-11 14:46 -0700
Re: PRI* considered harmful "Greg A. Woods" <woods@robohack.org> - 2011-07-12 22:18 -0700
Re: PRI* considered harmful Keith Thompson <kst-u@mib.org> - 2011-07-13 09:00 -0700
Re: PRI* considered harmful Richard Kettlewell <rjk@greenend.org.uk> - 2011-07-09 20:30 +0100
csiph-web