[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [CPROG] C vs. C++ problem



Både Erwin S. Andreasen & Keld Laursen har selvfølgelig fuldkommen ret:
"In C and older C++ programs, the keyword static is (confusingly) used to mean
"use internal linkage" [sic.] (BS, The C++ Programing Language, third edition,
1st printing, p.200).
Fejlen er helt min!!!

Sammenfatning C vs. C++ problem:

erklæringen:
extern int a, b ...
sammen med definition i en singulær implementationsfil
som foreslået af Erwin S. Andreasen

samt min "modne overvejelse .. af problemet"
extern "C" int a, b, c[100];
(har nogen prøvet dette)
ser ud til at være det umidelbare svar på Sune Fischers spørgsmål.

Tak for de prompte svar
Nils Åke Ljunggren

needless Game resigns skrev:

> Hej ++Alle
>
> Jeg har indikeret at løsningen af Sunes umidelbare problem er at erklære de
> globale variable som statiske.
>
> Jeg skal ikke blande mig i diskussionen om korrekt "C++ programming style"
> - blot gøre opmærksom på at Bjarne Stroustrup(BS) anbefaler at koden er
> "self-explanatory" og at jeg selv meget rigoristisk følger *MIN*
> fortolkning af BS' "hints".
>
> Hvis det umidelbare problem er *hurtig* konvertering af C programmer til
> C++ *kan* man som jeg anbefalede ændre linjen:
>     int a, b, c[100];
> til:
>     static int a, b, c[100];
>
> Personligt ville jeg dog efter moden overvejelse af min forståelse af
> problemet *langt* foretrække
> extern "C" {
>     int a, b, c[100];
> }
>
> hvilket *explicit* gør opmærksom på at der *her* anvendes C "linkage
> conventions" *samt* ikke-comme il faut C++ "programing practice."
>
> For en god ordens skyld skal jeg gøre opmærksom på at jeg i modsætning til
> anvendelsen af static erklæringen *ikke* har afprøvet extern "C" forslaget
> -- jeg har kun BS og gcc's (engelsk ejefald bevidst valgt) ord for at det
> virker.
>
> Med venlig hilsen
>
> Nils Åke Ljunggren.
> needless Game resigns
>
> Sune Fischer skrev:
>
> > Hej,
> >
> > jeg har prøvet at konvertere nogle programmer fra C til C++, men
> > enkelte ting giver mig grå hår (og jeg er kun 23). Problemet kan skæres
> > ned til følgende:
> > Jeg har en del variable jeg ikke gider kaste rundt imellem
> > funktionerne, og derfor vil jeg have dem globale. Desuden vil jeg have
> > delt funktionerne ud på flere filer, og så er det problemerne opstår.
> > Linkeren kommer med beskeder om at de variable allerede er defineret,
> > her er et eksempel og det virker fint i C, men ikke i C++?
> >
> > // filen globals.h :
> > #ifndef GLOBALS_H
> > #define GLOBALS_H
> >
> > #include <stdio.h>
> >
> > void Testfunk();
> > int a, b, c[100];
> >
> > #endif
> >
> > // filen main.cpp :
> > #include "globals.h"
> >
> > int main(void)
> > {
> >   Testfunk();
> >   return(0);
> > }
> >
> > // filen Cppfil2.cpp :
> > #include "globals.h"
> >
> > void Testfunk()
> > {
> >   printf("made it!\n");
> >   return;
> > }
> >
> > // Makefile:
> > CC = g++
> > CFLAGS = -O3 -fmemoize-lookups
> >
> > PROGNAME = test.x
> >
> > SOURCES = main.cpp \
> >         Cppfil2.cpp \
> >
> > OBJECTS = $(SOURCES:.cpp=.o)
> >
> > .cpp.o:
> >         $(CC) -c $(CFLAGS) $< -o $@
> >
> > $(PROGNAME): $(OBJECTS)
> >         $(CC) $(OBJECTS) -o $(PROGNAME)
> >
> > clean:
> >         rm -f $(PROGNAME)
> >         rm -f *.o
> >         rm -f *~
> >
> > Er det et problem med Makefilen, for det styrer jeg ikke rigtigt.
> > Det er som om #ifndef ikke virker i C++??
> >
> > Sune
> > _________________________________________________________
> > Do You Yahoo!?
> > Get your free @yahoo.com address at http://mail.yahoo.com




 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:07 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *