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


Groups > comp.lang.c > #103374

Re: How to compile several C files

Newsgroups comp.lang.c
Date 2017-02-07 08:24 -0800
References <ddcc4bba-8f05-4537-9deb-1d5c759602f5@googlegroups.com> <o7cnp0$esp$1@dont-email.me> <af4dd6a4-bfa9-4865-aebb-ea5e0c9c25e2@googlegroups.com>
Message-ID <d2c01da2-047d-4b52-baab-fd0e468df376@googlegroups.com> (permalink)
Subject Re: How to compile several C files
From Alla _ <modelling.data@gmail.com>

Show all headers | View raw


On Tuesday, February 7, 2017 at 6:56:36 PM UTC+3, Alla _ wrote:
> On Tuesday, February 7, 2017 at 6:08:02 PM UTC+3, James Kuyper wrote:
> > On 02/07/2017 09:10 AM, Alla _ wrote:
> > > Hello!
> > > 
> > > I have a program, which I would like to separate into two C files,
> > > and two .h files. The non-separated version works, but it would
> > > be logically correct to separate it into two parts.
> > > Actually, I already have done so. When I tried to
> > > compile two parts, I got a cryptic message saying that there were 
> > > some duplicates. Before digging deeper into that error message,
> > > I would like to found out if I correctly compile both files, and what 
> > > are the rules. 
> > > First file is named proforma.c; second one sql.c :
> > ...
> > > (1) I include both header files in proforma.c and in sql.c
> > > (2) run in Terminal:
> > > gcc -Wall -Werror -Wextra  -std=c99  `mysql_config --cflags --libs` proforma.c sql.c -o
> > 
> > I cannot say whether the mysql_config part is correct, but the rest
> > seems fine, except for one detail: the -o option always requires a
> > filename argument. It tells gcc what name you want the output file to
> > have; if you don't want to override the default file name (a.out, in
> > this case), you don't need the -o option.
> > 
> > The exact text of the error message would be helpful. From my experience
> > with gcc, I suspect that it's cryptic only because you're unfamiliar
> > with the relevant terminology.
> > Since the header files are both included in both *.c files, an obvious
> > possibility is that the duplicate thing it's referring to is something
> > in the header files that qualifies as an external definition of an
> > object or function. External definitions should only appear in *.c
> > files; what should appear in the corresponding *.h file is a
> > declaration. People being unclear about the distinction between a
> > declaration and a definition is a common cause of such problems.
> 
> First, thank you everyone for these very helpful comments.
> 
> As to the paragraph above, yes, it seems to the be the case. I will
> have to look more thoroughly into this. 
> I have put all typedefs in proforma.h, as well as all function declarations,
> and I have also added structures' declarations and pointers to those 
> structures, because those are used by proforma.c and by sql.c
> 
> Here is how it looks like (I am not yet posting the gcc error message
> because, first, I want to try it again, and if I get the same error I will
> post it):
> proforma.h
> /** Proforma header file **/
> 
> #ifndef H_PROFORMA_
> #define H_PROFORMA_
> 
> #define LINE_SIZE 1024
> #define YEARS 15
> #define INPUT_YEARS 5
> #define INC_LINES 12
> #define BALANCE_LINES 21
> #define NAME_SIZE 40
> #define STAT_TAX 0.38
> #define FORECAST_INTEREST 0.10 //WACC
> #define MAX_FIELD_WIDTH 9
> 
> typedef struct data_1 {
>     int       year;
>     double    sales;
>     double    cogs;
>     double    gross_profit;
>     double    sga;
>     double    oper_inc;
>     double    dep_amor;
>     double    oper_prof;
>     double    int_exp;
>     double    gain_loss;
>     double    pretax_inc;
>     double    tax_exp;
>     double    net_inc;
> } income_st;
> 
> typedef struct data_2 {
>     int       cs_year;
>     double    cs_sales;
>     double    cs_cogs;
>     double    cs_gross_profit;
>     double    cs_sga;
>     double    cs_oper_inc;
>     double    cs_dep_amor;
>     double    cs_oper_prof;
>     double    cs_int_exp;
>     double    cs_gain_loss;
>     double    cs_pretax_inc;
>     double    cs_tax_exp;
>     double    cs_net_inc;
> } cs_income_st;
> 
> typedef struct balance_sheet {
>     double    cash;
>     double    ar;
>     double    inv;
>     double    o_cur_a;
>     double    t_cur_a;
>     double    gross_ppe;
>     double    acc_dep;
>     double    net_ppe;
>     double    intang;
>     double    ta;
>     double    ap;
>     double    tp;
>     double    o_cur_l;
>     double    t_cur_l;
>     double    ltd;
>     double    o_l;
>     double    tl;
>     double    se;
>     double    tle;
>     double average_ta;
> } balance;
> 
> typedef struct cs_balance_sheet {
>     double    cs_cash;
>     double    cs_ar;
>     double    cs_inv;
>     double    cs_o_cur_a;
>     double    cs_t_cur_a;
>     double    cs_gross_ppe;
>     double    cs_acc_dep;
>     double    cs_net_ppe;
>     double    cs_intang;
>     double    cs_ta;
>     double    cs_ap;
>     double    cs_tp;
>     double    cs_o_cur_l;
>     double    cs_t_cur_l;
>     double    cs_ltd;
>     double    cs_o_l;
>     double    cs_tl;
>     double    cs_se;
>     double    cs_tle;
> } cs_balance;
> 
> typedef struct assumptions {
>     double gr_sales;
>     double av_cogs;
>     double av_gross_profit;
>     double av_sga;
>     double av_oper_inc;
>     double av_dep_amor;
>     double av_oper_prof;
>     double av_int_exp;
>     double av_gain_loss;
>     double av_pretax_inc;
>     double av_tax_exp;
>     double av_net_inc;
>     double industry_rate;
>     double ta_turn;
> } assumptions;
> 
> typedef struct offsets {
>     int offset_income;
>     int offset_cs_income;
>     int offset_balance;
> } offsets;
> 
> //Structures
> income_st income[YEARS];
> cs_income_st cs_income[YEARS];
> balance bal[YEARS];
> cs_balance cs_bal;
> assumptions av;
> 
> //Pointers to structures
> income_st *income_ptr = income;
> cs_income_st *cs_income_ptr = cs_income;
> balance *bs_ptr = bal;
> cs_balance *cs_bs_ptr = &cs_bal;
> assumptions *rates = &av;
> 
> 
> bool process_files (FILE *input_file_1, FILE *input_file_2,
>                     income_st *income_ptr,
>                     cs_income_st *cs_income_ptr,
>                     balance *bs_ptr,
>                     cs_balance *cs_bs_ptr,
>                     assumptions *rates);
> 
> bool process_inc  (FILE *input_file_1, char *line,
>                    income_st *income_ptr,
>                    cs_income_st *cs_income_ptr,
>                    assumptions *rates,
>                    offsets *offset_ptr);
> 
> bool process_bal  (FILE *input_file_2, char *line,
>                    income_st *income_ptr,
>                    balance *bs_ptr,
>                    cs_balance *cs_bs_ptr,
>                    assumptions *rates,
>                    offsets *offset_ptr);
> 
> int valid_names   (char *line, const char *names_1[],
>                    const char *names_2[],
>                    size_t line_num, char *name);
> 
> char *skip_spaces (char *line);
> 
> int get_year(void);
> 
> bool check_input_years(char *line, income_st *income_ptr,
>                        cs_income_st *cs_income_ptr,
>                        int cur_year);
> 
> bool parse_inc_num (char *line, size_t line_num,
>                     int offset_income,
>                     int offset_cs_income,
>                     income_st *income_ptr,
>                     cs_income_st *cs_income_ptr,
>                     double *member_product);
> 
> bool parse_bal_num (char *line, int offset_balance,
>                     balance *bs_ptr);
> 
> offsets find_struct_member(char *name,
>                            offsets *offset_ptr);
> 
> double rate_depamor_exp(income_st *income_ptr,
>                         balance *bs_ptr);
> 
> double rate_int_exp(income_st *income_ptr,
>                       balance *bs_ptr);
> 
> void pf_sales      (income_st *income_ptr,
>                     assumptions *rates);
> 
> void pf_ta         (income_st *income_ptr,
>                     balance *bs_ptr,
>                     assumptions *rates);
> 
> void pf_balance    (balance *bs_ptr, cs_balance *cs_bs_ptr);
> 
> void pf_income     (income_st *income_ptr, assumptions *rates,
>                     balance *bs_ptr);
> 
> double ta_turnover(income_st *income_ptr, balance *bs_ptr);
> 
> void ta_proforma_rate(income_st *income_ptr,
>                       balance *bs_ptr,
>                       assumptions *rates,
>                       double *rate_1, double *rate_2);
> 
> void csbalance_rates(balance *bs_ptr, cs_balance *cs_bs_ptr);
> 
> char *line_alloc(void);
> char *name_alloc(void);
> double industry_rate();
> #endif
Oh dear. I have just realized that I have not deleted those,
now global, arguments in functions' declarations. I am not 
sure you will see this message before reading my previous
post. I should have not posted that header before checking
it all over again, as I initially intended ) Apologies. 

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


