아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
은혜로운왈라비232
은혜로운왈라비23219.06.03

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은 코드 외부의 다른 변수를 사용할 때 씁니다.