Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [c] tipo di una variabile dipendente da un parametro

    Devo leggere e conteggiare dei record da file con diverse estensioni. L'estensione del file determina anche il tipo di record. Nello specifico ho queste due funzioni nel codice.

    Codice PHP:
    record_size=sizeof(record);
    fread(&recordsizeof(record), 1pf_bin); 
    A seconda di un parametro (l'estensione del file in ingresso al main), il record può essere ad esempio

    Codice PHP:
    typedef struct record1
    {
      
    uint32  packet_counter;    // Contatore pacchetti
      
    float prog;                    
      
    float speed;                        
    RECORD1;

    typedef struct record2
    {
      
    uint32  packet_counter;    // Contatore pacchetti
      
    uint16 rawd1;                     
      
    uint16 rawd2;                     
    RECORD2
    Non so a priori come dichiarare record tra:

    Codice PHP:
    RECORD1 record;
    RECORD2 record
    E' risolvibile questa situzione? O sono costretto a raddoppiare le dichiarazioni e le funzioni?

    Codice PHP:
    RECORD1 record1;
    RECORD2 record2;

    if (
    estensionefile==1)
    {
    record_size=sizeof(record1);
    fread(&record1sizeof(record1), 1pf_bin);
    }

    if (
    estensionefile==2)
    {
    record_size=sizeof(record2);
    fread(&record2sizeof(record2), 1pf_bin);

    Ci sono 10 tipi di persone al mondo, chi conosce il sistema binario e chi no.

  2. #2
    Se record1 e record2 hanno le stesse dimensioni puoi usare una union.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    No sono proprio diversi
    Ci sono 10 tipi di persone al mondo, chi conosce il sistema binario e chi no.

  4. #4
    Se fosse C++ forse si potrebbero usare (con cautela, in questo caso) i template, ma in C non mi vengono in mente altre soluzioni... forse puoi cavartela con qualche trucco strano di macro, ma è facile che venga fuori una porcata.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    I templates e le classi nn fanno altro che nascondere il grosso lavoraccio dei puntatori e nn solo a dati ma anche funzioni. Cmq se continui su questa strada la union e obbligatoria.
    Per gli Spartani e Sparta usa spartan Il mio github

  6. #6
    x Mitaly

    La porcata delle marco l'ho già fatta deh.

    era

    Codice PHP:
    #define RECORD RECORD1
    //#define RECORD RECORD2

    RECORD record
    e tutto il codice si riferiva a record.
    Commentavo e decomentavo ogni volta.
    Però devo ricompilare ogni volta..... è proprio questo che volevo evitare.


    sarebbe stato troppo bello se avessse funzionato

    Codice PHP:
    if (estensione==1)
    {
      
    #define RECORD RECORD1

    ma sono direttive del preprocessore.... non funge.


    x linoma
    Dei template ne ho solo sentito parlare.... volevo risolvere il tutto in C
    Ci sono 10 tipi di persone al mondo, chi conosce il sistema binario e chi no.

  7. #7
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Bhe se la tua applicazione è all'inizio e nn hai capito cs ho scritto prima, passa a c++. Cmq mi risulta strano dalla tua firma questa domande, ti devo inviare preventivo?
    Per gli Spartani e Sparta usa spartan Il mio github

  8. #8
    1) Ripeto che sto cercando di risolvere in C, se non hai capito quello che ho scritto
    2) Il sistema binario e dei frammenti di C sono la stessa cosa?
    3) Che centra il preventivo ?

    4) Avevo letto male, pensavo fossi tu che mi suggerissi i template , invece hai suggerito le union ecco qui...

    Codice PHP:
    union RECORD {
       
    RECORD1 record1;
       
    RECORD2 record2;
    };

    union RECORD record

    poi ?
    come le uso queste due funzioni?

    Codice PHP:
    record_size=sizeof(record);
    fread(&recordsizeof(record), 1pf_bin); 
    cosa mi darebbe sizeof(record) la dimensione del più grande dei due.... o sbaglio?
    Ci sono 10 tipi di persone al mondo, chi conosce il sistema binario e chi no.

  9. #9
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Io farei in qesuto modo per farti capire, fare due funzioni nella quale leggi il record, poi in base all'estensione cambierei il puntatore (o puntatori) alla funzione e poi la chiamere, la union rende + leggibile anche il codicei.
    Grosso modo il C++ farebbe questo. Per il resto ti passerei la mia segretaria? Sai sta x andare via
    Per gli Spartani e Sparta usa spartan Il mio github

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Usi la union e determini la quantità di dati da leggere con uno switch (o con un vettore di appoggio) prima di usare la fread.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.