'auto'에 해당되는 글 2건

Programming/Microsoft SQL Server
XML 참고 : [Computer, IT] - XML을 써보자

SQL Server에서 특정 Data를 조회하기 위해 Query를 날리면 보통의 경우 Table형태로 그 결과를 출력하게 됩니다.

Select *
From HumanResources.Department;


하지만 필요한 경우 결과를 XML형태로도 조회할 수 있습니다. 구현 방법도 아주 간단한데 단지 Query 뒤에 for xml option을 추가하고 원하는 형식에 따라 raw, auto, explicit을 덧붙이기만 하면 됩니다.

1. Raw

Raw은 Xml형태로 결과를 출력할때 Table에 해당하는 각 Column을 요소의 속성으로 한뒤 Table의 실제 Data를 속성의 값으로 표현하도록 합니다.

Select DepartmentID, Name, GroupName, ModifiedDate
From HumanResources.Department
For Xml Raw;


이때 각 행 요소의 이름은 row로 표시됩니다. 만일 이 이름이 마음에 들지 않는다면 괄호(())안에 원하는 이름을 지정해 줄 수 있습니다.

Select Top(3) DepartmentID, Name, GroupName, ModifiedDate
From HumanResources.Department
For Xml Raw('mytag');

요소 이름을 row가 아닌 mytag로 출력되도록 지정하였습니다.


Raw에 Elements요소를 추가하면 위에서처럼 단일 행으로 출력되는 형태가 아니라 각 행별(<row>)로 Column을 XML 요소로 하고 Table의 내용을 요소의 값으로 표현하도록 합니다.

Select Top(3) DepartmentID, Name, GroupName, ModifiedDate
From HumanResources.Department
For Xml Raw, Elements;


위 결과에서 Table의 Data를 요소의 값으로 표시하였으며 더불어 각 행마다 계층적으로 Query결과가 표현되었음을 확인할 수 있습니다. 이때 이 계층 구조의 요소에 최상위 요소를 추가하고자 하신다면 Root를 구문을 사용하십시오.

Select Top(3) DepartmentID, Name, GroupName, ModifiedDate
From HumanResources.Department
For Xml Raw, Elements, Root('topelement');

Root option으로 'ttopelement'라는 최상위 요소가 추가되도록 하였습니다.


참고:
이전까지의 내용도 그렇고 이후에 설명될 내용에서도 마찬가지지만 각 Option을 어떻게 사용할지는 개발자가 비교적 자유롭게 정할 수 있는 대목입니다. 예제에서도 Root는 마치 Elements option이 쓰여졌을때만 사용한다라는 오해의 소지를 갖게 될 수 있으나 실제로는 그렇지 않고 단독으로 쓸 수 있습니다.(물론 다른 Option도 특별한 경우를 제외하고는 모두 마찬가지 입니다.)

XML문서를 이루는 요소중의 하나로 DTD라는 것이 있습니다. 이 DTD를 통해 해당 XML문서의 구조를 알 수 있도록 하는데 Query에서 XmlData를 쓰면 그 결과로 XML이 표시될때 해당 XML이 어떻게 구성되어 있는지에 대한 DTD를 같이 나타내도록 할 수 있습니다.

Select Top(3) DepartmentID, Name, GroupName, ModifiedDate
From HumanResources.Department
For Xml Raw, XmlData;


XML출력결과의 상단에 Schema라는 이름으로 해당 XML구조를 나타내고 있습니다.

일반적인 Data형 Table의 경우에는 대부분 XML형태로 결과를 얻는데 큰문제가 없습니다. 그러나 Column의 Datatype형태가 Image나 Text와 같은경우에는 이 Data자체를 XML로 표현하기가 곤란할 수 있습니다. 따라서 해당 Column의 내용을 Binary로 변화시켜서 표현해야 하는데 이때 Binary Base64구문을 사용하시면 됩니다.

Select Top(2) ProductPhotoID, ThumbNailPhoto, ThumbnailPhotoFileName
From Production.ProductPhoto
For Xml Raw, Binary Base64;

AdventureWorks2008 예제 Database의 Production.ProductPhoto Table에는 ThumbNailPhoto라는 Image Datatype의 사진(그림)정보가 저장된 Column이 있습니다.

(실제 Binary Base64 출력결과를 보면 이보다 훨씬 길게 나타납니다.)

