/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Diverse C
Fra : Anders E. Andersen


Dato : 25-01-01 19:18

Hejsa folkens. Jeg var engang haj til at kode c på Amigaen men nu er jeg
begyndt at pusle med noget c kode i C++Builder. Jeg støder gang på gang på
nogle måder at deklarere ting på som jeg ikke er vant til fra Amiga. Er der
nogle der kan komme med et par hints?

Eks. 1

typedef struct XA_OutputFilterInstance {
void *output;
XA_DecoderInfo *decoder;
} OutputFilter;

typedef foran en struct?
Hvad er structens navn, XA_OutputFilterInstance eller OutputFilter?

Eks. 2

static const char *
output_filter_module_get_name(void)
{
return "sample-output-filter";
}

Hvad er meningen med at static?



 
 
Jakob Stoklund Olese~ (25-01-2001)
Kommentar
Fra : Jakob Stoklund Olese~


Dato : 25-01-01 20:47

"Anders E. Andersen" <feedback@world-nospam-online.dk> writes:

> typedef struct XA_OutputFilterInstance {
> void *output;
> XA_DecoderInfo *decoder;
> } OutputFilter;
>
> typedef foran en struct?
> Hvad er structens navn, XA_OutputFilterInstance eller OutputFilter?

Du får to ens typer, en "struct XA_OutputFilterInstance" og en
"OutputFilter".

> static const char *
> output_filter_module_get_name(void)
> {
> return "sample-output-filter";
> }
>
> Hvad er meningen med at static?

En static function er fil-lokal -- dvs, den kan ikke ses uden for
filen, og forurener derved ikke det globale namespace.

/stoklund

Anders Munch (25-01-2001)
Kommentar
Fra : Anders Munch


Dato : 25-01-01 20:58

"Jakob Stoklund Olesen" <stoklund@cp.dyndns.dk> wrote in message news:87d7db2z3t.fsf@ursula.perk...
> "Anders E. Andersen" <feedback@world-nospam-online.dk> writes:
>
> > typedef struct XA_OutputFilterInstance {
> > void *output;
> > XA_DecoderInfo *decoder;
> > } OutputFilter;
> >
> > typedef foran en struct?
> > Hvad er structens navn, XA_OutputFilterInstance eller OutputFilter?
>
> Du får to ens typer, en "struct XA_OutputFilterInstance" og en
> "OutputFilter".

Der er dog én lille forskel: Typedef-navnet OutputFilter kan ikke
bruges til forward-erklæringer! Man kan skrive:

struct XA_OutputFilterInstance;

i en anden fil (eller højere oppe i samme fil). Det kan man ikke med
OutputFilter.

--
Anders Munch, softwareudvikler, Dancontrol A/S
Stadig forvirret men på et højere niveau. Fjern fra min emailadresse.



Anders E. Andersen (27-01-2001)
Kommentar
Fra : Anders E. Andersen


Dato : 27-01-01 21:39


"Anders Munch" <andersjm@post.tele.dk> skrev i en meddelelse
news:94q0hv$rci$1@news.inet.tele.dk...

> > Du får to ens typer, en "struct XA_OutputFilterInstance" og en
> > "OutputFilter".
>
> Der er dog én lille forskel: Typedef-navnet OutputFilter kan ikke
> bruges til forward-erklæringer! Man kan skrive:
>
> struct XA_OutputFilterInstance;
>
> i en anden fil (eller højere oppe i samme fil). Det kan man ikke med
> OutputFilter.

Og hvad skulle meningen være med det?
Er der ikke bedre måder at gøre det på nu om dags?

MVH

Anders



Christian Worm Morte~ (28-01-2001)
Kommentar
Fra : Christian Worm Morte~


Dato : 28-01-01 18:50

Hej,

> Og hvad skulle meningen være med det?
> Er der ikke bedre måder at gøre det på nu om dags?

Nutildags (i.e. i C++) kan man glemme alt om at skrive typedef i forbindelse
med struktur erklæringer.

Venlig Hilsen

Christian Worm



Anders Munch (29-01-2001)
Kommentar
Fra : Anders Munch


Dato : 29-01-01 21:29

"Anders E. Andersen" <feedback@world-nospam-online.dk> wrote in message news:5kGc6.16752$l57.673561@news000.worldonline.dk...
>
> "Anders Munch" <andersjm@post.tele.dk> skrev i en meddelelse
> news:94q0hv$rci$1@news.inet.tele.dk...
>
> > > Du får to ens typer, en "struct XA_OutputFilterInstance" og en
> > > "OutputFilter".
> >
> > Der er dog én lille forskel: Typedef-navnet OutputFilter kan ikke
> > bruges til forward-erklæringer! Man kan skrive:
> >
> > struct XA_OutputFilterInstance;
> >
> > i en anden fil (eller højere oppe i samme fil). Det kan man ikke med
> > OutputFilter.
>
> Og hvad skulle meningen være med det?

To ting. For det første cykliske logiske afhængigheder. Eks. (C++):

struct B; // nødvendig forwarderklæring
struct A { B* den_ene_vej; };
struct B { A* den_anden_vej; };

For det andet til at bryde oversættelsesafhængigheder og dermed få
hurtigere oversættelser:

Fil a.h:
class A
{
... mange detaljer som det tager tid for compileren at tygge sig
igennem ...
};

Fil b.h:
#include "a.h"
extern void goer_noget_med_en_a(A* a);

Alle filer der inkluderer b.h skal nu også trækkes med a.h. Det
slipper man for hvis man skriver den om med en forwarderklæring:

Fil b.h:
class A; // fuld def. er ikke nødv. når man blot skal bruge en pointer
extern void goer_noget_med_en_a(A* a);

> Er der ikke bedre måder at gøre det på nu om dags?

Nej. I C++ slipper man for typedef og at finde på to navne, men
forwarderklæringer er nødvendige.

mvh.
Anders


Sune Kirkeby (29-01-2001)
Kommentar
Fra : Sune Kirkeby


Dato : 29-01-01 21:30


[ Anders Munch ]
> Der er dog én lille forskel: Typedef-navnet OutputFilter kan ikke
> bruges til forward-erklæringer! Man kan skrive:
> struct XA_OutputFilterInstance;
> i en anden fil (eller højere oppe i samme fil). Det kan man ikke med
> OutputFilter.

[ Anders E. Andersen ]
> Og hvad skulle meningen være med det?

Gensidigt rekursive strukturer, for eksempel,

struct Tree {
struct Node *nodes;
};
struct Node {
struct Tree subtree;
};

> Er der ikke bedre måder at gøre det på nu om dags?

Det er der måske nok, men nogen gange må kan man desværre
komme til at lide under fortidens fejl og mangler.

Mvh,

--
Sune Kirkeby Test-tube babies shouldn't throw stones.
http://mel.interspace.dk/~sune/

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408524
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste