2015-07-13 24 views
5

Caso 1: struttura dichiarata fuori main() lavorando benedove dichiarare le strutture, dentro main() o outside main()?

#include<stdio.h> 
#include<conio.h> 
struct prod 
{ 
    int price,usold; 
}; 
int main() 
{ 
    struct prod *p,a; 

    int billamt(struct prod *); 
    int bill; 
    printf("enter the values \n"); 
    scanf("%d%d",&p->price,&p->usold); 
    bill=billamt(p); 
    printf("bill=%d",bill); 
    getch(); 
} 
int billamt(struct prod *i) 
{ 
    int b; 
    b=(i->price*i->usold); 
    return b; 
} 

Caso 2: dichiarata all'interno main() dando errore

[Errore] digitare 'main() :: prod' senza linkage utilizzato per dichiarare la funzione 'int billamt (main() :: prod *)' con linkage [-fpermissive] *

#include<stdio.h> 
#include<conio.h> 
int main() 
{ 
    struct prod 
{ 
    int price,usold; 
}; 


    struct prod *p,a; 

    int billamt(struct prod *); 
    int bill; 
    printf("enter the values \n"); 
    scanf("%d%d",&p->price,&p->usold); 
    bill=billamt(p); 
    printf("bill=%d",bill); 
    getch(); 
} 
int billamt(struct prod *i) 
{ 
    int b; 
    b=(i->price*i->usold); 
    return b; 
} 
+0

Se l'opzione n. 1 funziona bene ma l'opzione n. 2 restituisce un errore che dice che non può essere fatto ... Direi di andare con l'opzione n. 1! – rodrigo

risposta

1

Si ha a che fare su scoping, quando si definisce la struttura all'interno della funzione main allora è definito solo nel campo di applicazione della funzione di main, quindi la funzione billamt non può sapere su di esso.

10

dove dichiarare strutture, all'interno di main() o all'esterno di main()?

  1. prima cosa, penso che si intende "definire", non "dichiarare".

  2. In secondo luogo, non esiste la regola come tale, è possibile definire dove si desidera. Si tratta dello scope della definizione.

    • Se si definisce la struttura interna main(), il campo di applicazione è limitato al solo main(). Qualsiasi altra funzione non può vedere quella definizione e, quindi, non può fare uso di quella definizione della struttura.

    • Se si definisce la struttura in un ambito globale, (cioè fuori main() o qualsiasi altra funzione, in questo caso), tale definizione è globalmente disponibile e tutte le funzioni possono vedere e utilizzare la definizione della struttura .

1

Struttura sono una matrice come solo la differenza principale in Array può contenere solo stesso tipo di valori, ma una struttura può avere diversi tipi di valori quindi se è necessario implementare struttura globale (dal globale intendo può essere usato anche in qualsiasi altra funzione) definendolo al di fuori del main e se vuoi usare la tua struttura solo nella funzione principale definiscilo al suo interno. Happy Coding :-)

+0

Questa è la risposta più bella. (Y) – lU5er