Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #3987

Re: Non-constant initializers

Path csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!aioe.org!eternal-september.org!feeder.eternal-september.org!.POSTED!not-for-mail
From Uncle Steve <stevet810@gmail.com>
Newsgroups comp.lang.c
Subject Re: Non-constant initializers
Date Sat, 14 May 2011 18:21:56 -0400
Organization Friends of the Galactic Collective
Lines 210
Message-ID <0896a686ef8c492-f7e5e@gmail.com> (permalink)
References <0ca8ca5b-e73e-418a-935f-0fcc17fdf404@q14g2000prh.googlegroups.com> <iqgp2j$h9h$1@gosset.csi.cam.ac.uk> <OgcdY5.Lcq.Cst0A@btdt.invalid> <iqhpa0$n31$1@dont-email.me> <e68b19561ee2543-31bc7@gmail.com> <iqhrt1$v8n$1@dont-email.me> <9322eedb3a632f5-29a98@gmail.com> <iqmhp7$l57$1@dont-email.me> <70b21f510c7390e-cc0de@gmail.com> <iqmnr0$6an$1@dont-email.me>
Mime-Version 1.0
Content-Type text/plain; charset=us-ascii
Content-Transfer-Encoding 8bit
Injection-Info mx03.eternal-september.org; posting-host="UJ+SW6EYtZE9LcEeFRrivQ"; logging-data="5717"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19/QZhAPdqNTlmc9xUcGNnL"
User-Agent nn 6.7.3
Content-Length 7201
Cancel-Lock sha1:85qaAPCZraVT3ZmmMDolHd59LJE=
Xref x330-a1.tempe.blueboxinc.net comp.lang.c:3987

Show key headers only | View raw


On Sat, May 14, 2011 at 04:14:20PM -0500, Shao Miller wrote:
> On 5/14/2011 2:25 PM, Uncle Steve wrote:
> >On Sat, May 14, 2011 at 02:30:58PM -0500, Shao Miller wrote:
> >>On 5/14/2011 12:59 PM, Uncle Steve wrote:
> >>>On Thu, May 12, 2011 at 06:53:02PM -0500, Shao Miller wrote:
> >>>>Some more questions:
> >>>>
> >>>>- When do you wish this initialization to occur?  Prior to main()?
> >>>
> >>>In a perfect world.
> >>>
> >>
> >>Ok.  So now: Why?  (Please see next response.)
> >
> >>>>- Could you employ and enjoy an init() function which would initialize
> >>>>these objects, then make that the first call inside main()?
> >>>>
> >>
> >>No answer to this one?  If the very first thing main() does is to call
> >>an init() which populates your globals' values, then that init() makes
> >>for a nicely-readable section of code to gather these items into one 
> >>place.
> >
> >You're making this too easy.  What could be cleaner than a variable
> >declaration outside of main() which also initializes it to the value it
> >should have before main() is called?
> 
> Ok, so my impression now is that by "cleaner," you mean that such 
> reduces keyboard typing redundancy by having the value population appear 
> alongside the declaration, thus avoiding typing the identifier's name 
> again within an init() function.

Yeah.
 
> >I'm fully aware that I can
> >assign a value to a variable any time I write code or macros to do it,
> >but there are certain kinds of application parameters, for instance,
> >which you may derive empirically, and assign once.  I should think
> >that most programmers know about these types of variables.
> 
> Ah, now this gives me the impression that not only are you interested in 
> restoring saved settings, but that you'd _also_ like to be able to 
> compute things using C functions, and have those computation results 
> available at compile-time.  Perhaps something like declaring an array 
> with a number of elements which is 'pow(5, 6)'.  Do I understand your 
> wish correctly?

I didn't say anything about having function return values available
at compile-time.  I can't even imagine why someone would want to do
such a thing.

> >>>>- In your code example, is howmuchfoo() supposed to be returning an
> >>>>array of 'int' or a single 'int'?
> >>>
> >>>I don't see how that's relevant to the question.
> >>>
> >>
> >>Well it's an opportunity to suggest that C functions do not return
> >>arrays, as far as I know.  If howmuchfoo() was a macro that expanded to
> >>an initializer list, then I believe that'd be fine.
> >
> >It could do just about anything if it was a C function, couldn't it?
> >
> 
> Perhaps not in a standard, portable sense.  As an example, we have 
> n1256.pdf, section 6.5.2.2, point 1:
> 
>   "The expression that denotes the called function...shall have type 
> pointer to function returning void or returning an object type other 
> than an array type."

Ok, I guess that's what it says.
 