일반적인 방법으로 XML형태의 표현이 불가능한 경우는 또 있습니다. 바로 Table에 Null이 있는 경우 입니다.

Select Top(3) AddressID, AddressLine1, AddressLine2
From Person.Address
For Xml Raw;

Person.Address Table의 AddressID와 AddressLine1, AddressLine2를 3행까지 XML 형태로 출력하도록 합니다.


결과를 놓고 보니 뭔가 좀 이상하다는 생각할 할 수 있습니다. 분명 Query에서는 AddressLine2까지 표시하라고 했지만 AddressLine1만 나왔기 때문입니다. 이는 XML출력시에 Null은 결과에서 아예 제외하기 때문입니다. 이러한 현상을 막으려면 Xsinil Option을 써야합니다.

Select Top(3) AddressID, AddressLine1, AddressLine2
From Person.Address
For Xml Raw, Elements Xsinil;

Xsinil이 Elements와 함께 구현되었습니다.


결과에서는 Null에 해당하는 부분의 속성이 xsi:nil="true" 형태로 나타나 이 요소에 대한 Column의 내용이 null이라는 것을 알려주고 있습니다.

2. Auto

Raw사용시 이름을 지정해 주지 않으면 XML의 각 요소를 row항목으로 표시했었는데 Auto는 row가 아닌 조회되는 해당 Table명으로 XML의 요소를 이루도록 합니다.

Select Top(3) DepartmentID, Name, GroupName, ModifiedDate
From HumanResources.Department
For Xml Auto;


row대신 해당 Table명으로 각 요소를 이루고 있습니다.

어떻게 보면 Raw에서 Table영으로 이름을 지정해 준것과 결과가 동일하다고 볼 수 있겠습니다. 아무래도 의미없는 row대신 Table명으로 요소를 자동표시한다고 해여 이름이 auto인듯 합니다.^^;;

참고:
Table이름에 As구문을 사용하여 다른 이름을 부여했다면 해당 이름으로 요소명이 지정됩니다.

3. Explicit

Explicit는 Raw나 Auto와는 달리 출력되는 XML의 각 요소를 비교적 자유롭게 작성할 수 있도록 해줍니다. Result set을 원하는 XML형태로 조회하는 것이 가능하다는 얘기인데 기능이 우수한 만큼 사용하기도 다소 번거롭습니다.

일단 간단하게나마 짚어보도록 하겠습니다.

Select 1 As Tag, Null As Parent, DepartmentID As [Department!1!ID]
From HumanResources.Department
Order By [Department!1!ID]
For XML Explicit;

HumanResources.Department Table의 DepartmentID Column을 Explicit style로 출력합니다.

Select에서 1 As Tag는 출력할 Tag요소가 하나(1)인것만을 지정한다는 의미로 해석하시면 됩니다. 또한 출력하려는 요소의 부모요소는 현재 존재하지 않으므로 Null As Parent로 부모 요소를 지정합니다.(나중에 설명 드리겠지만 요소를 늘리려면 조회하는 구문을 하나 더 써서 Union으로 Join해야 합니다.)

[Department!1!ID]에서 Department는 Department요소를 추가시킨다는 의미 입니다. 뒤이은 !은 요소와 요소의 차수 그리고 속성을 구분해 주는 구분자 역활을 합니다.

차수는 현재 1단계 level의 요소만을 출력할 것이므로(Select 에서 1 As Tag로 하여 출력할 Tag요소가 하나라는 것을 이미 정의하였습니다.)1이라고 쓰고 다시 구분자(!)를 둔뒤 속성명으로 ID를 부여하여 Department요소에 ID라는 속성을 추가시켜 해당 속성값으로 DepartmentID Column내용을 출력하도록 합니다.


이번에는 위 결과에 하위 요소를 하나더 추가시켜 보겠습니다. Explicit option으로 요소를 추가하려면 해당 조회구문을 더 만들고 Union으로 Join하는 형태로 나가야 합니다.

Select Top(3) 1 As Tag, Null As Parent, DepartmentID As [Department!1!ID], Null As [Names!2!Nm]
From HumanResources.Department
Union
Select Top(3) 2 As Tag, 1 As Parent, DepartmentID, Name
From HumanResources.Department
Order By [Department!1!ID], [Names!2!Nm]
For XML Explicit;

DepartmentID Column에 이어 Name Column을 Department 요소의 하위요소로 추가하여 조회 하도록 하였습니다. 이처럼 요소를 늘리려면 그 만큼 Union Join을 통해 각 요소의 추가적인 조회 구분을 더 만들어야 합니다.

