2015-02-07 1 views
2

왜 우리는 전 세계적으로 어떤 할당 문을 쓸 수 있습니까? 당신은 모든 기능의 범위에 존재하는 변수가 필요하면 내 코드가전 세계적으로 할당 문을 쓸 수없는 이유는 무엇입니까?

#include <stdio.h> 
    static int i=10; //Initialization statement 
    i=25;    //Assignment statement not possible why? 
    int main() 
{ 
printf("%d",i); 
return 0; 
} 
+0

함수에없는 임의의 코드를 작성할 수 있어야한다고 생각하는 이유는 무엇입니까? – John3136

답변

0

이하, 필요에 따라 다음 기능을 수정할 수 있습니다, 전 세계적으로 그것을 선언 할 수 있습니다 함수에 변수를 전달할 필요가 없습니다.

당신이하고있는 일은 선언 한 다음 수정하는 것이므로 실제로 원하는 값으로 선언하지 마십시오. 변수를 변경해야하는 경우 필요에 따라 함수 내에서 변수를 변경하십시오.

전역 선언이 허용되지만 로컬에서 선언하고 함수에 변수를 전달할 수없는 이유를 자문 해보십시오. 그 질문에 제대로 대답 할 수 없다면, 아마도 그런 식으로 변수를 사용해서는 안됩니다. 큰 프로그램을 유지 관리하는 것이 어려워 질수록 변수를 임의로 선언 할 수 있습니다.

0

"언제"의 질문입니다.

int i=10;은 컴파일 타임에 결정되고 i은 프로그램이로드되거나 처음 실행되기 시작할 때 10의 값을 취합니다.

글로벌 i=25;시퀀스 없음입니다. 링크 된 파일이 여러 개인 경우 이러한 "전역"코드를 실행해야하는 순서는 제어 할 수 없습니다.

int i=10;main()으로 이동하면 평가 순서가 결정됩니다.

#include <stdio.h> 
static int i=10; 

int main(void) { 
    printf("%d",i); 
    i=25; 
    printf("%d",i); 
    return 0; 
} 
0

C는 Ruby 나 Perl과 같이 (소위) 스크립팅 언어와 다르게 작동합니다.

함수 내부의 코드 (중괄호 사이)와 비슷하게 보이지만 함수 외부의 코드는 실제로 실행되지 않습니다. 실제로 실행되는 코드에서 액세스 할 수있는 변수를 선언하고 정의하기 위해 컴파일러에서 사용됩니다. 실행되는 코드는 함수 내에 정의됩니다.

컴파일러가 프로그램을 컴파일하면 각 함수에 대한 실행 가능 코드 단편을 생성 한 다음 함께 "링크"하여 최종 프로그램을 생성합니다. 실행이 파일의 맨 위에서 시작되지 않으므로이를 위해 작업 영역을 정의해야합니다. C에서 컴파일러는 프로그램을 실행할 때 "main"함수가 호출되도록 정렬합니다.