> >>>>- Is your request a matter of being able to read, in your code, what
> >>>>will be computed for an object in the immediate vicinity of the object,
> >>>>rather than in another place (such as an init() function)?
> >>>
> >>>That all depends on what kind of data the variables are going to hold.
> >>>One time, I might want to save/restore window size and positioning,
> >>>and in another place, the volume setting of application sounds.  It is
> >>>impossible to say, a priori, what variables will be used/set where, at
> >>>least at this stage of the design process.
> >>>
> >>
> >>My question there wasn't too clear and I apologize.  What I am trying to
> >>understand is why you might be inclined to avoid something like the
> >>init() suggestion.  Is it a matter of:
> >>
> >>   int saved_setting = get_saved_setting();
> >>
> >>looking nicer, to you, at file scope, than:
> >>
> >>   int saved_setting;
> >>   /* ... */
> >>   void init(void) {
> >>       saved_setting = get_saved_setting();
> >>       /* ...Other globals populated... */
> >>       return;
> >>     }
> >>   /* ... */
> >>   int main(void) {
> >>       /* Populate globals */
> >>       init();
> >>       /* ... */
> >>     }
> >>
> >>?
> >
> >This is fine, and I've in fact done just that in code I've written
> >previously.  But see above.
> 
> It's also nicely symmetrical if you have a save_settings().  The 
> suggested init() might as well be called restore_settings() or 
> load_settings().
 
> But your "see above" suggests (to me) that you are interested in 
> computations which are needed in order to affect _compile-time_ 
> decisions, rather than _run-time_ decisions.

That might be true.  I have a hash function that could be exactly
tuned to have the optimum number of buckets.  In theory.
 
> >>>>- Would you be willing to use macros to accomplish this?
> >>>
> >>>I'll think about it.
> >>>
> >>
> >>Ok.  Good fortune to you. :)
> >
> >I'm big on macros, but sometimes they clutter up the code with
> >redundant code blocks that are deader than a doornail.  Maybe the
> >compiler will weed them out with global CSE, maybe not.  If they
> >aren't in the code to begin with, they can't possibly get into the
> >instruction cache.
> 
> One possible way to achieve _something_like_ the _look_ of the 
> declarations calling functions might be the following example "uncle.c":
> 
>   #ifndef GLOBAL_INITS
>   #  define TYPE(x) x
>   #  define INIT(x) {0}
>   #else
>   #  undef TYPE
>   #  define TYPE(x)
>   #  undef INIT
>   #  define INIT(x) x
>   #endif /* GLOBAL_INITS */
> 
>   #ifndef GLOBAL_INITS
>   #include <stdio.h>
> 
>   #endif /* GLOBAL_INITS */
>   /*** Globals */
>   TYPE(int) saved_setting = INIT(get_saved_setting());
>   TYPE(int) saved_setting2 = INIT(get_saved_setting2());
>
>   #ifndef GLOBAL_INITS
>   int get_saved_setting(void) {
>       /* TODO: Actually fetch the saved setting */
>       return 3;
>     }
> 
>   int get_saved_setting2(void) {
>       /* TODO: Actually fetch the saved setting */
>       return 5;
>     }
> 
>   void init(void) {
>       #define GLOBAL_INITS 1
>       #include "uncle.c"
>       #undef GLOBAL_INITS
>       return;
>     }
> 
>   int main(void) {
>       init();
>       printf("saved_setting: %d\n", saved_setting);
>       printf("saved_setting2: %d\n", saved_setting2);
>       return 0;
>     }
> 
>   #endif /* GLOBAL_INITS */
> 
> That's still kind of ugly. :)

Yup.  Recursive includes are considered harmful to the normal human
mind.  Banned in some jurisdictions where programmer-cruelty laws hold
sway.
 
> However this would not help with a wish to call C functions in order to 
> compute something which needs to influence compile-time decisions, such 
> as the size of an array declared at file-scope.  I think that folks 
> usually have a separate C program perform such computations, then output 
> C source, which is then compiled with the rest of your code; code 
> generation.

Or you might want to size your buffers as a percentage of total
physical RAM.  There are several scenarios where this would be
convenient.



Regards,

Uncle Steve

