Caso 1: estructura declarada fuera de main() funcionando bien
#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: declarado dentro de main() dando error
[Error] escriba 'main()::prod' sin vinculación usada para declarar la función 'int billamt(main()::prod*)' con vinculación [-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; }¿dónde declarar estructuras, dentro de
main()o fuera demain()?
Lo primero, creo que quisiste decir "definir", no "declarar".
En segundo lugar, no existe una regla como tal, puedes definir donde quieras. Se trata del alcance de la definición.
Si define la estructura dentro de main() , el alcance se limita solo a main() . Cualquier otra función no puede ver esa definición y, por lo tanto, no puede hacer uso de esa definición de estructura.
Si define la estructura en un ámbito global (es decir, fuera de main() o cualquier otra función), esa definición está disponible globalmente y todas las funciones pueden ver y hacer uso de la definición de estructura.
Tiene que ver con el alcance , cuando define la estructura dentro de la función main , solo se define en el alcance de la función main , por lo que la función billamt no puede saberlo.
La estructura es una matriz similar, solo que la diferencia principal en Array puede contener solo el mismo tipo de valores, pero una estructura puede tener diferentes tipos de valores, por lo que si necesita implementar la estructura globalmente (por globalmente quiero decir que también se puede usar en cualquier otra función) defínalo fuera de la función principal y si desea usar su estructura solo en la función principal, defínalo dentro de ella. Codificación feliz :-)