Path: csiph.com!eternal-september.org!feeder.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Keith Thompson Newsgroups: comp.lang.c Subject: Re: How to compile several C files Date: Tue, 07 Feb 2017 12:26:04 -0800 Organization: None to speak of Lines: 46 Message-ID: References: <137458b9-1471-27ef-8c1e-8d9e781f315f@verizon.net> <874m05kg6o.fsf@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: mx02.eternal-september.org; posting-host="04056ce4c9c7dd85ee7ce897aab9f52a"; logging-data="23918"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18XgshHZg7cgJIvxJkG7LOM" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux) Cancel-Lock: sha1:NsCdOTW0uD2gR03T4q2hF/vKsuc= sha1:GT7eUV9xAzAFPsqdbibwlDykHXg= Xref: csiph.com comp.lang.c:103418 Gareth Owen writes: > Keith Thompson writes: >> "James R. Kuyper" writes: >> [...] >>> All of the following are object definitions. They do NOT belong in a >>> header file - you need to move each of these definitions to one or the >>> other of the *.c files. If an object's name is used in both *.c file, >>> you should have a declaration for that object in one of the two header >>> files. But that declaration would look different from from these >>> definitions. At a minimum, you would put "extern" at the beginning of >>> each declaration. Also, for the arrays, it's not necessary to put the >>> actual number of elements in the object declaration, only in the object >>> definition. >> >> It's not necessary to include the length in the declaration. For example >> you could have >> extern balance bal[]; >> in a .h file and >> balance bal[YEARS]; >> in the corresponding .c file. > > As an interesting exercise for Bart and Malcolm, > I recommend that they put > > extern balance *bal; > > in the .h file and > > balance bal[YEARS]; > > in the .c file, and rely on the the equivalence of arrays and pointers. I guess you're joking. If you are, somebody other than Bart or Malcolm might take you seriously, so I'm going to spoil the joke. Don't do this. Arrays and pointers are not equivalent. The compiler will catch this if you #include the .h file in the .c file that defines the array, but if you get past that you'll be lying to the compiler, telling it that an array object and a pointer object occupy the same location. -- Keith Thompson (The_Other_Keith) kst-u@mib.org Working, but not speaking, for JetHead Development, Inc. "We must do something. This is something. Therefore, we must do this." -- Antony Jay and Jonathan Lynn, "Yes Minister"