-- 
Should a professional politician be charged with molestation if he
kisses babies while attending political rallies?

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Non-constant initializers Fred the Freshwater Catfish <usenet.fred@bdtd.invalid> - 2011-05-12 22:59 +0000
  Re: Non-constant initializers Ian Collins <ian-news@hotmail.com> - 2011-05-13 11:07 +1200
    Re: Non-constant initializers Fred the Freshwater Catfish <usenet.fred@bdtd.invalid> - 2011-05-12 23:17 +0000
      Re: Non-constant initializers Ian Collins <ian-news@hotmail.com> - 2011-05-13 11:20 +1200
        Re: Non-constant initializers Fred the Freshwater Catfish <usenet.fred@bdtd.invalid> - 2011-05-12 23:30 +0000
          Re: Non-constant initializers Ian Collins <ian-news@hotmail.com> - 2011-05-13 11:34 +1200
            Re: Non-constant initializers Keith Thompson <kst-u@mib.org> - 2011-05-12 16:52 -0700
              Re: Non-constant initializers Fred the Freshwater Catfish <usenet.fred@bdtd.invalid> - 2011-05-14 00:13 +0000
                Re: Non-constant initializers Seebs <usenet-nospam@seebs.net> - 2011-05-14 01:28 +0000
                Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-14 13:52 -0400
                Re: Non-constant initializers kym@kymhorsell.com - 2011-05-14 01:54 +0000
                Re: Non-constant initializers Columbus sailed the ocean China Blue <chine.bleu@yahoo.com> - 2011-05-14 01:07 -0700
                Re: Non-constant initializers kym@kymhorsell.com - 2011-05-14 09:22 +0000
                Re: Non-constant initializers Fred the Freshwater Catfish <usenet.fred@bdtd.invalid> - 2011-05-14 17:14 +0000
            Re: Non-constant initializers Fred the Freshwater Catfish <usenet.fred@bdtd.invalid> - 2011-05-14 00:11 +0000
  Re: Non-constant initializers Shao Miller <sha0.miller@gmail.com> - 2011-05-12 18:08 -0500
    Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-12 19:22 -0400
      Re: Non-constant initializers Shao Miller <sha0.miller@gmail.com> - 2011-05-12 18:53 -0500
        Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-14 13:59 -0400
          Re: Non-constant initializers Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-05-14 14:19 -0400
            Re: Non-constant initializers Shao Miller <sha0.miller@gmail.com> - 2011-05-14 15:04 -0500
            Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-14 15:10 -0400
              Re: Non-constant initializers James Kuyper <jameskuyper@verizon.net> - 2011-05-14 16:01 -0400
                Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-14 16:57 -0400
          Re: Non-constant initializers Shao Miller <sha0.miller@gmail.com> - 2011-05-14 14:30 -0500
            Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-14 15:25 -0400
              Re: Non-constant initializers Keith Thompson <kst-u@mib.org> - 2011-05-14 13:05 -0700
                Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-14 17:00 -0400
              Re: Non-constant initializers Shao Miller <sha0.miller@gmail.com> - 2011-05-14 16:14 -0500
                Re: Non-constant initializers Shao Miller <sha0.miller@gmail.com> - 2011-05-14 16:49 -0500
                Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-14 18:21 -0400
                Re: Non-constant initializers Shao Miller <sha0.miller@gmail.com> - 2011-05-14 21:26 -0500
                Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-15 14:01 -0400
              Re: Non-constant initializers Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-05-14 17:45 -0400
                Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-14 18:09 -0400
                Re: Non-constant initializers Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-05-15 04:01 +0100
                Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-15 13:26 -0400
                Re: Non-constant initializers Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-05-16 02:32 +0100
              Re: Non-constant initializers Seebs <usenet-nospam@seebs.net> - 2011-05-15 03:59 +0000
                Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-16 04:49 -0400
                Re: Non-constant initializers pete <pfiland@mindspring.com> - 2011-05-16 07:27 -0400
                Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-16 09:24 -0400
                Re: Non-constant initializers Seebs <usenet-nospam@seebs.net> - 2011-05-16 19:10 +0000
                Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-16 21:23 -0400
                Re: Non-constant initializers Seebs <usenet-nospam@seebs.net> - 2011-05-16 19:10 +0000
                Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-16 21:16 -0400
                Re: Non-constant initializers James Kuyper <jameskuyper@verizon.net> - 2011-05-16 21:37 -0400
                Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-16 22:42 -0400
                Re: Non-constant initializers Seebs <usenet-nospam@seebs.net> - 2011-05-17 02:40 +0000
                Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-16 22:50 -0400
                Re: Non-constant initializers Seebs <usenet-nospam@seebs.net> - 2011-05-17 04:14 +0000
                Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-17 17:37 -0400
                Re: Non-constant initializers Seebs <usenet-nospam@seebs.net> - 2011-05-17 22:22 +0000
                Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-17 18:33 -0400
                Re: Non-constant initializers Malcolm McLean <malcolm.mclean5@btinternet.com> - 2011-05-18 01:58 -0700
                Re: Non-constant initializers Uncle Steve <stevet810@gmail.com> - 2011-05-18 12:45 -0400
                Re: Non-constant initializers "io_x" <a@b.c.invalid> - 2011-05-18 19:30 +0200
                Re: Non-constant initializers Dr Nick <3-nospam@temporary-address.org.uk> - 2011-05-18 20:01 +0100
                Re: bug-free C code (was: Non-constant initializers) Seebs <usenet-nospam@seebs.net> - 2011-05-19 02:21 +0000
                Re: bug-free C code (was: Non-constant initializers) Keith Thompson <kst-u@mib.org> - 2011-05-18 20:00 -0700
                Re: bug-free C code (was: Non-constant initializers) Seebs <usenet-nospam@seebs.net> - 2011-05-19 03:14 +0000
                Re: bug-free C code (was: Non-constant initializers) Keith Thompson <kst-u@mib.org> - 2011-05-19 07:49 -0700
                Re: bug-free C code (was: Non-constant initializers) Seebs <usenet-nospam@seebs.net> - 2011-05-19 15:16 +0000
                Re: bug-free C code Ben Pfaff <blp@cs.stanford.edu> - 2011-05-18 20:02 -0700
                Re: bug-free C code Keith Thompson <kst-u@mib.org> - 2011-05-18 20:09 -0700
                Re: bug-free C code Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-05-18 23:24 -0400
                Re: bug-free C code Angel <angel+news@spamcop.net> - 2011-05-19 06:39 +0000
                Re: bug-free C code Keith Thompson <kst-u@mib.org> - 2011-05-19 08:05 -0700
                Re: bug-free C code Angel <angel+news@spamcop.net> - 2011-05-19 16:22 +0000
                Re: bug-free C code Keith Thompson <kst-u@mib.org> - 2011-05-19 11:36 -0700
                Re: bug-free C code Ben Pfaff <blp@cs.stanford.edu> - 2011-05-19 12:21 -0700
                Re: bug-free C code Keith Thompson <kst-u@mib.org> - 2011-05-19 13:12 -0700
                Re: bug-free C code gazelle@shell.xmission.com (Kenny McCormack) - 2011-05-19 21:52 +0000
                Re: bug-free C code Angel <angel+news@spamcop.net> - 2011-05-19 22:16 +0000
                Re: bug-free C code Shao Miller <sha0.miller@gmail.com> - 2011-05-19 17:25 -0500
                Re: bug-free C code Kenneth Brody <kenbrody@spamcop.net> - 2011-05-20 13:32 -0400
                Re: bug-free C code gazelle@shell.xmission.com (Kenny McCormack) - 2011-05-19 21:51 +0000
                Re: bug-free C code Kenneth Brody <kenbrody@spamcop.net> - 2011-05-20 13:30 -0400
                Re: bug-free C code "Joel C. Salomon" <joelcsalomon@gmail.com> - 2011-05-18 23:13 -0400
                Re: bug-free C code Dr Nick <3-nospam@temporary-address.org.uk> - 2011-05-19 08:23 +0100
      Re: Non-constant initializers Seebs <usenet-nospam@seebs.net> - 2011-05-13 00:15 +0000
      Re: Non-constant initializers "io_x" <a@b.c.invalid> - 2011-05-13 11:01 +0200
    Re: Non-constant initializers Columbus sailed the ocean China Blue <chine.bleu@yahoo.com> - 2011-05-12 16:30 -0700
  Re: Non-constant initializers Columbus sailed the ocean China Blue <chine.bleu@yahoo.com> - 2011-05-12 16:15 -0700
    Re: Non-constant initializers Fred the Freshwater Catfish <usenet.fred@bdtd.invalid> - 2011-05-12 23:28 +0000
  Re: Non-constant initializers Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2011-05-12 18:01 -0600
    Re: Non-constant initializers Keith Thompson <kst-u@mib.org> - 2011-05-12 18:15 -0700
      Re: Non-constant initializers Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2011-05-12 22:56 -0600
        Re: Non-constant initializers Seebs <usenet-nospam@seebs.net> - 2011-05-13 05:18 +0000
          Re: Non-constant initializers Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2011-05-13 09:10 -0600
            Re: Non-constant initializers Seebs <usenet-nospam@seebs.net> - 2011-05-13 20:56 +0000
      Re: Non-constant initializers Tim Rentsch <txr@alumni.caltech.edu> - 2011-05-18 23:47 -0700
        Re: Non-constant initializers Keith Thompson <kst-u@mib.org> - 2011-05-19 08:15 -0700
    Re: Non-constant initializers Fred the Freshwater Catfish <usenet.fred@bdtd.invalid> - 2011-05-13 23:57 +0000

csiph-web