(보충) 최신 gcc에서의 선언문 차이

블로그에 작성중인 c의 경우에는 지금 최신의 주분투와 최신 버전의 gcc를 이용하고 있다. 그러나 작성하는 내용은 이전에 규링이 직접 c를 배울 때 쓰던 책 자료도 참고로 하고 있다. 그러다 보면 요즘과는 차이가 좀 나는 부분이 있는데, 이번에 자료를 만들면서 겪었다.

변수 선언을 할 때, 한번에 특정 변수를 동일한 값으로 취급하여 선언하는 경우가 있다. 이전에 작성한 산술 연산자 글에서의 두번째 예시에 보면 a,b,c,d 네 변수를 차례차례 선언한 수에 c=d=2를 작성하여 c,d를 한번에 2로 지정하였다.%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-15-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-4-20-34

근데 c를 오래전부터 짜왔던 분들은 그냥 선언할 때 저 두번째 문장을 확 넣어버리도록 배웠다. 그리고 그 때에는 그대로 했어도 오류가 나지 않았다. 그게 아래에 있는 예시이다.

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-15-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-4-18-35

근데 지금은 이렇게 하면 오류를 낸다.

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-15-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-4-18-50

오류 문장을 보면 d가 선언되지 않았다고 한다. 이게 문제될 것이 뭐냐면서 하는 분들이 있는데, 요즘에는 컴파일러들이 이걸 문제삼는다. 선언을 먼저 함으로써 메모리 할당을 보호하려는 정책인 듯 하다. 자세한 건 찾아봐야 할텐데…;;

21 – 연산자 (산술)

산술 연산자는 수치 계산에 이용되는 연산자로 덧셈, 뺄셈, 곱셈, 나눗셈을 수행한다. 그리고 정수에 대한 나눗셈 연산에서는 소수점 이하는 버린다. 나머지 연산에는 %를 이용하여 나머지만을 나타내며, 정수 연산만 가능하다.

연산자 / 의미 / 예시

  • + / 두 연산자를 더함 / a + b
  • – / 앞의 연산자에서 뒤의 피연산자를 뺌 / a – b
  • * / 두 피연산자를 곱함 / a * b
  • / / 앞의 피연산자에서 뒤의 피연산자를 나눔 / a / b
  • % / 앞의 피연산자에서 뒤의 피연산자를 나눈 나머지 a % b
  • ++ / 피연산자에 1 증가 / a++
  • — / 피연산자에 1 감소 / a–

예시로 +, *를 이용한 예시를 보여준다.

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-15-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-4-17-46%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-15-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-4-18-14

증가 연산자의 경우에는 프로그래밍을 할 때 상당히 많이 이용한다. 사용할 때 조심해야 하는 것이 있는데, ++의 위치이다. a++은 a를 사용한 후에 1을 증가하고, ++a는 a를 사용하기 전에 1을 증가시킨다. 이 둘의 차이를 보여주기 위해서 동일한 식을 보여주자면 아래와 같다.

a = b++;
의 경우에는
a = b;
b = b + 1;
와 같은 식이다.

a = ++b;
의 경우에는
b = b + 1;
a = b;
와 같은 식이다.

이 둘의 차이를 확인하기 위한 예시가 아래의 예시이다. 하나 하나 천천히 실행해서 확인해 본다.

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-15-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-4-20-34%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-15-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-4-20-53