2015-07-13 2 views
5

Случай 1: структура объявлены вне main() работает нормальногде объявлять структуры, внутри main() или внешние 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; 
} 

Случай 2: объявленная внутри main() дает ошибку

[Ошибка] типа 'основной() :: Прод' без связь, используемая для объявления функции 'int billamt (main() :: prod *)' с привязкой [-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

Если опция № 1 работает нормально, но опция № 2 дает ошибку, говоря, что это невозможно ... Я бы сказал, пойдите с опцией # 1! – rodrigo

ответ

1

Он должен сделать о области видимости, когда вы определяете структуру внутри функции main то это только определено в области видимости функции main, поэтому функция billamt не может знать об этом.

10

, где объявить структуры, внутри или снаружи main()main()?

  1. Первое, я думаю, что вы имели в виду "определить", а не "объявлять".

  2. Во-вторых, нет правило как таковое, вы можете определить, где хотите. Это все об определении .

    • Если вы определяете структуру внутри main(), объем ограничивается только main(). Любая другая функция не может видеть это определение и, следовательно, не может использовать это определение структуры.

    • Если определить структуру в глобальном масштабе (т.е. вне main() или любой другой функции, по этому вопросу), что определение доступно по всему миру, и все функции могут видеть и использовать определение структуры ,

1

структура являются как массив только основное различие в массиве может содержать только тот же тип значений, но структура может иметь различные типы значений, так что если вам нужно реализовать структуру глобально (глобально я имею в виду его можно использовать и в любой другой функции) определить его вне основного, и если вы хотите использовать свою структуру только в основной функции, определите ее внутри нее. Happy Coding :-)

+0

Это самый крутой ответ. (У) – lU5er

Смежные вопросы