[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Analisi sorgente C.



Ciao a tutti,
Sto studiando il codice sorgente del programma "mpg321".
Sto utilizzando cscope per sfogliare meglio il codice.
Leggendo la funzione main ho trovato del codice che non riesco a comprendere da un punto di vista sintattico:

options.volume = MAD_F_ONE;

La riga in sé è chiara, ma non è chiaro dove sia definita options:
In main non c'è una variabile locale definita con questo nome, e nei simboli globali non c'è una variabile options a cui ci si possa riferire con l'operatore di selezione.
Ho trovato volume, ed ecco il contesto in cui è definita:


typedef struct
{
    int opt;
    char *devicetype;
    char *device;
    signed long seek;
    signed long maxframes;
    int volume;
    int skip_printing_frames;
} mpg321_options;

extern mpg321_options options;
extern ao_device *playdevice;
extern mad_timer_t current_time;
extern unsigned long current_frame;
extern int stop_playing_file;
extern int shuffle_play;
extern char *playlist_file;
extern int quit_now;
extern char remote_input_buf[PATH_MAX + 5];
extern int file_change;

extern int status;

enum
{
    MPG321_STOPPED       = 0x0001,
    MPG321_PAUSED        = 0x0002,
    MPG321_PLAYING       = 0x0004,
    MPG321_REWINDING     = 0x0008,
    MPG321_SEEKING       = 0x0010
};

enum
{
    MPG321_VERBOSE_PLAY  = 0x00000001,
    MPG321_QUIET_PLAY    = 0x00000002,
    MPG321_REMOTE_PLAY   = 0x00000004,

    MPG321_USE_OSS       = 0x00000010,
    MPG321_USE_SUN       = 0x00000020,
    MPG321_USE_ALSA      = 0x00000040,
    MPG321_USE_ESD       = 0x00000080,
    MPG321_USE_ARTS      = 0x00000100,
    MPG321_USE_NULL      = 0x00000200,
    MPG321_USE_STDOUT    = 0x00000400,
    MPG321_USE_WAV       = 0x00000800,
    MPG321_USE_AU        = 0x00001000,
    MPG321_USE_CDR       = 0x00002000,
    MPG321_USE_USERDEF   = 0x00004000,
    MPG321_USE_ALSA09    = 0x00008000,

    MPG321_FORCE_STEREO  = 0x00010000
};

Deduco da questo frammento di codice che sia possibile in qualche modo definire una struttura senza assegnarle un nome?
Ma in quel caso come ci si riferisce ad essa?
Vi ringrazio anticipatamente e spero di non essere andato fuori tema.


Miguel Rodriguez

Reply to: