extern
extern 은 외부에서 전역변수로 사용할때 사용 됩니다. 저건 지역 변수구요 차라리 할거면 함수 안에서만 사용하실려면 static을 사용하세요 06.12.04 22:10
C언어를 조금 능숙하게 다루기 시작하면 보통 한 파일에 모든 내용을 다 넣지 않습니다. 여러개의 파일로 나눠서 쓰곤하죠... 이때 쓰는 키워드가 extern입니다. main.h 파일에 전역변수로 a를 선언 해두고... main.h 파일을 include해서 쓰는 모든 종류의 *.c 파일에서는 main.h의 전역변수 a를 사용할수 있어야 되겠죠... 만약 main.c 파일에서 main.h를 include해서 쓴다면 main.c에서 extern int a; 라고 선언 해줘야 합니다. extern을 빼 버리면 링크 하는 과정에서 동일한 변수명이 발견되어 에러가 생기고, extern int a;을 아예 빼버리면 main.c파일 자체가 컴파일 안되죠... 설명이 맞나 몰긋네요.. ^^;; 잘 안써본 거라서 말이죠... 06.12.05 14:18
컴파일러마다 약간씩 틀리긴 하지만.. 기본적으로 extern으로 선언하면 실제 메모리상에 변수가 올라가는것이 아닙니다. 이 변수가 어딘가에 선언되어 있으니 '찾아라' 이 정도의 의미입니다. 사용에 주의하시기 바랍니다.. 06.12.05 23:01
extern은 변수나 함수의 이름이 전역(외부에서 정의되어 아무데서나 참조될 수 있는)임을 컴파일러에게 알리는(선언) 데 사용됩니다. extern이 없으면, 당연히 변수를 만드는(정의) 것입니다. 선언은 컴파일러에게 이름의 자료형을 알리는 것입니다. 선언되지 않은 이름을 사용하면 컴파일러는 해석할 수 없습니다. 사실 #include <파일> 을 먼저 하는 가장 큰 이유이죠. 정의는 메모리를 할당하여 변수의 실체를 만드는 과정입니다. 따라서 사용한다면 반드시 정의되어 있어야
이것을 header, source로 나누어 쪼개라는데..
도대체 하는 방법과..
어떻게 extern을 쓰는 건지 잘 모르겠어서..
이렇게 도움을 요청합니다..
아시는 분 있으시면 제발 답변 부탁합니다..
------------------------------------------------------------------
#include "stdio.h"
#define MAX_TERMS 101
typedef struct term {
int col;
int row;
int value;
}term;
void transpose(term c[],term d[]);
void main()
{
term a[MAX_TERMS];
term b[MAX_TERMS];
int i;
a[0].row=6;a[0].col=6;a[0].value=8;
a[1].row=0;a[1].col=0;a[1].value=15;
a[2].row=0;a[2].col=3;a[2].value=22;
a[3].row=0;a[3].col=5;a[3].value=-15;
a[4].row=1;a[4].col=1;a[4].value=11;
a[5].row=1;a[5].col=2;a[5].value=3;
a[6].row=2;a[6].col=3;a[6].value=-6;
a[7].row=4;a[7].col=0;a[7].value=91;
a[8].row=5;a[8].col=2;a[8].value=28;
transpose (a,b);
for(i=0;i<=8;i++)
printf("%3d", b[i].row);
printf("\n");
for(i=0;i<=8;i++)
printf("%3d", b[i].col);
printf("\n");
for(i=0;i<=8;i++)
printf("%3d", b[i].value);
printf("\n");
}
void transpose(term a[],term b[])
{
int n,i,j,currentb;
n=a[0].value;
b[0].row=a[0].col;
b[0].col=a[0].row;
b[0].value=n;
if(n>0){
currentb=1;
for(i=0;i for(j=1;j<=n;j++)
if(a[j].col==i){
b[currentb].row=a[j].col;
b[currentb].col=a[j].row;
b[currentb].value=a[j].value;
currentb++;
}
}
}
하나의 소스파일을 main.h main.c transpose.c 로 나누어 보겠습니다.
define과 struct선언을 main.h에 했고, transpose()는 transpose.c에 두고,
main.c에서 extern으로 선언해서 사용했습니다.
// main.h /////////////////////////////////////////
#define MAX_TERMS 101typedef struct term {
int col;
int row;
int value;
}term;
/////////////////////////////////////////////////////////
// main.c ///////////////////////////////////////
#include <stdio.h>
#include "main.h"
extern void transpose(term c[],term d[]);
void main()
{
...
...
}
/////////////////////////////////////////////////////////////////
// transpose.c ///////////////////////////////////////
#include <stdio.h>
#include "main.h"
void transpose(term a[],term b[])
{
...
...
}
////////////////////////////////////////////////////////////////////////
'C & C++ 관련' 카테고리의 다른 글
변수 형태,extern (0) | 2007.12.06 |
---|---|
#difine과 typedef 와 const 의 정의와 예제줌 (0) | 2007.10.22 |
Character Set과 Font (0) | 2007.10.20 |