본문 바로가기

ETC Programmings

변수와 연산자

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
#include <stdio.h>

int main(void) {
   int a;
   a = 10;
   int b;
   b = 10;

   printf("%d %d",a,b);
   return 0;
}
이런 내용의 소스코드가 있는데.. 이게 컴파일 에러가 납니다. 이유인 즉슨, 변수의 선언이 잘못 되었기 때문입니다. 자바에서는 이런경우에는 문제가 없드라구요.. 변수는 언제 선언하더라도 상관이 없습니다만.. 절차지향 프로그래밍인 C 프로그래밍 에서는 변수의 선언이 항상 초반에 선언이 되어야 합니다. 따라서 선언과 초기화가 따로 따로 되어 있는 위의 소스코드는 에러가 납니다.

해결 방법은 묶어서 선언하고, 묶어서 초기화해야합니다.

#include <stdio.h>

int main(void) {
   int a;
   int b;
   a = 10;
   b = 10;

   printf("%d %d",a,b);
   return 0;
}
이렇게 만들면, 문제 없이 컴파일이 되고 실행이 됩니다. 나중에라도 자바에서의 코딩 습관에 물들어서 C에서 이런 실수를 하면 안되겠습니다. 선언과 초기화의 분리를 확실히 해놔야 겠습니다.


C에서는 여러가지 연산자들을 사용합니다. 자바에서의 마찬가지로 대입 연산자 (=) 와 산술 연산자 (+, -, *. /, %) 를 사용할 수 있습니다. + 는 더하기, - 는 뺴기, * 는 곱하기, / 는 나누기, % 는 나머지!! 안까먹고 기억하고 있습니다.

단골 손님 나오셨습니다 -ㅅ-; a라는 변수에 a++ 이냐 ++a 이냐 a--이냐 --a 이냐 하는 문제인거죠 -ㅅ- ㅋㅋ 이거 정말 혼동되는 문제인데요.. 활용빈도가 굉장히 높은데 말이죠.. -_-... 정리를 좀 해보겠습니다.
++a 의 경우에는 a의 값을 1 증가시킨 후에 연산을 진행 (선 증가, 후 연산)
a++ 의 경우에는 연산을 진행한 후에 a의 값을 1 증가    (선 연산, 후 증가)
--a 의 경우에는 a의 값을 1 감소시킨 후에 연산을 진행 (선 감소, 후 연산)
a-- 의 경우에는 연산을 진행한 후에 a의 값을 1 감소    (선 연산, 후 감소)
#include <stdio.h>

int main(void){
   int value1 = 10;
   int value2 = (value1--) + 2;

   printf("%d\n", value1);
   printf("%d\n", value2);
   return 0;
}

위와 같은 소스코드의 결과 값은 어떻게 될까요 -ㅅ-? 콘솔창에는 9와 12의 값이 출력이 됩니다. 그러니까 과정을 살펴보도록 하겠습니다.

1. value1 의 값이 10으로 선언됨
2. value1--의 경우에는 선 연산, 후 감소 이므로 먼저 value1 의 값 10과 2와 연산이 진행된다.
3. value2에 연산된 값인 12가 선언이 된다.
4. value1의 -- 연산이 진행되고 value1의 값은 1이 감소된 9가 된다.
5. 결과적으로 value1의 값은 9가 되고, value2의 값은 12가 된다.

관계 연산자 (<, >, ==, !=, <=, >=) 도 사용이 가능하고 논리 연산자 (&&. ||, !) 역시 사용이 가능하다. 또한 비트 연산자라는 것에 대해서도 나왔는데.. 자바에서도 이 비트 연산자가 있었던것으로 기억을 합니다만.. -_-;; 솔직히 한번도 써본적이 없기에... 책에서 보니.. 정말 새롭습니다. 4장에서 더 자세히 다룬다고 하는데요. 뭐.. ~, &, ^, |, <<, >> 라는 놈들이 있다는 것만 알아 두도록 하죠 -ㅅ-..

음.. 드디어 나왔네요.. 자바에서 콘솔창에서 값을 입력받던 메소드가 Scanner 클래스에 있는 next() 메소드였는데 C에서는 scanf() 라는 함수가 있습니다 -ㅅ-)//

뭐 이러고 3장이 어영부영 끝나네요.. -ㅅ-... 연습문제가 남았습니다.