'변수'에 해당되는 글 4건

Programming/C C++
C++ 에서 변수는 아래와 같이 선언합니다.
int age = 0;

int month;
month = 6;
변수는 '데이터형 변수명' 형태로 선언하며 변수는 반드시 사용전에 초기화 되어야 합니다.

변수나 함수, 클래스등에 붙이는 이름을 식별자라고 하는데 이 식별자는 알파벳과 숫자 그리고 _ 문자만 사용이 가능합니다. 숫자는 사용할 수 있으나 식별자의 시작문자로는 사용할 수 없으며 예약어(C++ 내에서 특별한 의미를 가지는 단어) 또는 사용이 불가하지만 예약어를 포함하는 형태의 단어인 경우는 사용이 가능합니다.

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

[Visual C++] 상수  (0) 2012.06.27
[Visual C++] 자료형  (2) 2012.06.26
[Visual C++] 변수  (0) 2012.06.25
[Visual C++] C++ 기본 형태  (0) 2012.06.22
[Visual C++] 관련 라이브러리  (0) 2012.06.21
표준 Library 함수 - Memory 관련 함수  (0) 2011.06.16
0 0
Programming/C C++
보통 Program에서 다루는 Data는 변수와 상수로 구분됩니다. 변수는

int a;

라고 선언한 뒤에 a에 어떠한 값을 넣느냐에 따라 a값이 달라지므로(값이 변할 수 있으므로) 변수라고 합니다.

반면 상수는 이미 정해진 값으로 그 값 자체는 변할 수 없는 특징이 있습니다.

1. 수치표현

(1) 입력

종류 표현
8 진수 0으로 시작합니다. (011, 022)
10 진수 일반숫자를 나타냅니다. (123, 124)
 16 진수  0x(0X)로 시작합니다. (0xA1, 0XA2)
▶정수표현

 종류  표현
 일반 실수  소수점을 사용합니다. (1.234, 2.56)
 float형 실수  f(F)를 사용합니다. (1.23f, 1.23F)
 long double형 실수  l(L)를 사용합니다. (12.34l, 12.34L)
 지수  e(E)를 사용합니다. (5e3, 3E2)
▶실수표현

참고:
일반실수는 double형입니다.

(2) 출력

 변환문자열  설명
 %o  8진수 출력 - printf("%o\n", 011);
 %d  10진수 출력 - printf("%d\n", 123);
 %x  16진수 출력 - printf("%x\n", 0xA1);
▶정수출력

 변환문자열  설명
 %f  실수출력 - printf("%f\n", 1.234);
 %e  지수출력 - printf("%e\n", 3E2);
 %g  인수를 실수와 지수중 알맞은 형태로 출력합니다.
▶실수출력

참고:
%로 시작하는 문자를 변환문자열이라고 합니다. 이 문자열은 주어진 인수를 해당 형태에 맞는 값으로 Format하는 역활을 합니다.

#include <stdio.h>

main()
{
  printf("%o\n", 011);
  printf("%d\n", 123);
  printf("%x\n", 0xA1);
  printf("%f\n", 1.234);
  printf("%e\n", 3E2);
}


2. 문자표현

문자표현은 '(따옴표)로 둘러싸 표현하며 문자자체와 상수를 이용하는 두가지 방법이 있습니다.

문자 -> 'a' 또는 'A'
상수 -> '97' 또는 '64'

상수로 문자를 표현하고자 할때는 해당 문자에 맞는 Ascii code를 사용하면 됩니다. 단. 일부 System에는 이 값이 틀린경우도 있기 때문에 문자상수는 문자자체로만 표현하는 것이 상수를 사용할때 보다 더 안정적입니다.

(1) 문자출력

문자를 출력하기 위해서는 %c 변환문자열을 사용합니다.

#include <stdio.h>

main()
{
  printf("%c\n", 'a');
  printf("%c\n", 97);
}



3. 문자열표현

문자는 '(따옴표)를 사용했지만 문자열은 "(쌍따옴표)를 사용합니다.

"hello"
"korea"

(1) 문자열출력

문자열출력은 %s 변환문자열 사용합니다.

#include <stdio.h>

main()
{
  printf("%s\n", "hello");
}



4. 기호정수

년도를 표시하기 위해 2009 라고 하였습니다. 하지만 이렇게 숫자로만 2009를 쓰면 다른 사람이 보기에 이것이 년도를 나타내는지 아니면 2009라는 정수를 나타내는 것인지 구분하기 어려울 수도 있습니다.