Thread

How to compile several C files Alla _ <modelling.data@gmail.com> - 2017-02-07 06:10 -0800
  Re: How to compile several C files Malcolm McLean <malcolm.mclean5@btinternet.com> - 2017-02-07 07:02 -0800
  Re: How to compile several C files David Brown <david.brown@hesbynett.no> - 2017-02-07 16:03 +0100
  Re: How to compile several C files Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-02-07 15:06 +0000
    Re: How to compile several C files BartC <bc@freeuk.com> - 2017-02-07 15:14 +0000
      Re: How to compile several C files Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-02-07 16:02 +0000
    Re: How to compile several C files Richard Heathfield <rjh@cpax.org.uk> - 2017-02-07 15:42 +0000
      Re: How to compile several C files Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-02-07 16:19 +0000
        Re: How to compile several C files Richard Heathfield <rjh@cpax.org.uk> - 2017-02-07 16:40 +0000
          Re: How to compile several C files Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-02-07 17:16 +0000
            Re: How to compile several C files David Brown <david.brown@hesbynett.no> - 2017-02-08 10:19 +0100
        Re: How to compile several C files "James R. Kuyper" <jameskuyper@verizon.net> - 2017-02-07 11:51 -0500
      Re: How to compile several C files Alla _ <modelling.data@gmail.com> - 2017-02-07 08:26 -0800
        Re: How to compile several C files Richard Heathfield <rjh@cpax.org.uk> - 2017-02-07 16:42 +0000
          Re: How to compile several C files Alla _ <modelling.data@gmail.com> - 2017-02-07 10:14 -0800
          Re: How to compile several C files vitale.alla@gmail.com - 2017-02-16 09:49 -0800
      Re: How to compile several C files Ian Collins <ian-news@hotmail.com> - 2017-02-08 17:35 +1300
        Re: How to compile several C files David Brown <david.brown@hesbynett.no> - 2017-02-08 10:28 +0100
          Re: How to compile several C files Ian Collins <ian-news@hotmail.com> - 2017-02-08 22:43 +1300
            Re: How to compile several C files David Brown <david.brown@hesbynett.no> - 2017-02-08 11:29 +0100
      Re: How to compile several C files David Brown <david.brown@hesbynett.no> - 2017-02-08 10:14 +0100
  Re: How to compile several C files James Kuyper <jameskuyper@verizon.net> - 2017-02-07 10:07 -0500
    Re: How to compile several C files Alla _ <modelling.data@gmail.com> - 2017-02-07 07:56 -0800
      Re: How to compile several C files Alla _ <modelling.data@gmail.com> - 2017-02-07 08:24 -0800
        Re: How to compile several C files Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-02-07 16:44 +0000
          Re: How to compile several C files Alla _ <modelling.data@gmail.com> - 2017-02-07 08:54 -0800
            Re: How to compile several C files "James R. Kuyper" <jameskuyper@verizon.net> - 2017-02-07 12:20 -0500
              Re: How to compile several C files Alla _ <modelling.data@gmail.com> - 2017-02-07 10:05 -0800
                Re: How to compile several C files Richard Heathfield <rjh@cpax.org.uk> - 2017-02-07 18:27 +0000
                Re: How to compile several C files Richard Heathfield <rjh@cpax.org.uk> - 2017-02-07 18:40 +0000
                Re: How to compile several C files Keith Thompson <kst-u@mib.org> - 2017-02-07 12:22 -0800
                Re: How to compile several C files David Brown <david.brown@hesbynett.no> - 2017-02-08 10:33 +0100
                Re: How to compile several C files Alla _ <modelling.data@gmail.com> - 2017-02-08 10:25 -0800
      Re: How to compile several C files Keith Thompson <kst-u@mib.org> - 2017-02-07 08:58 -0800
      Re: How to compile several C files "James R. Kuyper" <jameskuyper@verizon.net> - 2017-02-07 12:07 -0500
        Re: How to compile several C files Alla _ <modelling.data@gmail.com> - 2017-02-07 09:14 -0800
          Re: How to compile several C files Richard Heathfield <rjh@cpax.org.uk> - 2017-02-07 17:21 +0000
            Re: How to compile several C files Alla _ <modelling.data@gmail.com> - 2017-02-07 10:14 -0800
            Re: How to compile several C files Alla _ <modelling.data@gmail.com> - 2017-02-07 10:28 -0800
              Re: How to compile several C files Richard Heathfield <rjh@cpax.org.uk> - 2017-02-07 18:43 +0000
                Re: How to compile several C files Alla _ <modelling.data@gmail.com> - 2017-02-07 10:55 -0800
            Re: How to compile several C files Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-02-07 19:28 +0000
              Re: How to compile several C files Richard Heathfield <rjh@cpax.org.uk> - 2017-02-07 19:51 +0000
              Re: How to compile several C files David Brown <david.brown@hesbynett.no> - 2017-02-08 11:25 +0100
                Re: How to compile several C files Richard Heathfield <rjh@cpax.org.uk> - 2017-02-08 12:11 +0000
                Re: How to compile several C files David Brown <david.brown@hesbynett.no> - 2017-02-08 14:58 +0100
                Re: How to compile several C files Richard Heathfield <rjh@cpax.org.uk> - 2017-02-08 14:23 +0000
                Re: How to compile several C files supercat@casperkitty.com - 2017-02-08 07:48 -0800
                Re: How to compile several C files Richard Heathfield <rjh@cpax.org.uk> - 2017-02-08 16:09 +0000
                Re: How to compile several C files David Brown <david.brown@hesbynett.no> - 2017-02-08 17:23 +0100
                Re: How to compile several C files Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-02-08 15:01 +0000
                Re: How to compile several C files David Brown <david.brown@hesbynett.no> - 2017-02-08 17:22 +0100
                Re: How to compile several C files Keith Thompson <kst-u@mib.org> - 2017-02-08 09:27 -0800
                Re: How to compile several C files supercat@casperkitty.com - 2017-02-08 09:51 -0800
                Re: How to compile several C files Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-02-08 21:06 +0000
                Re: How to compile several C files supercat@casperkitty.com - 2017-02-08 13:20 -0800
                Re: How to compile several C files Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-02-08 21:40 +0000
                Re: How to compile several C files supercat@casperkitty.com - 2017-02-08 13:49 -0800
                Re: How to compile several C files Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-02-08 23:09 +0000
                Re: How to compile several C files David Brown <david.brown@hesbynett.no> - 2017-02-08 23:25 +0100
                Re: How to compile several C files supercat@casperkitty.com - 2017-02-08 15:17 -0800
                Re: How to compile several C files David Brown <david.brown@hesbynett.no> - 2017-02-09 01:17 +0100
                Re: How to compile several C files David Brown <david.brown@hesbynett.no> - 2017-02-08 23:19 +0100
                Re: How to compile several C files Keith Thompson <kst-u@mib.org> - 2017-02-08 16:44 -0800
                Re: How to compile several C files Tim Rentsch <txr@alumni.caltech.edu> - 2017-02-08 22:32 -0800
                Re: How to compile several C files Robert Wessel <robertwessel2@yahoo.com> - 2017-02-09 04:03 -0600
                Re: How to compile several C files Ian Collins <ian-news@hotmail.com> - 2017-02-10 07:52 +1300
                Re: How to compile several C files Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-02-08 12:12 +0000
                Re: How to compile several C files BartC <bc@freeuk.com> - 2017-02-08 13:09 +0000
                Re: How to compile several C files Malcolm McLean <malcolm.mclean5@btinternet.com> - 2017-02-08 05:14 -0800
                Re: How to compile several C files Ben Bacarisse <ben.usenet@bsb.me.uk> - 2017-02-08 15:32 +0000
                Re: How to compile several C files David Brown <david.brown@hesbynett.no> - 2017-02-08 15:09 +0100
        Re: How to compile several C files Keith Thompson <kst-u@mib.org> - 2017-02-07 09:22 -0800
          Re: How to compile several C files Gareth Owen <gwowen@gmail.com> - 2017-02-07 18:29 +0000
            Re: How to compile several C files bart4858@gmail.com - 2017-02-07 11:05 -0800
            Re: How to compile several C files Keith Thompson <kst-u@mib.org> - 2017-02-07 12:26 -0800
  Re: How to compile several C files Barry Schwarz <schwarzb@dqel.com> - 2017-02-07 08:34 -0800
    Re: How to compile several C files Alla _ <modelling.data@gmail.com> - 2017-02-07 08:57 -0800
      Re: How to compile several C files "James R. Kuyper" <jameskuyper@verizon.net> - 2017-02-07 12:29 -0500
      Re: How to compile several C files Manfred <noname@invalid.add> - 2017-02-07 19:02 +0100

csiph-web