Toon posts:

[C++] struct _stat

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik ben iets tegen gekomen wat mij niet helemaal duidelijk is.
In mijn programma maak ik gebruik van de _stat(...) functie voor het ophalen van gegevens over een bestand.

Nu vroeg ik mij af waarom je in je programma een instantie van de structure _stat moet declareren op de volgende manier:

code:
1
struct _stat myStat;


Ik heb gekeken in <sys/stat.h> gekeken hoe _stat eruit ziet:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* define structure for returning status information */

#ifndef _STAT_DEFINED

struct _stat {
        _dev_t st_dev;
        _ino_t st_ino;
        unsigned short st_mode;
        short st_nlink;
        short st_uid;
        short st_gid;
        _dev_t st_rdev;
        _off_t st_size;
        time_t st_atime;
        time_t st_mtime;
        time_t st_ctime;
        };

#if     !__STDC__


Waarom kan ik niet gewoon '_stat myStat' gebruiken. Wat is het verschil met 'struct _stat myStat'.
Als ik namelijk '_stat myStat' gebruik, zal _stat niet herkend worden. Of heeft dit er misschien mee te maken dat de functie ook _stat heet?

Bedankt,

Peter

  • Ivo
  • Registratie: Juni 2001
  • Laatst online: 14-01-2025

Ivo

Eh, het lijkt me onverstandig om een functie en een struct-type te hebben met dezelfde naam. Kan dat wel?

Verwijderd

Topicstarter
Zo staat dat in <sys/stat.h> en het werkt ook perfect.

By the way: Sorry dat ik zo onduidelijk ben, _stat (de functie en de structure) zijn allemaal een onderdeel van <sys/stat.h>.

[ Voor 58% gewijzigd door Verwijderd op 01-04-2006 20:29 ]


  • MrVulcan
  • Registratie: Mei 2005
  • Laatst online: 22-09-2025
Tja, zo werkt dat nou eenmaal in C. De precieze reden hiervoor weet ik ook niet, maar dat zal wel te maken hebben met hoe de compiler je sourecode parsed. Er is gelukkig wel een oplossing voor je probleem en dat kan met behulp van een typedef. Je bent dan vrij om zelf een naam te verzinnen voor het type:

code:
1
2
typedef struct _stat MyStatStruct;
MyStatStruct myStat;

Verwijderd

Topicstarter
Hmm... mijn voorspelling klopte. Het is enkel om onderscheid te maken tussen de functie en de structure.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Omdat er in die headerfile geen typedefinitie is gemaakt van die _stat-struct, kent de compiler hem niet tenzij je expliciet aangeeft dat het om de eerder aangegeven struct gaat. Had er dit gestaan:
C:
1
2
3
typedef struct _stat {
        //blaat
        } _stat;

...dan had je gewoon een instantie van het type _stat kunnen maken. Omdat je nu geen typedefinitie hebt kan dat dus niet. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 10-12-2025
Allemaal fout, helaas.

Het goede antwoord is dat het niet hoeft. Probeer maar.

C++:
1
_stat MyStat;


Overigens moet dit dus wel, maar dat vroeg de TS niet:
C:
1
struct _stat MyStat;

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Xorgye
  • Registratie: Maart 2005
  • Laatst online: 05-10-2024
Stomme c++ ook, gooit alle normale c statements op de kop :+
Pagina: 1