따라서 단순히 숫자로만 표시하기 보다는 now_year등의 문자열로 표시하면 이것이 년도를 나타내는 것임을 좀더 명시적으로 알려줄 수 있을 것입니다.

기호정수를 사용하는 방법은 다음과 같습니다.

#define 표시어 수치정수

위 구문을 Source Code의 #include 다음에 추가하게 되면 이후 직접 수치를 사용하지 않고도 표시어만을 통해 Code를 작성할 수 있게 되는 것입니다.

#include <stdio.h>
#define now_year 2009

main()
{
  printf("올해 년도는 %d 입니다.\n", now_year);
}



5. 열거형

열거형은 간단히 '정수를 모아놓은 값이다.'라고 할 수 있습니다. 열거형의 선언은 다음과 같이 할 수 있으며

enum 열거형이름 {정수값1, 정수값2, ...}

이때 정수값은 0부터 차례로 부여됩니다.

#include <stdio.h>

main()
{
  enum sequence {first, second, third, fourth, fifth};
 
  printf("%d\n%d\n%d\n%d\n%d\n", first, second, third, fourth, fifth);
}



열거형에서 정수값을 명시적으로 지정하면 해당 값부터 1씩 증가된 값으로 지정됩니다.

#include <stdio.h>

main()
{
  enum sequence {first = 100, second, third, fourth, fifth};
 
  printf("%d\n%d\n%d\n%d\n%d\n", first, second, third, fourth, fifth);
}


first에 100을 지정


필요에 따라 값은 중간부터라도 바꿀 수 있습니다.

#include <stdio.h>

main()
{
  enum sequence {first, second, third = 100, fourth, fifth};
 
  printf("%d\n%d\n%d\n%d\n%d\n", first, second, third, fourth, fifth);
}



열거형은 선언할때 변수를 지정해 해당 변수가 열겨형으로 사용됨을 명시할 수도 있습니다.

#include <stdio.h>

main()
{
  enum sequence {first, second, third, fourth, fifth} sort;
 
  sort = third;
 
  printf("sort의 값 %d\n", sort);
}


sequence를 형으로 한 sort변수를 선언합니다.


이때 enum자체는 int형이므로 선언된 변수도 int형의 크기를 가지게 됩니다. 따라서 열거형의 Data가 아닌 일반적인 int형 정수값도 다음 경우처럼 가질 수 있는 것입니다.

enum sequence {first, second, third, fourth, fifth};
int sort;


열거형 변수는 필요하다면 일반변수와 마찬가지로 몇개든 선언할 수 있으며

enum sequence {first, second, third, fourth, fifth} sort1, sort2, sort3;

enum을 정의한뒤 해당 enum을 Data형으로 한 변수를 따로 선언할 수도 있습니다.

enum sequence {first, second, third, fourth, fifth};
enum sequence sort;

이때 열거형명은 생략할 수도 있습니다.

enum {first, second, third, fourth, fifth} sort;

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

[C, C++] 표준 Library 함수 - 문자 판단 함수  (0) 2011.03.29
[C, C++] Object(obj)와 Link  (0) 2011.02.10
[C, C++] 상수(숫자, 문자, 문자열, 열거형) 정의및 사용  (0) 2011.02.09
[C, C++] 연산자  (0) 2011.02.08
[C, C++] 제어문  (0) 2011.02.01
[C, C++] 공용체  (0) 2010.09.27
0 0
Programming

변수

1. 여러 단어로 이루어진 변수명의 경우 두번째 단어 부터는 대문자로 시작할것

2. 대소문자 만으로 구별되는 같은 변수명 작성 금지

3. 헝가리안 규칙을 버리자.

4. 밑줄 사용 금지

5. 소문자로 시작

메소드(Method)

1. 메소드가 Public형식이면 대문자로 시작할것(PascalCase)

2. 메소드가 Private형식이면 소문자로 시작할것(camelCase)

* 클래스(생성자 포함)는 대문자로 시작할것

'Programming' 카테고리의 다른 글

정규표현식  (0) 2012.05.18
ANSI 문자 코드표  (0) 2011.02.25
XML을 써보자  (0) 2010.12.31
변수명및 메소드(Method)등 명명 규칙  (0) 2010.12.21
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
블로그 이미지

클리엘