아하
생활

생활꿀팁

은혜로운왈라비232
은혜로운왈라비232

C언어 변수 선언에서 궁금한 점이 있습니다.

변수 선언 시 앞에 volatile , static, enum, typedef , extern 등이 사용되는데

각 기능별 설명해 주실 분 있나요?

사용은 하는데 정확하게 이해가 되지 않습니다.

부탁 드립니다.

    55글자 더 채워주세요.
    1개의 답변이 있어요!
    • 프알못
      프알못

      volatile은 컴파일러에 의한 최적화를 막아줍니다.

      int a; a = 10; a = 20; a = 30;

      컴파일러는 a = 10과 a = 20을 쓸데없는 걸로 판단해

      int a = 30;

      이렇게 최적화를 해 버릴 것입니다.

      그런데 a가 하드웨어를 컨트롤하는 변수라거나... 하는 경우에는
      컴파일러가 마음대로 최적화 해 버리면 곤란하겠죠
      그런 경우에 사용하는 게 volatile입니다.


      static은 전역입니다.

      함수 안에 있어도, 함수 밖에 있는 것처럼 쓸 수 있습니다.
      처음 한 번만 초기화되고, 다시 초기화 없이 그 값을 쭉 유지합니다.

      int getCount() { static int count = 0; return ++count; }

      이 함수를 호출할 때마다 1씩 증가된 값을 얻을 수 있습니다.

      int count = 0; int getCount() { return ++count; }

      이 코드와 같다고 볼 수 있겠습니다.


      enum은 열거형입니다.

      #define DIRECTION_UP 0 #define DIRECTION_DOWN 1 #define DIRECTION_LEFT 2 #define DIRECTION_RIGHT 3 #define DIRECTION_FRONT 4 #define DIRECTION_BACK 5 int a = DIRECTION_UP;

      열거형을 이런 식으로 관리하면 중간에 뭔가 빠지거나 추가될 때마다 많이 귀찮지만

      enum Direction { DIRECTION_UP, DIRECTION_DOWN, DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_FRONT, DIRECTION_BACK } enum Direction a = DIRECTION_UP;

      enum을 쓰면 자동으로 관리해 주고, 심지어 타입 이름도 직관적입니다!


      typedef는 타입 이름을 줄이는 데 쓸 수 있습니다.

      enum myBool { false, true }; enum myBool a = true; enum myBool b = false;

      struct나 union, enum 등을 항상 붙이기 귀찮으니까!

      typedef enum { false, true } bool; bool a = true; bool b = false;

      이렇게 줄여서 쓸 수 있습니다. (배열, 포인터에도 쓸 수 있습니다.)


      extern은 코드 외부의 다른 변수를 사용할 때 씁니다.