두번째 Select문에서는 2 As Tag라고 하였습니다. 말 그대로 해당 Select문에서는 DepartmentID와 Name두개의 Column을 조회하여 각 Tag 요소로 출력하기 때문입니다.

또한 1 As Parent라고 한것은 Name조회한 요소를 Department요소의 하위 요소로 출력할 경우 부모 요소는 Department요소가 되기 때문에 Parent를 1이라고 정의한 것입니다. 반면 첫번째 Select문에서는 여전히 조회하는 Column이 하나이므로 출력할 Tag요소도 하나이기 때문에 1 As tag는 변하지 않으며 DepartmentID에 대한 요소의 부모 요소도  첫번째 Select문에 존재하지 않으므로 부모 요소는 Null을 유지하고 있습니다.

한편 첫번째 Select문에 DepartmentID이후 Null을 조회하도록 한 것은 해당 요소의 내용은 두번재 Select문에서 가져오기 때문입니다. 결국 두번째 Select문에서 가져온 Name column값을 Names라는 요소로 만들고 하위 2번째 요소로 정한다음 Nm속성을 만들어 속성의 값으로 표시([Names!2!Nm])한 것입니다.

두번째 Select문에서 DepartmentID와 Name은 이미 첫번째 Select문에서 각 Column에 대한 요소를 [Names!2!Nm]처럼 정의했기 때문에 또 다시 정의하는 것은 불필요합니다. 왜냐하면 Column의 이름만 써주면 그걸로 충분하기 때문이죠.

Top(3)은 출력되는 부분이 너무 커서 행을 다소 줄이기 위해 추가한 것입니다. 그리고 Order By는 조회할 각 Column을 정렬해 주지 않으면 XML출력시 결과요소가 서로 뒤엉키는 문제가 생기지 않도록 정렬하기 위한 것입니다.


이번에는 Department요소와 Names요소에 이어 Group요소를 하나더 추가해 보겠습니다.

요소를 늘리기 위해 조회 구문을 하나 더 만들어 Union으로 join합니다. 세번째 Select문의 구현 원리도 두번째 설명드린 구현원리와 같습니다.


물론 부모 요소는 반드시 첫번째 Select문의 1이어야할 필요는 없습니다. 필요하다면 바꿀 수 있는데 이런경우 당연히 출력되는 형태도 달라질 것입니다.

Select Top(3) 1 As Tag, Null As Parent, DepartmentID As [Department!1!ID], Null As [Names!2!Nm], Null As [Group!3!Name]
From HumanResources.Department
Union
Select Top(3) 2 As Tag, 1 As Parent, DepartmentID, Name, Null
From HumanResources.Department
Union
Select Top(3) 3 As Tag, 2 As Parent, DepartmentID, Name, GroupName
From HumanResources.Department
Order By [Department!1!ID], [Names!2!Nm], [Group!3!Name]
For XML Explicit;

세번째 Select문에서 부모 요소를 1이 아닌 2라고 지정하였습니다. 즉, 두번째 요소인 Names요소를 부모요소로 지정한 것입니다.


이번에는 좀 다르게 요소를 추가하지 않고 Names 요소에다가 Name과 GroupName Column의 내용을 Nm, Group의 두개 속성으로 만들어 표현해 보도록 하겠습니다.

Select Top(3) 1 As Tag, Null As Parent, DepartmentID As [Department!1!ID], Null As [Names!2!Nm], Null As [Names!2!Group]
From HumanResources.Department
Union
Select Top(3) 2 As Tag,  1 As Parent,  DepartmentID,  Name,  GroupName
From HumanResources.Department
Order By [Department!1!ID], [Names!2!Nm], [Names!2!Group]
For XML Explicit;

이전보다 Select문이 하나 더 줄었습니다. 기존에는 Department와 Names 그리고 Group 이렇게 3개의 요소를 출력하려 했으므로 세개의 Select문을 Union Join해야 했지만 이번에는 기존 Group요소를 없애고 대신 해당 Group내용을 Name요소에 통합하여 두개의 속성으로 만들고 출력하기 때문에(출력할 요소가 Department와 Name두개 이기 때문에) Join될 Select구문도 두개면 충분한 것입니다.

