|
수야랍니다.
이곳저곳 뒤져보고 읽어보고 해서 가장 설명이 잘 된것 두개를 발췌해왔습니다.
extern
프로그램을 작성할때 보통 모듈별로 프로그래밍을 하다보면 화일을 여러개로
나눠서 프로그래밍을 하게 됩니다. 그러다보면 전역변수를 사용할때도 있고
지역변수를 사용하는 경우도 있지만 전역변수의 경우에는 주로 그 쓰임이 여러
모듈에서 같은 데이터를 사용하기 위해서 인데 이걸 각각의 모듈에다 선언을
한다면 메모리 낭비 일뿐만 아니라 같은 데이터를 사용할 수도 없게 됩니다.
그걸 방지하기 위해 다른 화일에 선언한 전역변수를 이 화일에 있는 함수에서
사용하겠다고 컴파일러에 알려주는 것이 extern 입니다.
#pragma
#pragma는 #include나 #define처럼 컴파일러(번역기)에게 특별한 명령을 내릴때 사용하는 컴파일러 지시자입니다. 이 #pragma는 단독으로 사용되지 않고 반드시 뒤에 하나 이상의 단어를 사용해서 나타냅니다.
#pragma는 컴파일러 지시자의 기능을 확장하는 것이라고 생각할 수 있습니다. 이를테면 C/C++ 언어 표준에 등장하지는 않지만 각각의 컴파일러 회사들마다 나름대로의 기능을 구현하기 위해서 사용하는 경우가 많습니다. 말하자면 이 #pragma 지시자는 확장 컴파일러 지시자인 셈입니다. 따라서 #pragma는 컴파일러 회사마다 독특한 여러 가지 지시 사항들을 가지고 있습니다. 자세한 것은 여러분이 가지고 계시는 컴파일러의 도움말을 참조하십시오.
Turbo C++에서 사용되는 #pragma 지시자의 예를 한 가지 들겠습니다.
void foo( int bar);
#pragma argused
{
printf("Hello!!\n");
}
위와 같이 사용하는데 만약 위에서 #pragma 지시자가 없으면 위의 프로그램은 컴파일 할 때 "Argument 'bar' is declared, but never used"라는 경고를 받게 됩니다. 즉 함수의 머릿부분에 bar라는 인수를 선언해 놓고는 함수 본체에서 한 번도 사용되지 않았다는 말로, 대부분의 경우 이 경고는 프로그램상에 논리적인 잘못이 있어서 벌레를 유발할 수 있음을 경고해 줍니다.
그러나 프로그래머가 어떤 의도에 의해서 일부러 저런 코드를 써 주어야 할 때 위의 #pragma 지시문을 이용해서 경고를 무시해 버릴 수 있는 것입니다.
이와 같이 #pragma 지시자는 표준적인 컴파일러 지시자보다 좀 더 구체적인 면을 지시해 줄 수 있는 컴파일러 특유의 확장 지시자라고 생각하시면 될 것입니다.
seiyes 님이 쓰신 글 :
: 도움말을 봤지만 이해가 제대로 되지 않아 질문을 드렸습니다...
: 알고계시면 간단하게라도 설명부탁합니다....
:
:
: 수야!╋ 님이 쓰신 글 :
: : 해당부분에 커서를 가져다놓고 F1을 눌러보시면
: :
: : 설명이 나와있습니다......
: :
: :
: :
: : seiyes 님이 쓰신 글 :
: : :
: : : header파일을 보면...
: : :
: : : extern PACKAGE TEmpDAO *EmpDAO 선언부분이 있는데...
: : :
: : : 이부분에 대한 일반적인 설명 좀 부탁합니다...
: : :
: : : 그리고 pragma의 역할역시 궁금합니다...
: : :
: : :
: : :
: : :
|