Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Ben Bacarisse <ben.usenet@bsb.me.uk> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: Program to compute elapsed time, learning structures and functions |
| Date | 2015-10-10 20:56 +0100 |
| Organization | A noiseless patient Spider |
| Message-ID | <871td2ijkw.fsf@bsb.me.uk> (permalink) |
| References | <b151ca82-94b3-40ee-8444-2c0e61f5ed79@googlegroups.com> <mv8bku$22a$1@dont-email.me> <d861f166-2cc0-4879-80c3-68bb2759139d@googlegroups.com> <kfn8u7a25d7.fsf@x-alumni2.alumni.caltech.edu> <mvbe1p$3fb$1@dont-email.me> |
Bartc <bc@freeuk.com> writes:
> On 10/10/2015 14:57, Tim Rentsch wrote:
>
>> Here is another perspective for your consideration. My advice is
>> to disregard the advice of people who say not to use compound
>> literals. The main value of using compound literals is not
>> whether the code is shorter or longer (though in most cases it
>> will be shorter), but that it expresses what is needed directly
>> rather than indirectly.
>
> The problem is that, as they are implemented in C, they tend to have
> rather more clutter than is desired, which reduces the expressiveness.
>
>> struct time
>> seconds_to_time( Seconds seconds ){
>> return (struct time){
>> .hour = seconds / 60 / 60,
>> .minutes = seconds / 60 % 60,
>> .seconds = seconds % 60
>> };
>> }
>
> What would that last function look like without compound literals? Perhaps:
>
> struct time seconds_to_tims(Seconds seconds) {
> struct time T = {seconds/60/60, seconds/60%60, seconds%60};
> return T;
> }
>
> Not too bad.
That's comparing different things. If you want to de-clutter (and loose
a little clarity) by removing the designated initialisers and some of
the white space, the real equivalent code is
struct time seconds_to_tims(Seconds seconds) {
return (struct time) {seconds/60/60, seconds/60%60, seconds%60};
}
which is still shorter and more direct than your suggestion. You need
to state the type in both versions, but with the compound literal there
is no need to invent a name for a temporary object.
(Aside: I'm perplexed why statically-typed languages with type inference
did not gain more ground. It seems to me to the obvious way to static
type-checking without so much clutter.)
> Or even like this (less dependent on how struct time is
> defined and with fewer divide and mod operations):
>
> struct time seconds_to_tims(Seconds seconds) {
> struct time T;
> T.hours = seconds/3600;
> T.minutes = (seconds-T.hours*3600)/60;
> T.seconds = seconds-T.hours*3600-T.minutes*60
> return T;
> }
There are fewer / and % symbols in the source, but the number of divide
and mod operations is up to the compiler, and gcc on my machine does not
agree that yours re-write has fewer. Of course it might end up as you
say on some other system, but the point is that this is a micro-
optimisation that should not impede code clarity (at least not until
there is a good reason).
>> struct time
>> seconds_to_time( Seconds seconds ){
>> signed sign = seconds < 0 ? -1 : 1;
>> return (struct time){
>> .hour = seconds * sign / 60 / 60 * sign,
>> .minutes = seconds * sign / 60 % 60 * sign,
>> .seconds = seconds * sign % 60 * sign
>> };
>> }
>
> Perhaps an easier way is to take your original function and add this
> line at the start:
>
> if (seconds<0) return seconds_to_time(-seconds);
That may be easier but it does not produce the same result. Are you
saying Tim's intended result is the wrong one?
--
Ben.
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Program to compute elapsed time, learning structures and functions Alla _ <modelling.data@gmail.com> - 2015-10-09 02:36 -0700
Re: Program to compute elapsed time, learning structures and functions Bartc <bc@freeuk.com> - 2015-10-09 10:48 +0100
Re: Program to compute elapsed time, learning structures and functions Alla _ <modelling.data@gmail.com> - 2015-10-09 03:06 -0700
Re: Program to compute elapsed time, learning structures and functions Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-10-09 11:01 +0100
Re: Program to compute elapsed time, learning structures and functions Alla _ <modelling.data@gmail.com> - 2015-10-09 03:07 -0700
Re: Program to compute elapsed time, learning structures and functions Richard Heathfield <rjh@cpax.org.uk> - 2015-10-09 13:26 +0100
Re: Program to compute elapsed time, learning structures and functions Alla _ <modelling.data@gmail.com> - 2015-10-09 06:49 -0700
Re: Program to compute elapsed time, learning structures and functions Bartc <bc@freeuk.com> - 2015-10-09 16:20 +0100
Re: Program to compute elapsed time, learning structures and functions Alla _ <modelling.data@gmail.com> - 2015-10-09 09:27 -0700
Re: Program to compute elapsed time, learning structures and functions Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-10-09 19:29 +0100
Re: Program to compute elapsed time, learning structures and functions Keith Thompson <kst-u@mib.org> - 2015-10-09 14:06 -0700
Re: Program to compute elapsed time, learning structures and functions Bartc <bc@freeuk.com> - 2015-10-09 22:24 +0100
Re: Program to compute elapsed time, learning structures and functions Keith Thompson <kst-u@mib.org> - 2015-10-09 15:51 -0700
Re: Program to compute elapsed time, learning structures and functions Richard Heathfield <rjh@cpax.org.uk> - 2015-10-09 18:26 +0100
Re: Program to compute elapsed time, learning structures and functions Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-10-09 19:24 +0100
Re: Program to compute elapsed time, learning structures and functions Richard Heathfield <rjh@cpax.org.uk> - 2015-10-09 19:50 +0100
Re: Program to compute elapsed time, learning structures and functions Eric Sosman <esosman@comcast-dot-net.invalid> - 2015-10-09 15:56 -0400
Re: Program to compute elapsed time, learning structures and functions James Kuyper <jameskuyper@verizon.net> - 2015-10-09 15:31 -0400
Re: Program to compute elapsed time, learning structures and functions Tim Rentsch <txr@alumni.caltech.edu> - 2015-10-10 06:57 -0700
Re: Program to compute elapsed time, learning structures and functions Bartc <bc@freeuk.com> - 2015-10-10 17:25 +0100
Re: Program to compute elapsed time, learning structures and functions Bartc <bc@freeuk.com> - 2015-10-10 19:12 +0100
Re: Program to compute elapsed time, learning structures and functions Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-10-10 20:56 +0100
Re: Program to compute elapsed time, learning structures and functions Bartc <bc@freeuk.com> - 2015-10-10 21:52 +0100
Re: Program to compute elapsed time, learning structures and functions Keith Thompson <kst-u@mib.org> - 2015-10-10 17:57 -0700
Re: Program to compute elapsed time, learning structures and functions raltbos@xs4all.nl (Richard Bos) - 2015-10-11 10:09 +0000
Re: Program to compute elapsed time, learning structures and functions Bartc <bc@freeuk.com> - 2015-10-11 11:26 +0100
Re: Program to compute elapsed time, learning structures and functions Keith Thompson <kst-u@mib.org> - 2015-10-11 14:12 -0700
Re: Program to compute elapsed time, learning structures and functions Tim Rentsch <txr@alumni.caltech.edu> - 2015-10-15 10:51 -0700
Re: Program to compute elapsed time, learning structures and functions Keith Thompson <kst-u@mib.org> - 2015-10-15 11:25 -0700
Re: Program to compute elapsed time, learning structures and functions Tim Rentsch <txr@alumni.caltech.edu> - 2015-10-16 05:34 -0700
Re: Program to compute elapsed time, learning structures and functions Keith Thompson <kst-u@mib.org> - 2015-10-16 08:52 -0700
Re: Program to compute elapsed time, learning structures and functions Tim Rentsch <txr@alumni.caltech.edu> - 2015-10-15 10:46 -0700
Re: Program to compute elapsed time, learning structures and functions Bartc <bc@freeuk.com> - 2015-10-15 19:06 +0100
Re: Program to compute elapsed time, learning structures and functions Tim Rentsch <txr@alumni.caltech.edu> - 2015-10-16 05:24 -0700
Re: Program to compute elapsed time, learning structures and functions glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-10-17 00:10 +0000
Re: Program to compute elapsed time, learning structures and functions Barry Schwarz <schwarzb@dqel.com> - 2015-10-18 09:52 -0700
Re: Program to compute elapsed time, learning structures and functions Alla _ <modelling.data@gmail.com> - 2015-10-09 06:52 -0700
Re: Program to compute elapsed time, learning structures and functions Barry Schwarz <schwarzb@dqel.com> - 2015-10-18 10:21 -0700
Re: Program to compute elapsed time, learning structures and functions Alla _ <modelling.data@gmail.com> - 2015-11-05 00:56 -0800
Re: Program to compute elapsed time, learning structures and functions Barry Schwarz <schwarzb@dqel.com> - 2015-11-05 01:55 -0800
Re: Program to compute elapsed time, learning structures and functions Alla _ <modelling.data@gmail.com> - 2015-11-05 02:55 -0800
Re: Program to compute elapsed time, learning structures and functions Alla _ <modelling.data@gmail.com> - 2015-11-05 03:01 -0800
Re: Program to compute elapsed time, learning structures and functions Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-11-05 03:41 -0800
Re: Program to compute elapsed time, learning structures and functions Alla _ <modelling.data@gmail.com> - 2015-11-05 06:55 -0800
Re: Program to compute elapsed time, learning structures and functions Alla _ <modelling.data@gmail.com> - 2015-11-05 03:03 -0800
Re: Program to compute elapsed time, learning structures and functions Richard Heathfield <rjh@cpax.org.uk> - 2015-11-05 13:27 +0000
Re: Program to compute elapsed time, learning structures and functions Alla _ <modelling.data@gmail.com> - 2015-11-05 06:54 -0800
Re: Program to compute elapsed time, learning structures and functions Keith Thompson <kst-u@mib.org> - 2015-11-05 12:42 -0800
Re: Program to compute elapsed time, learning structures and functions Malcolm McLean <malcolm.mclean5@btinternet.com> - 2015-11-05 15:50 -0800
csiph-web