먼저 첫번째 Select문에서 두번째 조회 column부분에 [Name!2!Nm]이라고 정의하면 Name요소가 만들어질 것이고 그 이후에 만들어진 Name요소에다가 속성만을 추가할 것이므로 세번째는 요소명과 출력될 요소의 차수를 똑같이 써서 추가할 속성명만 [Names!2!Group]처럼 지정해 주면 됩니다.

물론 두번째 Select문에서는 Group속성에 표시할 Column(예제에서는 GroupName)을 지정해 줘야 하겠지요.


Names요소에 Nm과 Group속성 두개가 추가되고 각각의 속성에 Name과 GroupName내용을 표시하고 있습니다.

이제까지 예제에서는 모두 속성을 통해 값을 표시하고 있지만 이렇게 하지 않고 요소 자체에다가 해당 내용이 보여지도록 지정할 수도 있습니다.

Select Top(3) 1 As Tag, Null As Parent, DepartmentID As [Department!1!ID], Null As [Names!2!Nm!Element], Null As [Names!2!Group!Element]
From HumanResources.Department
Union
Select Top(3) 2 As Tag, 1 As Parent, DepartmentID, Name, GroupName
From HumanResources.Department
Order By [Department!1!ID], [Names!2!Nm!ELEMENT], [Names!2!Group!ELEMENT]
For XML Explicit;

요소 지시자에 !로 구분하여 Element를 추가하였습니다. 첫번째 Select문에서 두번재와 세번째 Column조회 부분을 주목해 주십시오.


각 Column의 값이 속성이 아닌 Tag 요소를 통해 표시됨을 확인할 수 있습니다.

참고:
출력하려는 XML의 각 요소에 ID를 지정하고자 하신다면 Element를 지정한 것과 같이 ID를 지정하시면 됩니다. 또한 조회하는 Column에 Null이 있다면 Element대신 Elementxsinil을 사용하시면 Null이 있는 Column도 조회가 가능합니다.
0 0
Programming/C C++

1. 지역변수

함수안에서 정의되고 함수안에서 사용되는 변수를 지역변수라고 합니다. Program내에서 함수가 여러개 존재할 경우 각 함수내부에 쓰인 변수는 다른 함수에서 쓰인 지역변수와 이름이 같다 하더라도 충돌하지 않으며 가장 일반적인 변수형이라고 할 수 있습니다.

#include <stdio.h>

main()
{
  int i = 100;
 
  printf("main함수의 지역변수 i값 : %d\n", i);
 
  myfunc();
}

myfunc()
{
  int i = 200;
 
  printf("myfunc함수의 지역변수 i값 : %d\n", i);
}


main과 exfunc에서 i라는 같은 이름의 변수를 사용했지만 충돌하지 않고 정상적으로 실행됩니다.


또한 지역변수는 함수내부에서만 사용되어야 하므로 다른 함수에서 쓰인 지역변수를 가져올 수는 없습니다.(예를 들면 main함수에서 exfunc함수안에 쓰인 지역변수 i를 가져오지 못합니다.)

참고:
함수안에서 지역변수를 선언하려면 원래는 auto i; 처럼 auto를 붙여야 하지만 생략하는 것이 관례화 되었습니다.

2. 전역변수

Program내에서 하나의 변수를 각각 다른 함수에서 공유하고자 한다면 전역변수를 써야합니다. 전역변수는 특정함수가 아닌 함수외부에 선언되며 이렇게 선언된 변수를 전역변수로 인식하게 됩니다.

선언된 전역변수는 각 함수에서 얼마든지 접근이 가능합니다. 이때 어떤 함수에서 전역변수의 값을 변경하면 다른함수에서 해당 전역변수를 사용시에도 이전에 설정되었던 값이 그대로 유지될 수 있습니다.

#include <stdio.h>

int i;

main()
{
  i = 100;
 
  printf("main함수의 전역변수 i값 : %d\n", i);
 
  myfunc();
}

myfunc()
{
  i += 200;
 
  printf("myfunc함수의 전역변수 i값 : %d\n", i);
}


변수i는 Program내에서 함수외부에 선언되었으므로 전역변수로 인식합니다. 또한 선언된 전역변수는 이름이 특정 함수안에서 선언된 지역변수와 이름이 같다 하더라도 충돌하지 않습니다. 다만 전역변수와 지역변수의 이름을 동일하게 쓰는것은 권장하지 않습니다.(지역변수와 전역변수의 이름이 같은경우 함수안에서 접근된 변수는 지역변수로 인식됩니다.)


