Definire le funzioni di strutture

Possiamo definire le funzioni di strutture in linguaggio di programmazione C?

  • Vuoi dire qualcosa come struct A { void f(void) {…} }; ?

 

8 Replies
  1. 64

    No, come funzioni non sono dati. Ma si può definire puntatori a funzione all’interno di una struttura.

    struct foo {
        int a;
        void (*workwithit)(struct foo *);
    }
  2. 21

    Non si può davvero dichiarare cose all’interno di una struttura in C. Questo non è C++ o qualsiasi altro linguaggio OO, dove un oggetto che incapsula un qualche tipo di ambito.

    C le strutture sono molto semplici oggetti, è solo ” zucchero sintattico per la gestione di un pezzo di memoria. Quando si crea una nuova struttura “istanza”, struct A a;, compilatore appena si riserva di spazio di stack in base alla sua dimensione, e quando poi si fa la a.member, il compilatore sa che membro dell’offset, quindi si passa al &a + offset di tale membro. Quelli offset di solito non sono solo somme di dimensioni dei precedenti membri, perché il compilatore di solito aggiunge un po ‘ di imbottitura bit nella struttura per allineare è più bella in memoria.

    Speranza ha aiutato un po’. Ovviamente si aspettano leggermente troppo da C strutture 🙂

  3. 4

    No, non è possibile avere funzioni all’interno di una struttura in un programma C. Ho scritto un codice unico e salvati come .c e un .cpp. L’ .file cpp è conforme e funziona come previsto, ma il .c file non compila.

    Qui è il codice per il vostro riferimento. Salvare una volta come .cpp e quindi eseguirlo. Quindi salvare il medesimo codice .c e compilarlo. Si ottiene un errore di compilazione.

    #include <stdio.h>
    struct C {
        void Test(int value) {
           static int var = 0;
           if (var == value) 
              printf("var == value\n");
           else
              printf("var != value\n");
    
           var = value;
         }
     }; 
    
     int main() {
        C c1;
        C c2;
        c1.Test(100);
        c2.Test(100);
        int ii;
        scanf("%d",&ii);
     }
    • Da quando non è possibile disporre di funzioni all’interno di C programma?
    • Volevo dire. Struct in c programma. Risolvere
    • Risolto. Grazie.
  4. 3

    N.

    Si può avere funzione di puntatori a struct, ma che è quanto di più vicino si otterrà.

  5. 1

    No, non è possibile. Le strutture possono contenere solo le variabili all’interno, la memorizzazione di puntatori a funzione all’interno della struttura si può dare il risultato desiderato.

  6. 0

    No, ma è possibile in c++ struct!

    • Così ho risposto alla sua domanda con un “No”. Hai perso quella parte?
  7. 0

    Non, Si può definire funzioni all’interno di strutture in C programmi, Tuttavia, se l’estensione del file è .cpp (che non C), si può avere funzioni di membro di come le classi, tuttavia, il modificatore predefinito di queste funzioni sarà “pubblico” (a differenza di classe).

    Leggere questi link per ulteriori informazioni sulle Strutture un buon link , un altro buon link, Una buona link

    Come una convenzione in C++, Classi sono utilizzati per memorizzare funzioni e variabili sia e Strutture sono utilizzati solo per la memorizzazione di informazioni (ad esempio, dati).

    • Quello che probabilmente voleva dire: “Tuttavia, se si compila questo in un diverso linguaggio di programmazione di C++…”
    • Hai ragione @Lundin, in Realtà al livello di partenza alcuni studenti confondere se stessi scrivendo codice C all’interno .file cpp, che è davvero una cattiva pratica.
  8. 0

    È possibile in C++:

    //Example program
    #include <iostream>
    #include <string>
    
    struct Node
    {
        int data; Node *prev,*next;
        Node(int x, Node* prev=NULL, Node* next=NULL)
        {
            this->data=x; this->prev=prev; this->next=next;
        }
        void print_list()
        {
            Node* temp=this;    //temp is created in function call stack
            while(temp!=NULL)
            {
                std::cout<<temp->data<<" ";
                temp=temp->next;
            }
        }
        Node* insert_left(int x)
        {
            Node* temp=new Node(x,this->prev,this);
            this->prev=temp;
            return temp;                            //list gets new head
        }
        Node* insert_right(int x)
        {
            Node* temp=new Node(x,this,this->next);
            this->next=temp;
            return this;                            //this would still be head
        }
    
    };
    
    int main()
    {
        Node* head=new Node(-1);    //-1
        head=head->insert_left(0);  //0 -1
        head=head->insert_right(1); //0 1 -1
        head=head->insert_left(2);  //2 0 1 -1
        head->print_list();
    }

Lascia un commento