전역변수는 Program자체가 종료되어야 Memory상에서 제거되므로 각 함수에서 설정된 값이 그대로 유지되고 있습니다.

이때 만일 다른 Module에서 전역변수 불러오려면 Extern을 사용합니다.

#include <stdio.h>

int i;

main()
{
  i = 100;
 
  printf("main함수에서의 전역변수 i값 : %d\n", i);
 
  myfunc();
}위 Program을 test.c 라는 이름으로 저장합니다.
#include <stdio.h>

extern int i;

myfunc()
{
  i += 100;
 
  printf("extern함수에서 불러온 전역변수 i값 : %d\n", i);
}


위 Program을 test2.c 라는 이름으로 저장합니다.(이 Program에서는 extern int i;라는 이름으로 main에서 쓰인 전역변수 i를 참조하려고 합니다.)


test.c와 test2.c를 Compile합니다.


Compile된 Program은 test.exe라는 이름으로 생성되었습니다.

Program은 main함수에서 전역변수 i의 값을 100으로 설정하고 다른 Module에서 작성된 myfunc함수에서 i값을 다시 100만큼 더하여 그 결과를 나타내고 있습니다. 이런형태의 변수는 extern로 선언한다하여 외부변수라고 합니다.

단, 전역변수의 참조는 함수밖에서 extern을 통해 선언하고 참조하는데 만일 함수내부에서 extern을 사용한다면 그 변수는 해당 함수안에서만 사용할 수 있게 됩니다.

#include <stdio.h>

myfunc()
{
  extern int i;
  i += 100;
 
  printf("extern함수에서 불러온 전역변수 i값 : %d\n", i);
}

exfunc()
{
  i = 300;
}


전역변수 i가 myfunc함수안에서 선언되었습니다. 따라서 전역변수 i는 myfunc안에서만 쓸 수 있습니다. exfunc함수에서 i에 300값을 저장하려고 하지만 실제 이렇게 사용될 수는 없는 것입니다.

3. 정적변수

지역변수는 함수안에서 쓰이고 해당 함수가 종료되면 그 안에서 쓰이던 전역변수도 Memory상에서 제거됩니다. 반면 전역변수는 함수 외부에서 선언되는 변수로서 함수가 아닌 Program전체가 종료되어야 Memory상에서 제거됩니다.

C에서는 이 지역변수와 전역변수의 특징을 모두 가지는 정적변수라는 것이 있습니다. 즉, 특정 함수안에서 선언되고 그 함수안에서 쓰이지만 함수의 동작이 종료되어도 해당 변수는 제거되지 않고 그대로 유지되는 특징을 가지고 있는 것입니다.

정적변수는 정적변수를 쓰고자 하는 함수안에서 static으로 선언됩니다.

#include <stdio.h>

main()
{
  printf("myfunc함수 호출 - 1\n");
  myfunc();
  printf("myfunc함수 호출 - 2\n");
  myfunc();
}

myfunc()
{
  static i = 0;
 
  i += 100;
 
  printf("myfunc함수의 정적변수 i값 : %d\n", i);
}


main함수에서 myfunc함수를 두번 호출하여 정적변수 i값을 확인하고 있습니다. myfunt함수에서는 변수 i를 static으로선언하였습니다. 따라서 변수i는 정적변수가 됩니다.


정적 변수로 선언된 i는 myfunc함수의 사용이 종료되어도 Memory에서 제거되지 않고 그 값이 그대로 유지되고 있습니다. 정적변수도 전역변수와 마찬가지로 Program자체가 종료되어야 Memory에서 제거됩니다.

4. block내에서의 변수 선언

C언어는 원래 Program의 처음 부분에 변수를 선언하고 사용해 합니다. 다시 말해 Program중간에 변수를 선언하는것은 불가능하다는 것입니다.

#include <stdio.h>

main()
{
  int a;
 
  a = 100;
 
  printf("a값 %d\n", a);
 
  int b;
  b = 100;
}


Program중간에 int형 변수 b를 선언하지만 C에서 이러한 방법은 허용하지 않습니다.


하지만 예외적으로 새로운 변수를 Program중간에 허용하는 경우도 있습니다. 특정 Block안의 '{}'범위안에서 선언되는 변수가 그것입니다.

#include <stdio.h>

main()
{
  int a;
 
  for(a = 10; a > 0; a--){
    int b;
    b = 20;
   
    printf("일반 변수 a의 값 : %d\n", a);
    printf("{}범위안의 변수 b의 값 : %d\n", b);
  }
}


for문을 작성하고 {와 }로 for의 범위를 block화 하였습니다. 그리고 이 범위안에 새로운 변수인 b를 선언하였습니다.


단, blcok변수는 해당 block안에서만 유효합니다. 즉, block밖에서는 해당 변수에 접근할 수 없습니다.

만일 block안에 선언한 변수와 외부의 일반변수의 이름이 같은 상황이 되면 block안에서 사용하는 변수에 우선권이 주어지게 됩니다.

#include <stdio.h>

main()
{
  int a;
 
  for(a = 10; a > 0; a--){
    int a;
    a = 20;
   
    printf("일반 변수 a의 값 : %d\n", a);
  }
}


일반변수와 block변수를 같은 이름으로 선언하고 for문의 block안에서 a변수를 사용하고 있습니다. 이런 경우 block안에서 선언한 변수에 접근하는 것이 됩니다.


일반 변수가 아닌 block안에서의 변수값이 출력되고 있습니다.

5. 전역변수의 정적(static)화

전역변수를 선언하면 해당 변수는 다른 Module에서도 extern을 통해 볼러 올 수 있다고 하였습니다. 그런데 만일 두개의 서로 다른 Module에서 같은 이름의 전역변수를 사용하게 되면 어떻게 될까요?

#include <stdio.h>

int a;

main()
{
  a = 100;
 
  printf("a의 값%d\n", a);
}


전역변수 a를 선언하고 test.c라는 이름으로 저장합니다.

#include <stdio.h>

int a;

myfunc()
{
  i = 200;
  printf("i의 값 %d\n");
}


전역변수 a를 선언하고 test2.c라는 이름으로 저장합니다.

test.c와 test2.c에 전역변수 a가 같은 이름으로 선언되었습니다. 이렇게 하는 원래의 목적은 외부(다른 Module)에서 참조할 필요는 없고 해당 Module안에서만 쓰이도록 하고자 하였는데 위 예제에서는 이름이 같아져서 혼란을 줄 우려가 생긴 것입니다.

이 문제를 해결하려면 전역변수 앞에 static을 붙여야 합니다. 그러면 다른 Module끼리 해당 전역변수가 공유되지 않고 해당 변수가 선언된 Module안에서만 사용한다는 것을 명시해 주게 됩니다.


참고:
실제 Microsoft C로 위 Source를 Compile해본결과 static이 있든 없든 별다른 오류는 발생하지 않았습니다. 하지만 그렇다고 각 Module간에 아무런 제약없이 같은 이름의 전역변수를 쓰는건 그리 권장할 만한 방법이 아닙니다. 같은 이름을 써야 한다면 static붙여 각 Module끼리 서로 공유하지 않는다라는 것을 명시해 주는것이 유지보수에 도움이 될것입니다.

6. register변수

지역, 전역, 정적 변수모두 선언하는 즉시 선언된 변수의 Data형 만큼 Memory공간을 확보하게 됩니다.

그런데 변수 선언시 register를 사용하면 해당 변수는 Memory가 아닌 CPU의 Register에 그 영역이 확보됩니다.

잘알고 계시겠지만 Memory와 Register는 속도면에서 상당한 차이가 있으며 일반적으로 Memory는 빠른 속도의 Register를 따라오지 못합니다. 결국 일반적인 변수보다 register변수가 더 빨리 처리될 수 있는 것입니다.

#include <stdio.h>

main()
{
  register i = 0;
 
  for (i = 0;i <= 1000; i++)
    printf("변수 i값 : %d\n", i);
}


변수i를 register로 선언하였습니다.


참고:
만일 register로 선언된 변수가 너무 많거나 Data형이 커서 해당 Computer의 Register가 감당할 수 없는 경우에는 auto(지역변수)로 처리하게 됩니다.

'Programming > C C++' 카테고리의 다른 글

[C, C++] Microsoft C, C++ Compiler  (0) 2010.01.22
[C, C++] Class 상속  (0) 2010.01.13
[C, C++] 함수작성및 Data전달  (0) 2010.01.07
C언어 함수사용 예제 Souce  (0) 2010.01.06
[C, C++] Pointer  (0) 2010.01.05
[C, C++] 변수통용범위(변수의 기억 Class)  (0) 2010.01.04
0 0
1
블로그 이미지

클리엘